add2args(1,2,R).
,结果应为R = 3
。如果我输入add2args(1,x,R).
,则结果应为R=1+x
。
到目前为止,我有这个:
add_2args(X,Y,R):- number(X),number(Y), R is (X+Y).
这允许我添加两个数字,但我不知道如果X
和Y
不是数字,我怎么能打印出除true和false以外的任何数字正常,因为number(X)
检查X
是否为数字。我还需要添加什么其他规则才能获得所需的结果?
答案 0 :(得分:0)
Prolog将象征性地(作为Prolog术语)查看表达式,除非使用is/2
之类的内容进行明确评估。因此,在您的情况下执行此操作的最简单方法如下:
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
不会评估表达式,只会将X + Y
与R
统一起来。这也是一个很好的" Prolog初学者的指南" =/2
和is/2
之间差异的插图。例如,如果你写了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
| ?-