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

Программирование Помощь с решением задач на Prolog Задачи на списки Вычитание списков (множеств) на Prolog

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

Просмотр 2 сообщений - с 1 по 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).

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

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)

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