Page 198 - 6734
P. 198

програму
               f.write('isParent("Ivan","Petro"). isChild(X,Y)
           :- isParent(Y,X).')
           p = Popen(r'"c:\Program Files
           (x86)\swipl\bin\swipl.exe" -q family.pl', shell=True,
           stdin=PIPE, stdout=PIPE, stderr=STDOUT)
           print p.communicate('isChild(X,"Ivan").') # надіслати
           запит і отримати результат

           ('\r\nX = "Petro".\r\n\r\n\r\n', None)
                      kanren – логічне програмування в Python

               kanren  0.2.3  (https://github.com/logpy/logpy)  –  це  реалізація
           вбудованої  предметно-орієнтованої  мови  логічного  програмування
           miniKanren  (http://minikanren.org)  [3].  miniKanren  спроектована  для
           легкої  модифікації  і  розширення  для  різних  видів  логічного
           програмування.  kanren  використовує  бібліотеку  unification  для
           уніфікації  –  розширеної  форми  зіставлення  з  взірцем.  Типи,  які
           можуть  бути  уніфіковані,  можуть  застосовуватись  також  для
           логічного програмування. Наступний код знаходить значення x:

           >>> from unification import *
           >>> x = var('x')
           >>> unify((1,x,3), (1,2,3))
           {~x: 2}
               Де  (1,x,3),  (1,2,3)  –  два  терми  (дерево,  листки  якого  є
           константами  або  змінними),  x  –  логічна  змінна,  {~x:  2}  –
           підстановка,  unify  –  функція,  яка  повертає  підстановку  за  двома
           термами.

               Ціль – це функція з підстановки в потік підстановок:
           >>> goal=eq((1,x,3), (1,2,3))
           >>> for s in goal({}):
           ...     print s
           {~x: 2}
                                         197
   193   194   195   196   197   198   199   200   201   202   203