在pyDatalog中使用布尔运算符

时间:2014-11-25 22:26:35

标签: pydatalog

我尝试使用==运算符在pyDatalog中创建谓词,但易燃[X]的定义似乎无效:

from pyDatalog import pyDatalog
pyDatalog.create_terms('flammable, notFlammable, X, Y')

flammable[X] = ((X == 'wood') or (X == 'coal'))`
#TypeError: unhashable type: 'Query'

notFlammable[X] = ~flammable[X]
#This doesn't work either.

我还尝试在pyDataLog谓词中包含比较运算符,但这也不起作用:

threeOrFour[X] = ((X < 3) or (X > 4))
#pyDatalog.util.DatalogError: Error: left hand side of comparison must be bound: </2 in line None of None

是否可以在pyDatalog谓词中包含这些比较和否定运算符?

1 个答案:

答案 0 :(得分:3)

这里的问题是你想要分配谓词(易燃和不可燃)但你正在使用函数赋值语法。 (Here's a useful link I found to understand the distinction between predicates and functions.)在pyDatalog中分配谓词的方法是在括号中使用参数,并使用<=进行赋值,如下所示:

from pyDatalog import pyDatalog
pyDatalog.create_terms('flammable, notFlammable, X, Y')

flammable(X) <= ((X == 'wood') or (X == 'coal'))


notFlammable(X) <= ~flammable(X)

然后对于你的第二个例子,它在逻辑编程中常见的将分离分成多行:

from pyDatalog import pyDatalog

pyDatalog.create_terms('threeOrFour,X')

threeOrFour(X) <= (X < 3)
threeOrFour(X) <= (X > 4)

这很有效。