Ответ в теме: Вычитание списков (множеств) на Prolog

      Комментарии к записи Ответ в теме: Вычитание списков (множеств) на Prolog отключены
#2064

Для решения задачи на Prolog можно использовать стандартную функцию member, выполняющую поиск элемента в списке.

subtraction([], _, []):-!.
subtraction([Head|Tail], List2, TailDif):-
  member(Head, List2), !, 
  subtraction(Tail, List2, TailDif).
subtraction([Head|Tail], List2, [Head|TailDif]):-
  subtraction(Tail, List2, TailDif).

Функция перебирает элементы первого списка, выполняет их поиск во втором списке и, если элемент не найден, – добавляет соответствующее значение к результату. Очевидно, обработка будет завершена, когда исходный список окажется пуст – результатом в этом случае является пустой список вне зависимости от значений во втором списке.