Prolog - 添加两个参数,即使一个不是数字

时间:2016-05-19 13:41:49

标签: prolog

在Prolog中,当我想添加两个参数时,我应该如何继续,即使一个不是数字。例如,如果我输入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).

这允许我添加两个数字,但我不知道如果XY不是数字,我怎么能打印出除true和false以外的任何数字正常,因为number(X)检查X是否为数字。我还需要添加什么其他规则才能获得所需的结果?

1 个答案:

答案 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 + YR统一起来。这也是一个很好的" Prolog初学者的指南" =/2is/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
| ?-