例如,
第一个是这样的:
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.在这种情况下,我想得到和的X和Y的X和Y,并找出哪个值更大.我怎么能这样做?
你似乎认为谓词会返回一些东西.然而,谓词只能是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需要在右侧的表达式是(完全)接地.