Forth http://fforum.winglion.ru/ |
|
Полёт мысли или встроим форт в JSON http://fforum.winglion.ru/viewtopic.php?f=33&t=3256 |
Страница 1 из 1 |
Автор: | Victor__v [ Пт дек 20, 2019 21:10 ] |
Заголовок сообщения: | Полёт мысли или встроим форт в JSON |
Поиграл я, значит, в RimWorld и решил понять как это работает хотя бы концептуально. Чтобы обмозговать эту задачу, я составил JSON-структуру описывающую человека. Органы, части тела, кровообращение, иммунная система и пр. И тут я задумался. А как, собственно, менять параметры в этой структуре? Это ж замаешься их выискивать! А ведь ещё из-за их изменения человек может скопытиться. В сухом остатке получится, что надо за 1 условный ход перебрать всё дерево для поиска и изменения параметров. А после ещё проверить "нормальность параметров". К примеру, у человека закончилась кровь и он умер. И тут я подумал, а пусть параметры сами себя меняют! Как? А расширим JSON функциями-выражениями, которые до боли будут напоминать форт! Вопрос: Почему именно форт? Ответ: Простейший парсер Вопрос: И всё?! Ответ: Да, если найдёте ещё неочевидные преимущества, буду только рад. Вот например набросал примерный код для выработки иммунитета от болезни. Код: ( 60 0 'speed hour' this + =< 'грипп' 'defend' this add 'грипп' 'disease' this delete bye ) Смысл выражения: 60 - кол-во ходов, за которые выработается иммунитет 0 - счётчик выработанности иммунитета 'speed hour' - строка-ключ на параметр отражающий скорость выработки иммунитета за 1 ход. this - взять строку как ключ и вернуть ссылку на этот объект в JSON, берётся начиная от первого объемлющего объекта + - увеличить значение объекта-счётчика на значение от объекта на вершине стека =< - внезапно, сравнить два значения объектов. Если они не равны или счёткик больше покинуть выражение add - добавить объект в объект, если он это позволяет delete - удалить объект с ключом "грипп" в объекте. bye - удалить выражение Соот-но, каждых ход выражение будет меняться Код: ( 60 1 'speed hour' this + =< 'грипп' 'defend' this add 'грипп' 'disease' this delete bye ) ... ( 60 2 'speed hour' this + =< 'грипп' 'defend' this add 'грипп' 'disease' this delete bye ) ... и т. д. А теперь всё это вместе с кусочком данных в формате JSON Код: 'immune system': { 'speed hour':1 // скорость выработки иммунитета за ход 'defend':['tetanus',] // к чему выработан иммунитет. Для примера тут написан столбняк 'disease':{ // болезни, с которыми сейчас борется иммунитет 'грипп: [ ( 60 0 'speed hour' this + =< 'грипп' 'defend' this add 'грипп' 'disease' this delete bye ), ( 240 0 1 + =< 'dead' signal ) ] } } Соот-но, у нас тут явно какой-то слабый грипп. Короче, задача перебрать за ход все параметры и после перепроверить их на корректность. превращается в простой перебор, ибо выражения на этом диалекте форта тоже объекты. И если произойдёт неординарное событие (смерть, обморок и пр.), то об этом станет известно сразу же. В штатном же режиме параметры будут изменяться сами собой. А теперь скажите мне, какой велосипед я изобрёл |
Автор: | f02732 [ Чт дек 26, 2019 20:58 ] |
Заголовок сообщения: | Re: Полёт мысли или встроим форт в JSON |
Если честно, не совсем уловил мысль Напоминает сорта лиспа, или что-то типа Red/REBOL. |
Автор: | dmitri [ Пт дек 27, 2019 01:54 ] |
Заголовок сообщения: | Re: Полёт мысли или встроим форт в JSON |
Не вижу ничего общего с фортом. Ни одного слова из обычного форта. + и bye здесь имеют совершенно другой смысл. Получился обычный DSL, понятный только автору. |
Автор: | Victor__v [ Пт дек 27, 2019 02:23 ] |
Заголовок сообщения: | Re: Полёт мысли или встроим форт в JSON |
dmitri писал(а): Не вижу ничего общего с фортом. Ни одного слова из обычного форта. + и bye здесь имеют совершенно другой смысл. Получился обычный DSL, понятный только автору. Ну и какие тогда обычные форт-слова должны быть пригодны для операций с объектами, списками, массивами и прочим зоопарком? То что DSL это конечно, как бы, самоочевидно) |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |