среда, 26 июля 2017 г.

Ни о чём. Хотя и о "многом". Как посмотреть

Вообще - "функциональщина" - она "рулит" - 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 и его "атомы" и "предикаты".

LINQ для Delphi. Набор ссылок

LINQ для Delphi. Набор ссылок.

https://m.habrahabr.ru/post/203970/

https://www.devart.com/entitydac/

http://blog.devart.com/using-linq-in-entitydac.html

https://www.osp.ru/pcworld/2009/09/10333910/

http://www.sql.ru/forum/1157390/linq

При "всём богатстве выбора" - я всё же планирую сделать собственную реализацию - http://programmingmindstream.blogspot.ru/2017/07/todo-linq.html?m=1

Сделал стабы для вызова локальных функций под Win64

Аналог "анонимных функций". Но более гибко.

Если интересно - могу подробно расписать.

http://programmingmindstream.blogspot.ru/2016/12/1321.html?m=1

http://programmingmindstream.blogspot.ru/2016/12/1323-win64.html?m=1

ToDo. Сделать "аналог" LINQ

http://programmingmindstream.blogspot.com/2017/07/blog-post.html

Через промежуточную примеси и промежуточный интерфейс.

.transform можно сделать через "кеш интерфейсов". Это надо ещё обдумать.

На Delphi XE - понятно как делать. А вот под Delphi 7 - "задачка". Но решаемая.

вторник, 25 июля 2017 г.

Функциональщина

Конструкция вида:

Vector1 .filter .IsClass
.join ( Vector2 .transform .Parent .filter .IsUnit )
.join ( Vector3 .filter .IsRecord )
.transform .TypeName
.sort .stringCompare
.forEach .print

Или:

0
[ 1 2 3 4 ]
.join [ 5 6 7 8 9 ]
.revert
.filter ( != 5 )
.transform ( + 2 )
.forEach +
.print

- это - "ураган"!

Начинаю проникаться "функциональщиной".

Это на "моих скриптах. На современных Delphi подобное тоже возможно. Несколько более многословно. Но возможно.

Очень продуктивный подход. Учитывая константность объектов и возможность кеширования результата.

У Штефана Глинке есть конечно, что-то подобное.

Ну и на LINQ (https://ru.m.wikipedia.org/wiki/Language_Integrated_Query) похоже.

Ну и вспоминаются "fluent-interface'ы".

понедельник, 24 июля 2017 г.

Off-topic. Интересная книга

http://knihi.by/knihi/kraina-bielarus-vialikaje-kniastva-litouskaje-druhi-varyjant-vokladki

Интересная книга. Но спорная.

Off-topic. Люди. Они разные

#байка

Я вам расскажу другую историю...

Ездили мы лет 10 назад с приятелем "по лесам и болотам".

И занесло нас в Волоколамск. В монастырь. Иосифо-Волоцкий.

Мы переночевали в лесу. А с утра пошли осматривать достопримечательности.

И тут - храм открыт. Утренняя служба.

Приятель мой - в храм пошёл.

Стоит, крестится. Службу слушает.

Ну а я - мнусь на крыльце.  Курю. Дождь идёт. Курю и мёрзну.

И тут батюшка подходит. Говорит - что мол на крыльце. Заходите мол в храм.

А я говорю - я атеист и коммунист. Нечего мне в храм ходить.

А батюшка мне - так замёрзли мол и дождь. Войдите в храм. Погрейтесь. Я вам фрески интересные покажу.

И показал. И рассказал. Очень интересно было и душевно.

Люди, все, они - разные бывают.