在这个 Prolog 代码中,我打算列出前 N 个素数,
(...)
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].
我错过了什么?这让我发疯!