Определить, есть ли повторения значений параметров внутри списка - Prolog

Узнай цену своей работы

Формулировка задачи:

ЗАДАЧА: Создать список List значений некоторого параметра путем компоновки данных из базы данных, которую задать в следующем виде: параметр (значение). Определить, есть ли повторения значений параметров внутри списка. Есть база данных Студент:
Создаю список из базы данных:
Но как узнать есть ли повторения ('Виталий' в моем примере) в списке List мне не известно, подскажите пожалуйста..

Решение задачи: «Определить, есть ли повторения значений параметров внутри списка»

textual
Листинг программы
repeat_elems(Xs, Ys) :-
    repeat_elems(Xs, [], Ys).
 
repeat_elems([], Ys, Ys).
repeat_elems([X | Xs], Ys0, Ys) :-
    member(X, Xs),
    \+ member(X, Ys0),
    !,
    repeat_elems(Xs, [X | Ys0], Ys).
repeat_elems([_X | Xs], Ys0, Ys) :-
    repeat_elems(Xs, Ys0, Ys).

Объяснение кода листинга программы

Код выполняет проверку наличия повторяющихся элементов в двух списках. Вначале у нас есть два списка, Xs и Ys. Во втором правиле у нас есть три случая:

  1. Если Xs пустой список, то мы заканчиваем рекурсию и возвращаем Ys.
  2. Если Xs не пустой список, то мы проверяем, есть ли X в Ys. Если X есть в Ys, то мы заканчиваем рекурсию и возвращаем Ys.
  3. Если Xs не пустой список и X не в Ys, то мы добавляем X в конец Ys0 и вызываем рекурсивно repeat_elems для Xs и Ys0. В третьем правиле у нас есть два случая:
  4. Если Xs пустой список, то мы заканчиваем рекурсию и возвращаем Ys.
  5. Если Xs не пустой список, то мы проверяем, есть ли X в Ys. Если X есть в Ys, то мы заканчиваем рекурсию и возвращаем Ys.
  6. Если Xs не пустой список и X не в Ys, то мы добавляем X в конец Ys0 и вызываем рекурсивно repeat_elems для Xs и Ys0. В итоге, если после выполнения всех правил у нас нет ошибок и исключений, то мы получаем список Ys, в котором нет повторяющихся элементов из Xs.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы