Так что моя проблема в том, что у меня есть этот предикат, который имеет значение n_aleator ios (El, INF, SUP, L), в котором El - длина списка, INF - нижнее предельное значение списка, SUP - значение. верхний предел значения списка, а L - список.
Цель этого предиката - создать список случайных целых чисел.
Проблема в том, что в результате получается значение true вместо объединения и выдачи списка в качестве результата.
вспомогательные предикаты:
/*Checks if a number isnt a member of a list*/
nao_membro(_, []).
nao_membro(X, [P | R]) :- X \== P,
nao_membro(X, R).
/*Joins an integer in a sorted list, in a sorted order*/
insere_ordenado(El,[],[El]).
insere_ordenado(El,[P|R],[P|L2]) :- El >= P,
insere_ordenado(El,R,L2).
insere_ordenado(El,[P|R],[El,P|R]) :- El < P.
/*Joins a random integer in a sorted list, in a sorted order*/
junta_novo_aleatorio(L1,INF,SUP,L2) :- random_between(INF, SUP, N),
nao_membro(N,L1),
insere_ordenado(N,L1,L2).
Программа:
n_aleatorios(El,INF,SUP,L) :- n_aleatorios(El,INF,SUP,[],0).
n_aleatorios(El,_,_,L,El).
n_aleatorios(El,INF,SUP,L,AC) :- AC =< El,
junta_novo_aleatorio(L,INF,SUP,L2),
AC_num is AC +1,
n_aleatorios(El,INF,SUP,L2,AC_num).
Мой вывод:
?- n_aleatorios(3, 1, 5, Lst).
true ;
false.
Ожидаемый вывод (например):
?- n_aleatorios(3, 1, 5, Lst).
Lst = [2,3,5]
Действительно, любая помощь будет оценена.