0

我正在使用 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
>>> 
4

2 回答 2

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)))
于 2017-10-25T17:03:34.343 回答
-1

它是 Python 中的运算符优先级

(Y == (not(X))

或者

(Y == not X)
于 2017-10-23T16:27:44.407 回答