数据记录:为什么(X == False)& (Y ==不(X))不评价?

时间:2017-10-23 16:24:24

标签: python datalog pydatalog

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

2 个答案:

答案 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)