【问题标题】:Prolog - How can I compare the results that came from two or more different predicates?Prolog - 如何比较来自两个或多个不同谓词的结果?
【发布时间】:2017-10-24 08:54:22
【问题描述】:

例如,

第一个是这样的:

sum(X,Y,Result):- Result is X + Y.

第二个是:

times(X,Y,R):- R is X * Y.

我什至可以这样定义它们吗? 另外,如果我想写一个比较两个结果的值的东西,我该怎么办?当我尝试做类似sum(X,Y,R1) > times(X,Y,R2) 的事情时,它不允许我这样做。我想写一个程序,如果R1 > R2 是真的。在这种情况下,我想得到XY 的总和以及XY 的乘积,并找出哪个值更大。我怎么能这样做?

【问题讨论】:

  • 比较它们是什么意思? Prolog 与统一一起工作,因此在调用sum(1,4,X) 之后,X5 统一。您可以将X 用于您想要的任何内容,将其注入另一个谓词等。
  • 我编辑了这个问题,希望这次更清楚:p

标签: prolog


【解决方案1】:

您似乎认为谓词会返回一些东西。但是,谓词只能是true(条件满足,或者变量可以是unfied 使得谓词我们满足),或者false(谓词不满足,统一不能满足)。如果您以错误的方式调用谓词,谓词也会出错。但基本上就是这样:truefalse(和错误)。

所以写成sum(X,Y,R1) > times(X,Y,R2) 是没有意义的,因为sum/3times/3 都不会返回。

Prolog 的想法是统一变量。如果你写sum(1,4,X),那么在谓词调用之后,X 将与5 统一。所以你能做的就是写:

sum(X,Y,R1), times(X,Y,R2), R1 > R2.

但是,这只有在 XY 首先被实例化时才有效,因为 is/2 要求右侧的表达式(完全)接地。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2013-08-27
    • 2016-12-19
    相关资源
    最近更新 更多