Проверить,есть ли в заданном списке хотя бы 2 одинаковых элемента - Lisp
Формулировка задачи:
Решение задачи: «Проверить,есть ли в заданном списке хотя бы 2 одинаковых элемента»
(defun twins (w) (cond ((null w) 'no) ((member (car w) (cdr w)) 'yes) (t (twins (cdr w))))) > (twins '(a b)) NO > (twins '(a a)) YES
Объяснение кода листинга программы
В коде определён вспомогательный функциял twins, который проверяет наличие в заданном списке хотя бы двух одинаковых элементов. Функциял принимает в качестве аргумента список w. Если список пуст, то возвращается значение no. Если в списке есть хотя бы два одинаковых элемента, то возвращается значение yes.
В первом выражении функции twins с помощью условного выражения cond проверяется пустой ли список w. Если список пуст, то возвращается значение no.
Во втором выражении функции twins с помощью функции member проверяется, есть ли первый элемент списка w в его хвосте (cdr w). Если первый элемент списка присутствует в его хвосте, то возвращается значение yes.
В третьем выражении функции twins вызывается рекурсивно функция twins с аргументом (cdr w), то есть без первого элемента списка.
Примеры использования функции twins показывают, что если список содержит два одинаковых элемента, то возвращается значение yes, в противном случае — no.