Логическое разделение с PyDatalog
Кажется, я не могу написать (псевдокод): выведите 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
Вместо этого выводится именно то, что вернула предыдущая команда.
Как я могу это сделать?
2 ответа
Я все еще немного новичок в pyDatalog, но я понимаю, что дизъюнкции должны быть разбиты на несколько строк. Таким образом, ваш код будет принят (по общему признанию несколько непонятным):
from pyDatalog import pyDatalog
pyDatalog.create_terms('X,Y')
print(((X==True) & ((Y==True))))
print(((X==True) & ((Y==False))))
Если это означает пройти через набор логических значений для 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