Prolog пересечение двух списков
Задание: Даны два списка.Занести элементы из первого списка в результирующий, если он однократно содержится во втором. Если элемент отсутствует во втором списке или содержится два или более раз, то в результирующий список этот элемент не попадает
Суть вопроса: как сделать так, чтобы в результирующий список не заносились элементы из первого списка, которые содержатся во втором 2 и более раз?
Программа:
DOMAINS
list=integer*
PREDICATES
nondeterm includes(list, integer)
nondeterm result(list, list, list)
CLAUSES
includes([A|_],A).
includes([_|TAIL],A1):-includes(TAIL,A1).
result([],_,[]).
result([Head|Tail],List,[Head|NewTail]):- includes(List,Head),result(Tail,List,NewTail),!.
result([_|Tail],List,NewTail):-result(Tail,List,NewTail).
GOAL
First=[1,2,3,4,5,6], Second=[1,1,1,2,3,4,4,6], result(First,Second,Result).
Результат работы такой: First=[1,2,3,4,5,6], Second=[1,1,1,2,3,4,4,6], Result=[1,2,3,4,6]
А нужно, чтобы был такой: First=[1,2,3,4,5,6], Second=[1,1,1,2,3,4,4,6], Result=[2,3,6]
Ответы (1 шт):
Суть вопроса: как сделать так, чтобы в результирующий список не заносились элементы из первого списка, которые содержатся во втором 2 и более раз?
Просто поставьте determ для includes/2.