Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт май 29, 2020 10:10

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Полёт мысли или встроим форт в JSON
СообщениеДобавлено: Пт дек 20, 2019 21:10 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 973
Благодарил (а): 1 раз.
Поблагодарили: 8 раз.
Поиграл я, значит, в 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 )
]
}

}



Соот-но, у нас тут явно какой-то слабый грипп. :shuffle;

Короче,
задача перебрать за ход все параметры и после перепроверить их на корректность.
превращается в простой перебор, ибо выражения на этом диалекте форта тоже объекты.
И если произойдёт неординарное событие (смерть, обморок и пр.), то об этом станет известно сразу же.
В штатном же режиме параметры будут изменяться сами собой.

А теперь скажите мне, какой велосипед я изобрёл :))

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Полёт мысли или встроим форт в JSON
СообщениеДобавлено: Чт дек 26, 2019 20:58 
Не в сети

Зарегистрирован: Пн июл 01, 2019 14:01
Сообщения: 69
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Если честно, не совсем уловил мысль :)

Напоминает сорта лиспа, или что-то типа Red/REBOL.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Полёт мысли или встроим форт в JSON
СообщениеДобавлено: Пт дек 27, 2019 01:54 
Не в сети

Зарегистрирован: Чт июл 12, 2018 02:33
Сообщения: 7
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Не вижу ничего общего с фортом. Ни одного слова из обычного форта. + и bye здесь имеют совершенно другой смысл.
Получился обычный DSL, понятный только автору.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Полёт мысли или встроим форт в JSON
СообщениеДобавлено: Пт дек 27, 2019 02:23 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 973
Благодарил (а): 1 раз.
Поблагодарили: 8 раз.
dmitri писал(а):
Не вижу ничего общего с фортом. Ни одного слова из обычного форта. + и bye здесь имеют совершенно другой смысл.
Получился обычный DSL, понятный только автору.

Ну и какие тогда обычные форт-слова должны быть пригодны для операций с объектами, списками, массивами и прочим зоопарком?

То что DSL это конечно, как бы, самоочевидно)

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB