Я не очень понимаю, почему вы указываете здесь функцию gen/3
.Вы можете использовать аккумулятор и, таким образом, каждый раз обновлять аккумулятор, например:
generate_list(N, Z, L) :-
generate_list(N, Z, 0, L).
generate_list(0, _, _, []).
generate_list(N, Z, A, [A|T]) :-
N > 0,
B is A*A + Z,
N1 is N-1,
generate_list(N1, Z, B, T).
Например, для Z
это 1
, мы получаем:
?- generate_list(5, 1, L).
L = [0, 1, 2, 5, 26] ;
false.
С предикатом ordered/1
в вашем вопросе мы видим, что этот список действительно упорядочен:
?- generate_list(5, 1, L), ordered(L).
L = [0, 1, 2, 5, 26] ;
false.
В то время как для Z = -1
это не так:
?- generate_list(5, -1, L).
L = [0, -1, 0, -1, 0] ;
false.
?- generate_list(5, -1, L), ordered(L).
false.