例如,
第一个是:
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
,我想编写一个真实的程序。在这种情况下,我希望获得X
和Y
的总和以及X
和Y
的乘法,并找出哪个值更大。我怎么能这样做?
答案 0 :(得分:6)
您似乎认为谓词会返回一些内容。然而,一个谓词只能是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.
但是,只有在X
和Y
首先实例化时才会有效,因为is/2
要求右侧的表达式(完全)接地。