如何将数字附加到prolog列表中?

时间:2017-01-21 14:29:53

标签: list prolog

我对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,虽然它背后的逻辑是正确的?

1 个答案:

答案 0 :(得分:1)

怎么样?
myAppend(0, []).

myAppend(N, [N | L]) :-
  N > 0,
  N1 is N - 1,
  myAppend(N1, L).