除了更多两个输入之外,我如何使用后继功能?

时间:2016-09-28 12:37:44

标签: prolog successor-arithmetics

这里是两个输入的加法代码(就像我们想要Z中的结果,如果X + 1加Y的结果为Z + 1)。

clearInterval(time);

但我想知道我们可以使用类似的代码来处理3个组件,比如

    natural_number(0).
    natural_number(s(X)) :- natural_number(X).

    pl(0,X,X) :- natural_number(X).
    pl(s(X),Y,s(Z)) :- pl(X,Y,Z).

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

pl(A, B, C, Sum) :-
    pl(A, B, Tmp),
    pl(Tmp, C, Sum).

或者,如果你想添加一个自然数字列表,你当然可以对其进行折叠:

pl([], 0).
pl([N|Ns], Sum) :-
    foldl(pl, Ns, N, Sum).

甚至(在CapelliC的建议之后):

pl(Ns, Sum) :- foldl(pl, Ns, 0, Sum).

PS :使用后继符号并不总是一个坏主意。至少有一个有效用途是使用它来跟踪队列的长度,如this answer所示。