Вообще - "функциональщина" - она "рулит" - http://programmingmindstream.blogspot.ru/2017/07/blog-post.html?m=1
Вспоминается LISP и FORTH. И "множество скобочек".
А ещё я сделал реализацию "алгебры отношений" для кодогенерации.
Вместо:
Elem a
Elem b
Elem c
End c
Elem d
End d
Elem e
End e
End b
End a
Я сделал:
Elem a
Elem b
Elem c
Elem d
Elem e
Relation Children a ( b )
Relation Children b ( c d e )
То есть я сначала вытянула все "понятия" в плоский список (буквы словаря опрелелил), а потом ОТДЕЛЬНО определил "отношения" (слова) - между "понятиями".
И стало возможно определять другие "отношения":
Relation Uses b ( a )
Relation Inherits d ( c )
Relation Implements d ( e )
И дальше уже пошла чистая "алгебра отношений" или говоря проще для ремесленников - операции над коллекциями. Их фильтрация, трансформация, сортировка, объединение, вычитание, удаление дубликатов и т.д. И т.п.
b .Uses .join ( d .Inherits ) .filter ( != c ) .transform .toString .sort .stringCompare .forEach .print
- надеюсь "интуитивно понятно".
Объединяем элементы используемые b с элементами унаследованного от d. Выкидываем те, что равны c. Результат преобразуем к массива строк. Сортируем. Перебирается поэлементно. Каждый элемент - печатаем.
И тут уже вспоминается Prolog и его "атомы" и "предикаты".
Вспоминается LISP и FORTH. И "множество скобочек".
А ещё я сделал реализацию "алгебры отношений" для кодогенерации.
Вместо:
Elem a
Elem b
Elem c
End c
Elem d
End d
Elem e
End e
End b
End a
Я сделал:
Elem a
Elem b
Elem c
Elem d
Elem e
Relation Children a ( b )
Relation Children b ( c d e )
То есть я сначала вытянула все "понятия" в плоский список (буквы словаря опрелелил), а потом ОТДЕЛЬНО определил "отношения" (слова) - между "понятиями".
И стало возможно определять другие "отношения":
Relation Uses b ( a )
Relation Inherits d ( c )
Relation Implements d ( e )
И дальше уже пошла чистая "алгебра отношений" или говоря проще для ремесленников - операции над коллекциями. Их фильтрация, трансформация, сортировка, объединение, вычитание, удаление дубликатов и т.д. И т.п.
b .Uses .join ( d .Inherits ) .filter ( != c ) .transform .toString .sort .stringCompare .forEach .print
- надеюсь "интуитивно понятно".
Объединяем элементы используемые b с элементами унаследованного от d. Выкидываем те, что равны c. Результат преобразуем к массива строк. Сортируем. Перебирается поэлементно. Каждый элемент - печатаем.
И тут уже вспоминается Prolog и его "атомы" и "предикаты".
Комментариев нет:
Отправить комментарий