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