首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pyDatalog中使用布尔运算符

在pyDatalog中使用布尔运算符
EN

Stack Overflow用户
提问于 2014-11-25 22:26:35
回答 1查看 849关注 0票数 2

我试图使用pyDatalog操作符在==中创建谓词,但是flammableX的定义似乎无效:

代码语言:javascript
复制
from pyDatalog import pyDatalog
pyDatalog.create_terms('flammable, notFlammable, X, Y')

flammable[X] = ((X == 'wood') or (X == 'coal'))`
#TypeError: unhashable type: 'Query'

notFlammable[X] = ~flammable[X]
#This doesn't work either.

我还试图在pyDataLog谓词中包括比较运算符,但这也不起作用:

代码语言:javascript
复制
threeOrFour[X] = ((X < 3) or (X > 4))
#pyDatalog.util.DatalogError: Error: left hand side of comparison must be bound: </2 in line None of None

是否可以在pyDatalog谓词中包括这些比较和否定操作符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-24 19:11:46

这里的问题是,您希望分配谓词(易燃和notFlammable),但您使用的是函数赋值语法。(Here's a useful link I found to understand the distinction between predicates and functions.)在pyDatalog中分配谓词的方法是在括号中使用参数,用<=赋值,如下所示:

代码语言:javascript
复制
from pyDatalog import pyDatalog
pyDatalog.create_terms('flammable, notFlammable, X, Y')

flammable(X) <= ((X == 'wood') or (X == 'coal'))


notFlammable(X) <= ~flammable(X)

然后,在第二个例子中,逻辑编程中常见的情况是将分离分割成多行:

代码语言:javascript
复制
from pyDatalog import pyDatalog

pyDatalog.create_terms('threeOrFour,X')

threeOrFour(X) <= (X < 3)
threeOrFour(X) <= (X > 4)

这个很管用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27137946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档