2

我尝试使用==操作符在 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 谓词中包含这些比较和否定运算符?

4

1 回答 1

3

这里的问题是您想要分配谓词(易燃和不可燃),但您使用的是函数分配语法。(这是一个有用的链接,我发现它可以理解谓词和函数之间的区别。)在 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)

这行得通。

于 2016-01-24T19:11:46.077 回答