我尝试使用==
运算符在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谓词中包含这些比较和否定运算符?
答案 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)
这很有效。