Итак, я хочу создать программу, которая, учитывая список и элемент, возвращает только список, пока не появится указанный элемент, например:
propaga( [(1,1),(1,2),(1,3),(1,4)],(1,3),L).
L = [(1,1),(1,2),(1,3)].
В настоящее время у меня есть это:
adiciona((X,Y),[],[(X,Y)]).
adiciona((X,Y), [(W,Z)|Tail],[(W,Z)|Tail1]):-
adiciona((X,Y),Tail,Tail1).
propaga_aux([X|_], X, [X]).
propaga_aux([(X,Y)|_], (Z,W), P):-
(X,Y) = (Z,W), !,
adiciona((X,Y),[],P).
propaga_aux([(X,Y)|T], (Z,W), P):-
(X,Y) \= (Z,W), !,
adiciona((X,Y),[],P),
propaga_aux(T, (Z,W), P).
Adiciona добавляет элемент в конец списка.
Он продолжает возвращать false, я думаю, проблема в том, как я использую предикат adiciona, но я не могу понять, что я делаю неправильно, я перепробовал много вариантов, и я не могу понять это правильно, может кто-то помочь мне