kanren
python逻辑编程
示例:
KANEN是关系的表达式和满足他们的价值的搜索。下列代码就是逻辑编程的"Hello, world!" ,最简单的示例。他请求一个数 x,如x ==5
>>> from kanren import run, eq, membero, var, conde >>> x = var() >>> run(1, x, eq(x, 5)) (5,)
多个变量和多个目标可以同时使用。下列代码请求一个数x,如 x==z,同时z==3
>>> z = var() >>> run(1, x, eq(x, z), eq(z, 3)) (3,)
KANN使用统一模式匹配的高级形式来匹配表达式树。下列代码请求一个数 X,如(1, 2)=(1,x)。
>>> run(1, x, eq((1, 2), (1, x))) (2,)
前面的例子中使用的 eq,表述的是两个表达式相等。membero(item, coll)
表示 item
是 coll
集合中的一个成员。下面例子使用 两次 membero去请求 x 的2个值,
>>> run(2, x, membero(x, (1, 2, 3)), # x is a member of (1, 2, 3) #x是(1,2,3)的成员之一 membero(x, (2, 3, 4))) # x is a member of (2, 3, 4) #x是(2,3,4)的成员之一 #2 表示求两个解,则,变量x,可能的解为 (2,3) (2, 3)
逻辑变量
下面例子中,z = var()
创建一个逻辑变量. 您还可以选择为变量命名,以方便后面调试:
>>> z = var('test') >>> z ~test
也可以用 vars()
带一个整形参数一次创建一组逻辑变量:
>>> a, b, c = vars(3)
>>> a
~_1
>>> b
~_2
>>> c
~_3
Representing Knowledge
知识表达
kanren存储两个条件之间的状态关系的数据。
kanren stores data as facts that state relationships between terms.、
下面代码创建一个亲缘关系,并且使用它来判断谁是 Simpsons家庭的父亲。
The following code creates a parent relationship and uses it to state facts about who is a parent of whom within the Simpsons family.