Pilog (Lisp&Prolog)

На основе PicoLisp построен декларативный язык, обладающий семантикой Prolog, но использующий синтаксис Lisp. Факты и правила могут быть объявлены с помощью be функции. Как и в Прологе, разница между фактами и правилами заключается в том, что последние имеют условия и обычно содержат переменные. Переменная в Pilog — это любой символ, начинающийся с символа at-метки (" @
"), т. е. pat? символ. Сам символ @
может использоваться как анонимная переменная: он будет соответствовать во время унификации, но не будет привязан к сопоставленным значениям. Оператор cut Пролога (обычно обозначаемый восклицательным знаком (!)
является символом T
в Pilog. Интерактивный запрос можно выполнить с помощью ? функции. Pilog можно вызвать из Lisp и наоборот:
Интерфейс из Lisp осуществляется через функции goal (подготовка запроса из данных Lisp) и prove(возвращение списка ассоциаций успешных привязок), а также функции уровня приложения pilog и solve.
Если CAR предложения Pilog является символом
^
, то CDDR выполняется какprg
тело Lisp, а результат объединяется с CADR.В таком выражении Lisp в предложении Pilog текущие привязки переменных Pilog доступны напрямую в соответствующих привязках символов Lisp или могут быть доступны с помощью -> функции (последняя необходима только для доступа к средам Pilog не верхнего уровня).
Как видим, существует функция уровня приложения - pilog, оценивающая запрос Pilog и выполняет prg
для каждого набора результатов, при этом все переменные Pilog привязаны к соответствующим значениям.
(pilog 'lst . prg) -> any
: (pilog '((append @X @Y (a b c))) (println @X '- @Y))
NIL - (a b c)
(a) - (b c)
(a b) - (c)
(a b c) - NIL
-> NIL
Более того, функции, реализующие концепцию классиицированы отдельным списком - prove -> unify be clause repeat asserta assertz retract rules goal fail pilog solve query ? repeat/0 fail/0 true/0 not/1 call/1 or/2 nil/1 equal/2 different/2 append/3 member/2 delete/3 permute/2 uniq/2 asserta/1 assertz/1 retract/1 clause/2 show/1 for/2 for/3 for/4 db/3 db/4 db/5 val/3 lst/3 map/3 isa/2 same/3 bool/3 range/3 head/3 fold/3 part/3 tolr/3 select/3 remote/2.
Обычно Pilog используется либо интерактивно для запросов к базе данных во время отладки, либо в приложениях для генерации экспортных данных и отчетов. Весь доступ Pilog к внешним символам осуществляется через два предиката db/3 и select/3
https://picolisp.com/wiki/?tutpilog
P.S. Ссылки на функции в списке есть по ссылке функции pilog. Обычно такие списки просто копирую как есть, со ссылками, но местный софт иногда глючит при редакции ссылок, что случилось и при создании этого поста, поэтому бороться с ним не стал, а просто сделал без ссылок.
Subscribe to my newsletter
Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Sergey Shishkin
Sergey Shishkin
Всегда чему-то учусь!