Я выполняю домашнюю работу, чтобы реализовать отношение list_merge (X, Y, Z), где X и Y - целые списки, Z содержит все элементы из X и Y, а там не дублируется в Z.Prolog: Удаление дубликатов объединенного списка
Я знаю, как реализовать функцию добавления и удалить дубликаты.
добавить
append2([X|A],B,[X|C]):-!,append(A,B,C).
append2([],B,B).
удалить дублирует
delete(X,[],[]).
delete(X,[X|T],R) :- delete(X,T,R).
delete(X,[H|T],[H|R]) :- not(X = H), delete(X,T,R).
remdups([],[]).
remdups([H|T],[H|R]) :- delete(H,T,S), remdups(S,R).
Но я не знаю, как совместить эти два releations в одном отношении, так что я могу удалить дубликаты после слияния двух списков. Как я могу объединить отношения или любые другие методы, которые могут иметь такой же эффект.
Некоторый вход и выход образца:
?- list_merge([],[],L).
L = [].
?- list_merge([1],[1],L).
L = [1].
?- list_merge([],[1,3,1,1,1],L).
L = [1, 3] .
?- list_merge([5,3,1,2,1],[7,3,2,5,7],L).
L = [5, 7, 3, 2, 1] .
remdups вызова в списке возвращаемый Append – CapelliC
Не было бы чище, если были заказаны списки, и вы сделали правильный «сливаться» между ними? –