Проверить,есть ли в заданном списке хотя бы 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д