Size: a a a

2020 November 10

JS

Jerzy Syrowiecki in Haskell
например, в Хаскеле apecs
источник

VD

Velvet Darkness in Haskell
Оно по-моему слегка иррелевантно моему вопросу будет. У меня нет (пока) заморочек со списками возможностей а-ля ходит\летает. Мой вопрос скорее про структуру данных.
источник

VD

Velvet Darkness in Haskell
Ну и вообще оригинальная проблема даже не про игру, просто её сильно дольше было б объяснять, а суть в принципе та же.
источник

KV

Kirill Valyavin in Haskell
Velvet Darkness
Если набор комнат, а предметы\персонажи как часть комнат - неудобно будет обходить персонажей, потому что придется обходить все комнаты, а из них большая часть пустые.
Небось можно и так, и так одновременно
источник

VD

Velvet Darkness in Haskell
Kirill Valyavin
Небось можно и так, и так одновременно
Тогда тоже появляется возможность сделать неконсистентное состояние. Типа в значении персонажа написано, что он в комнате А, а в значении комнаты А написано, что там нет никого. А комната Б считает, что персонаж в ней. А может еще какая-нибудь комната так тоже считает.
источник

VD

Velvet Darkness in Haskell
Т.е. это по сути третий вариант с отдельными списками на всех и связь в виде айдишников у каждой сущности.
источник

KV

Kirill Valyavin in Haskell
Ну можно сделать апи такой, чтобы инварианты не нарушались, это же классическая задача в программировании
источник

KV

Kirill Valyavin in Haskell
Velvet Darkness
Т.е. это по сути третий вариант с отдельными списками на всех и связь в виде айдишников у каждой сущности.
Не обязательно айдишники, можно прямо ссылаться
источник

VD

Velvet Darkness in Haskell
Не можно, а прям нужно. Мне интересно можно ли такое сделать correct by construction и вот это вот всё.
источник

KV

Kirill Valyavin in Haskell
Вы уж определитесь, хотите быстро или корректно
источник

VD

Velvet Darkness in Haskell
Kirill Valyavin
Не обязательно айдишники, можно прямо ссылаться
Если ссылаться прямо, то не получится ли такой прикол, когда ты меняешь комнату, взяв ее из персонажа, а у другого персонажа в этой же комнате остается старое значение комнаты? Ты ж копию будешь менять.
источник

KV

Kirill Valyavin in Haskell
Velvet Darkness
Если ссылаться прямо, то не получится ли такой прикол, когда ты меняешь комнату, взяв ее из персонажа, а у другого персонажа в этой же комнате остается старое значение комнаты? Ты ж копию будешь менять.
Если мутабельность не ввозить, то да, есть такое
источник

VD

Velvet Darkness in Haskell
Kirill Valyavin
Вы уж определитесь, хотите быстро или корректно
А можно всё сразу? :D Вообще это дискачевый вопрос.
Быстро вроде можно налепить на иорефах и апи с инвариантами. А можно ли сделать корректно + удобно и\или быстро при этом?
источник

KV

Kirill Valyavin in Haskell
Нельзя, конечно
источник

VD

Velvet Darkness in Haskell
Я это еще и потому спрашиваю, что вдруг есть какой-то четвертый\пятый\десятый вариант, про который я не в курсе.
источник

AV

Alexander Vershilov in Haskell
Velvet Darkness
А можно всё сразу? :D Вообще это дискачевый вопрос.
Быстро вроде можно налепить на иорефах и апи с инвариантами. А можно ли сделать корректно + удобно и\или быстро при этом?
на TVar
источник

JS

Jerzy Syrowiecki in Haskell
Velvet Darkness
Если предметы\персонажи и у них написано в какой комнате они сидят - неудобно комнаты обходить.
Если предметы\персонажи отдельно, комнаты отдельно - непонятно как выразить отношение "находится в".
как в БД. отдельно коллекция комнат с айди. отдельно коллекция предметов с айди. отдельно коллекция "присутствий", то есть пар (айди комнаты, айди предмета), можно словарик
источник

VD

Velvet Darkness in Haskell
Jerzy Syrowiecki
как в БД. отдельно коллекция комнат с айди. отдельно коллекция предметов с айди. отдельно коллекция "присутствий", то есть пар (айди комнаты, айди предмета), можно словарик
О, и проблемы с неконсистентностью нет.
источник

AV

Alexander Vershilov in Haskell
можно ссылаться на несуществующую комнату
источник

AV

Alexander Vershilov in Haskell
Или несуществующий предмет
источник