В этом 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].
Что мне не хватает? Это сводит меня с ума!
Очень полезно и основательно, спасибо! – rgcalsaverini