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

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

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 года/лет, 2 мес. назад.

  • Автор
    Сообщения
  • #2061

    questioner
    Участник

    Помогите написать функцию, выполняющую вычитание списков, т.е. убирающую из первого списка все элементы, входящие во второй. Такая операция называется также разностью множеств или дополнением второго множества.
    Например:

    A = [1,2,3,4,3,2,1], B = [2,1,2], subtraction(A, B, Subtract).
    Subtract= [3,4,3].

  • #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).

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

Для ответа в этой теме необходимо авторизоваться.