Я пытаюсь написать предикат one_occurence(L1, L2)
, который является истинным, если каждый элемент L1
встречается один раз в L2
.Списки соответствия L1 с L2 в прологе
delete([H|T], H, TN) :- delete(T, H, TN).
delete([H|T], E, [H|TN]) :- \+ H = E, delete(T, E, TN).
delete([], _, []).
/*one_occurence(L,LN) is true if a list LN is identical to a list L
without all repeated elements.*/
one_occurence([],[]).
one_occurence([H|T], [H|TU]) :- delete(T, E, TN), one_occurence(TN, TU).
Но когда я спрашиваю one_occurence([a,b,a,a,b,c,d,c],N)
я получаю N=[a,a,c,c]
, что неправильно. Я должен получить N=[a,b,c,d]
. Что я делаю не так?
Вы можете написать 'H \ = é' вместо '\ + H = E'. Кроме того, когда вы говорите, что хотите, чтобы 'one_occurrence (L1, L2)' был истинным *, если каждый элемент 'L1' встречается один раз в' L2' *, означает ли это, что вы хотите 'one_occurence ([a, a, b, b , c, c], [a, b, c, d, e]), чтобы быть правдой? Потому что это действительно соответствует вашему описанию. Возможно, вы имеете в виду * ... и 'L2' не состоит из других элементов *. – lurker