2015-12-29 3 views
1

Je ne semblent pas être en mesure d'écrire (pseudo-code): Imprimer X et Y pour tous X, Y où X et Y == Vrai == Vrai ou Faux Y ==Disjointe logique avec PyDatalog

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

le but est d'écrire quelque chose comme:

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

au lieu de cela, ce imprime exactement ce que la commande précédente retourné.

Comment est-ce que je peux faire ceci?

Répondre

1

Je suis encore un peu nouveau sur pyDatalog, mais je crois comprendre que les disjonctions devraient être divisées en plusieurs lignes. Donc, votre code serait venu (le certes un peu unenlightening):

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

print(((X==True) & ((Y==True)))) 
print(((X==True) & ((Y==False)))) 
1

Si cela signifie passer par ensemble de valeurs booléennes pour X et Y, et imprimer le résultat de X & & Y, cela devrait fonctionner:

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

C'est la sortie:

X  | Y  | R  
------|-------|------ 
False | True | False 
False | False | False 
True | True | True 
True | False | False