Определить, есть ли в заданном списке хотя бы один элемент, который равен следующему за ним элементу - Lisp

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

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

Помогите, пожалуйста решить: определить, есть ли в заданном списке хотя бы один элемент, который равен следующему за ним ( по кругу) элементу.

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

textual
Листинг программы
(defun task (lst &optional (a (car lst)))
  (cond ((null (cdr lst)) (if (eq a (car lst)) a nil))
        ((eq (car lst) (cadr lst)) (car lst))
        (t (task (cdr lst) a)))) 
 
==> TASK
 
(task '(1 2 3 3 2))
 
==> 3
 
(task '(1 2 3 2 1))
 
==> 1
 
(task '(1 2 3 4 5))
 
==> NIL

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

В коде определена функция с именем task, которая принимает два аргумента: lst — список, и опциональный аргумент a — первый элемент списка. Если список пустой, то проверяется, равно ли значение первого элемента (a) второму. Если да, то возвращается a, иначе возвращается nil. Если первый элемент не равен второму, то функция вызывается рекурсивно для оставшейся части списка. Примеры использования функции:

  1. (task '(1 2 3 3 2)) — в этом случае функция вернет 3, так как третий элемент списка равен четвёртому.
  2. (task '(1 2 3 2 1)) — в этом случае функция вернет 1, так как первый элемент списка равен второму.
  3. (task '(1 2 3 4 5)) — в этом случае функция вернет nil, так как список не содержит повторяющихся элементов.

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


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

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

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