2016-05-19 32 views
0

,我应该如何继续添加两个参数,即使其中一个参数不是数字。例如,如果我输入add2args(1,2,R).,结果应该是R = 3。如果我输入add2args(1,x,R).,结果应该是R=1+xProlog - 在Prolog中添加两个参数,即使其中一个不是数字

到目前为止,我有这样的:

add_2args(X,Y,R):- number(X),number(Y), R is (X+Y). 

,让我把两个数相加,但我不知道我可以把它打印出来比其他真和假,如果XY是什么,不是因为number(X)检查X是否是数字,所以是正常的数字。我还需要添加哪些其他规则才能获得理想的结果?

回答

0

除非用类似于is/2的内容进行明确评估,否则Prolog将象征性地查看表达式(作为Prolog术语)。所以,做最简单的方法这在您的情况可能如下所示:

add_2args(X, Y, R) :- 
    ( number(X), number(Y) % Both X and Y are numbers, then... 
    -> R is X + Y   % Evaluate the expression 
    ; R = X + Y    % Else, just unify R with the expression 
    ). 

R = X + Y不会计算表达式而只用R统一术语X + Y。对于=/2is/2之间的差异,这也是一个不错的“Prolog初学者指南”插图。如果你写了,例如,R = 2 + 3,然后做了write(R)你会看到2 + 3,而不是5。您随后可以这样做,Result is R然后将评估表达式R和产量Result = 5

| ?- R = 2 + 3, Result is R. 

R = 2+3 
Result = 5 

yes 
| ?- 
+0

非常感谢你的解释 – Streamline

+0

@Streamline如果我回答你的问题,你可以通过点击左边的大对勾接受的答案。 :) – lurker

+0

完成!再次感谢 :) – Streamline