Объединение списков без повторений элементов

      Комментарии к записи Объединение списков без повторений элементов отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на списки Объединение списков без повторений элементов

Помечено: ,

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

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

    questioner
    Участник

    Помогите написать программу объединения двух списков в третий так, чтобы одинаковые элементы из разных списков не повторялись.
    На Prolog.

  • #1953

    append_without_dup([], List, List):-!.
    append_without_dup([Head|Tail], List, AppendTail):-
      member(Head, List), !, append_without_dup(Tail, List, AppendTail).
    append_without_dup([Head|Tail], List, [Head|AppendTail]):-
      append_without_dup(Tail, List, AppendTail).

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

    Для поиска элемента в списке используется встроенный предикат member.

    Если элементы повторялись в каком-либо из исходных списков, то они будут повторяться в полученном результате. Если нужно избежать этого – преобразуйте список во множество перед вызовом функции.

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