我正在做一个练习,用几个不同的习语编写一些逻辑代码...... Prolog、miniKanren、ASP 等......以感受每一个。
我有一个关于一些非常基本的问题:
在 Prolog 中,您可以定义:
human(bob).
然后在 REPL 中你可以检查这个事实和非事实的真实性:
?- human(bob).
true.
?- human(e_t).
false.
在 python miniKanren,LogPy中,您可以类似地定义事实:
from kanren import fact
fact(human, 'bob')
我找不到简单地检查“鲍勃是人类”的真相的秘诀。
该run
函数似乎需要一个变量作为第二个参数,但我不想找到变量的值。
我发现的所有 kanren 示例都是从显示如何查询关系开始的,例如:
from kanren import Relation, fact, run, var
human = Relation()
fact(human, 'bob')
fact(human, 'jim')
x = var('x')
run(0, x, human(x))
# output:
('jim', 'bob')
这更有用,但我想做的甚至比这更简单(只是为了比较 Prolog 中的相同婴儿步骤)。