Определить, есть ли повторения значений параметров внутри списка - 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. Во втором правиле у нас есть три случая:
- Если Xs пустой список, то мы заканчиваем рекурсию и возвращаем Ys.
- Если Xs не пустой список, то мы проверяем, есть ли X в Ys. Если X есть в Ys, то мы заканчиваем рекурсию и возвращаем Ys.
- Если Xs не пустой список и X не в Ys, то мы добавляем X в конец Ys0 и вызываем рекурсивно repeat_elems для Xs и Ys0. В третьем правиле у нас есть два случая:
- Если Xs пустой список, то мы заканчиваем рекурсию и возвращаем Ys.
- Если Xs не пустой список, то мы проверяем, есть ли X в Ys. Если X есть в Ys, то мы заканчиваем рекурсию и возвращаем Ys.
- Если Xs не пустой список и X не в Ys, то мы добавляем X в конец Ys0 и вызываем рекурсивно repeat_elems для Xs и Ys0. В итоге, если после выполнения всех правил у нас нет ошибок и исключений, то мы получаем список Ys, в котором нет повторяющихся элементов из Xs.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д