Я новичок в Прологе и искал некоторую помощь. То, что я пытаюсь сделать, это в основном получить список L, состоящий из элементов, которые повторяются по крайней мере дважды в данном списке L '
Пример
L '= [1,2,1,3,4,3,2] => L = [1,2,3].
Пока я могу вычислить вхождение каждой последовательной переменной
% pack(L1,L2) :- the list L2 is obtained from the list L1 by packing
% repeated occurrences of elements into separate sublists.
% (list,list) (+,?)
pack([],[]).
pack([X|Xs],[Z|Zs]) :- transfer(X,Xs,Ys,Z), pack(Ys,Zs).
% transfer(X,Xs,Ys,Z) Ys is the list that remains from the list Xs
% when all leading copies of X are removed and transfered to Z
transfer(X,[],[],[X]).
transfer(X,[Y|Ys],[Y|Ys],[X]) :- X \= Y.
transfer(X,[X|Xs],Ys,[X|Zs]) :- transfer(X,Xs,Ys,Zs).
% encode(L1,L2) :- the list L2 is obtained from the list L1 by run-length
% encoding. Consecutive duplicates of elements are encoded as terms [N,E],
% where N is the number of duplicates of the element E.
% (list,list) (+,?)
encode(L1,L2) :- pack(L1,L), transform(L,L2).
transform([],[]).
transform([[X|Xs]|Ys],[[N,X]|Zs]) :- length([X|Xs],N), transform(Ys,Zs).
, который вернет следующий список ходов
?- encode([a,a,a,a,b,c,c,a,a,d,e,e,e,e],X).
X = [[4,a],[1,b],[2,c],[2,a],[1,d][4,e]]
Но все еще остается проблема создания списка, который будет содержать отдельные элементы, которые повторяются по крайней мере дважды.
Если кто-нибудь может мне помочь или указать мне общее направление, это было бы здорово.
Заранее спасибо