1

我似乎无法编写(伪代码):为所有 X、Y 打印 X 和 Y,其中 X==True 和 Y==True 或 Y==False

>>> from pyDatalog import pyDatalog
>>> pyDatalog.create_terms('X,Y')
>>> print((X==True)
X   
----
True
>>> print((X==True) & (Y==True))
X    | Y   
-----|-----
True | True

目标是编写如下内容:

>>> print((X==True) & ((Y==True) or (Y==False)))
X    | Y   
-----|-----
True | True
True | False

相反,这会准确打印出上一个命令返回的内容。

我怎样才能做到这一点?

4

2 回答 2

1

如果这意味着要遍历 X 和 Y 的一组布尔值,并打印 X && Y 的结果,这应该有效:

from pyDatalog import pyDatalog

allValues = [True, False]

pyDatalog.create_terms('result, X, Y, R, table')

(result[X, Y] == True) <= (X == True) & (Y == True)
(result[X, Y] == False) <= (X == False)
(result[X, Y] == False) <= (Y == False)

table(X, Y, R) <= (X._in(allValues)) & (Y._in(allValues)) & (R == result[X, Y])

print(table(X, Y, R))

这是输出:

X     | Y     | R    
------|-------|------   
False | True  | False   
False | False | False  
True  | True  | True  
True  | False | False
于 2016-04-13T00:19:13.430 回答
1

我对 pyDatalog 还有些陌生,但我的理解是析取应该分成多行。因此,您的代码将会出现(诚然有些无明):

from pyDatalog import pyDatalog
pyDatalog.create_terms('X,Y')

print(((X==True) & ((Y==True))))
print(((X==True) & ((Y==False))))
于 2016-01-24T19:37:29.790 回答