在這段序言代碼,我打算列出前N素數,爲什麼prolog輸出一個奇怪的樹狀列表?
(...)
biggerPrime(N,P) :-
isPrime(N),
P is N,
!.
biggerPrime(N,P) :-
N1 = N+1,
biggerPrime(N1,P).
primeListAcc(0,A,R,R) :- !.
primeList(N,L) :-
primeListAcc(N,1,[],L).
primeListAcc(N,A,L,R) :-
N1 is N-1,
biggerPrime(A,P),
A1 is P+1,
primeListAcc(N1,A1,[P|L],R).
如果我想倒着顯示列表排序,它工作正常:
?- primeList(5,L).
L = [11, 7, 5, 3, 2].
但是,如果我改變的最後一行從代碼[P | L]到[L | P]是這樣的:
primeListAcc(N,A,L,R) :-
N1 is N-1,
biggerPrime(A,P),
A1 is P+1,
primeListAcc(N1,A1,[L|P],R).
我得到:
?- primeList(5,L).
L = [[[[[[]|2]|3]|5]|7]|11].
我錯過了什麼?這讓我很生氣!
非常有用和徹底,謝謝! – rgcalsaverini