我正在使用pyDatalog(在Python 2.7中)。使用类似+
的算术函数,我可以引用一个早期的绑定变量:
>>> (X==1) & (Y==X+1)
[(1, 2)]
但我不能以同样的方式使用布尔not
运算符:
>>> not(False)
True
>>> (X==False) & (Y==not(X))
File "<stdin>", line 1
(X==False) & (Y==not(X))
^
SyntaxError: invalid syntax
>>>
答案 0 :(得分:1)
您可以使用自定义解析器:
from pyDatalog import pyDatalog
@pyDatalog.predicate()
def not_2(X,Y):
if X.is_const():
yield (X.id, not(X.id))
elif Y.is_const():
yield (not(Y.id), Y.id)
@pyDatalog.program()
def _():
print ((X==False) & (not_(X,Y)))
答案 1 :(得分:-1)
它是Python中的运算符优先级
(Y == (not(X))
或
(Y == not X)