我对Prolog很新。我的目标是将整数附加到列表中,直到绑定:
如果函数收到N
,则会输出列表[N, N-1, ... , 1]
。
这是我的代码:
myAppend(0, L) :- append([],[], L).
myAppend(N, L) :- append([N], [], L), N1 is N - 1, myAppend(N1, L).
调用上面的函数会为每个N=\=0
返回false:
51 ?- myAppend(0,L).
L = [] ;
false.
52 ?- myAppend(2,L).
false. <-------------------- was expecting L = [2, 1]
53 ?-
然而,当我在第二条规则中调用.
后将我的功能更改为(点,
而不是append
时:
myAppend(0, L) :- append([],[],L).
myAppend(N,L) :- append([N], [], L). N1 is N - 1, myAppend(N1, L).
我得到了以下输出:
51 ?- myAppend(0,L).
L = [] ;
false.
52 ?- myAppend(4,L).
L = [4] . <-------------- was expecting [4, 3, 2, 1]
53 ?-
我无法理解为什么在第一次实现中我收到false
,虽然它背后的逻辑是正确的?
答案 0 :(得分:1)
怎么样?
myAppend(0, []).
myAppend(N, [N | L]) :-
N > 0,
N1 is N - 1,
myAppend(N1, L).