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

xsx*_*xsx 4 prolog

例如,

第一个是这样的:

sum(X,Y,Result):- Result is X + Y.
Run Code Online (Sandbox Code Playgroud)

第二个是:

times(X,Y,R):- R is X * Y.
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*sem 7

你似乎认为谓词会返回一些东西.然而,谓词只能是true(条件满足,或者变量可以被解除,使得谓词我们满意),或者false(谓词不满足,并且统一不能满足它).如果你以错误的方式调用它,谓词也会出错.但是,这是基本的:true,false(和错误).

所以写东西是没有意义的sum(X,Y,R1) > times(X,Y,R2),既然sum/3也不times/3回报.

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

sum(X,Y,R1), times(X,Y,R2), R1 > R2.
Run Code Online (Sandbox Code Playgroud)

然而,这将只有工作X,并Y在第一时间被实例化,因为is/2需要在右侧的表达式是(完全)接地.