我试图使用pyDatalog操作符在==中创建谓词,但是flammableX的定义似乎无效:
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谓词中包括这些比较和否定操作符?
发布于 2016-01-24 19:11:46
这里的问题是,您希望分配谓词(易燃和notFlammable),但您使用的是函数赋值语法。(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)这个很管用。
https://stackoverflow.com/questions/27137946
复制相似问题