首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Simple Prolog predicate -语句的计算结果始终为false

Simple Prolog predicate -语句的计算结果始终为false
EN

Stack Overflow用户
提问于 2019-02-22 05:02:11
回答 1查看 81关注 0票数 1

我刚刚开始Prolog,我真的想知道为什么以下几行代码,特别是'is‘部分,总是产生false:

代码语言:javascript
复制
highest(L) :-
    path(_,_,Z),
    Z >= L,
    L is Z.
highestWrap :-
    highest(0).

调用highestWrap。

提前感谢,祝你有一个美好的一天!

EN

回答 1

Stack Overflow用户

发布于 2019-02-22 05:12:21

除非存在长度为0的路径,否则这将不起作用,即使到那时,它也可能不会产生您想要的结果:它只会显示为true。

在Prolog中,变量只能设置一次,这意味着如果L设置为0,那么它将保持为0,除非您回溯该赋值。

在这里,这意味着你调用highest(0),然后你指示Prolog调用path(_, _, Z),这可能会导致零个,一个或多个解决方案。如果没有path(_, _, Z),则调用将失败。但是如果有,那么Z会有一个数值(如果我对谓词做了正确的假设),例如7

现在条件Z >= L当然在这种情况下成立(如果Z7),所以这就不是问题了。但是现在您指定L is Z。因此,这意味着您调用0 is 7。[is/2 swi-doc](http://www.swi-prolog.org/pldoc/doc_for?object=(is%29/2)谓词旨在解决第二个参数的表达式(该表达式在本例中为7,因此没有太多需要解决的问题),然后将其与左侧的术语统一起来。但由于0不等于7,所以失败了。

如果您想获得最高路径,例如可以使用 [swi-doc]库:

代码语言:javascript
复制
:- use_module(library(aggregate)).

highest(L) :-
    aggregate(Max(Z), path(_,_,Z), Max(L)).

然后,您可以使用higest(X)调用它,以在对path(_, _, Z)的调用中使用Z的最高值来统一X

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

https://stackoverflow.com/questions/54816168

复制
相关文章

相似问题

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