首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyDatalog有没有像prolog一样的"cut“操作符?

pyDatalog有没有像prolog一样的"cut“操作符?
EN

Stack Overflow用户
提问于 2018-01-29 17:12:18
回答 1查看 162关注 0票数 0

这可能很简单,但我在任何地方都找不到答案。在Prolog中,当您想要阻止它搜索其他答案时,一旦一个变量已经被实例化,您可以使用!标志(通常称为“切割”标志)。你可以在这个链接中看到它来理解我的意思:http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse44

例如,给定规则:

代码语言:javascript
复制
max(X,Y,Z)  :-  X  =<  Y,!,  Y  =  Z.

如果我们查询:

代码语言:javascript
复制
max(X,Y,X).

那!sign将阻止prolog通过重新实例化X来回溯和尝试证明(X =< Y)。这意味着所有答案中的X都将具有相同的值。

在pyDatalaog中有这样的东西吗?

EN

回答 1

Stack Overflow用户

发布于 2018-01-29 19:47:49

不,它没有cut运算符。一般来说,Cut不是Datalog的一部分。

但是,pyDatalog在找到函数的给定参数的第一个值后停止。reference page说:“函数的定义应该首先使用最一般的子句,然后是更具体的子句。当查询函数时,首先使用最后一个子句,当找到答案时,查询停止。”

因此,您可以通过以下定义获得所需的内容:

代码语言:javascript
复制
+ (max[X,Y] == Y)
(max[X,Y] == X) <= (Y < X)

但是请注意,这里有一个open issue

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

https://stackoverflow.com/questions/48497742

复制
相关文章

相似问题

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