Prolog - 如何比较来自两个或更多不同谓词的结果?

时间:2017-10-24 08:54:22

标签: prolog

例如,

第一个是:

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的乘法,并找出哪个值更大。我怎么能这样做?

1 个答案:

答案 0 :(得分:6)

您似乎认为谓词会返回一些内容。然而,一个谓词只能是true(条件得到满足,或者变量可以被解除以使谓词满足),或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要求右侧的表达式(完全)接地。