Я изучаю язык пролога, и у меня есть проблема, касающаяся этой проблемы.
Я уже создал программу, которая, получив число N
, возвращает список с элементами между 0
иN
:
list2val(N,L):- list2val(0,N,L).
list2val(N,N,[N]).
list2val(C,N,[C|T]):-
C<N,
N1 is C+1,
list2val(N1,N,T).
?- list2val(5,X).
X = [0,1,2,3,4,5]
Теперь я пытаюсь дать расширение, которое при наличии списка возвращает список списков, в котором каждый список равен list2val
, только если следующее число больше текущегочисло.В этом случае:
?- newFuction([1,5,2,3,9],L).
L = [[0,1],[0,1,2,],[0,1,2,3]]
Мой код такой, но что-то не так:
array(X):- array(X,_L).
array([],_L).
array([H|[T|Ts]],L1):-
H<T,
list2val(H,L2),
array([T|Ts],[L1|[L2]]).
array([T|Ts],L1).
Может быть, это может быть слишком сложно понять, но используя список L = [1,5,2,3,9]
я делаю тешаги:
- проверка 1 <5, поэтому я создаю 1 list2val до 1. в этом случае [0,1] </li>
- проверка 5 <2 я ничего не создаю. </li>
- check 2 <3 я создаю list2val из 2 ... [0,1,2] </li>
- и так далее ...
Я не хочу использоватьстандартные предикаты, реализованные со стандартными терминами.