Функция поиска третьего по величине элемента списка - Lisp
Формулировка задачи:
(defun F (L) (cond ((null L) nil) ; если список пуст - возвращается nil ((null (cdr L)) (car L)) ; если в списке <уже> один элемент - возвращается этот элемент ((> (car L) (cadr L)) (F (cons (car L) (cddr L)))) ; если <очередной> первый элемент больше второго - функция рекурсивно вызывается для списка с исключенным вторым элементом (T (F (cdr L))))) ; в противном случае - функция рекурсивно вызывается для списка с исключенным первым элементом
Решение задачи: «Функция поиска третьего по величине элемента списка»
(defun 3-max (lst &optional (m1 nil) (m2 nil) (m3 nil)) (cond ((null lst) (list m1 m2 m3)) ((null m1) (3-max (cdr lst) (car lst) m2 m3)) ((null m2) (if (< (car lst) m1) (3-max (cdr lst) m1 (car lst) m3) (3-max (cdr lst) (car lst) m1 m2))) ((null m3) (if (< (car lst) m2) (3-max (cdr lst) m1 m2 (car lst)) (3-max (cdr lst) m1 (car lst) m2))) ((> (car lst) m1) (3-max (cdr lst) (car lst) m1 m2)) ((> (car lst) m2) (3-max (cdr lst) m1 (car lst) m2)) ((> (car lst) m3) (3-max (cdr lst) m1 m2 (car lst))) (t (3-max (cdr lst) m1 m2 m3)))) ==> 3-max (3-max '(1 2 -4 2 8 7 12 6)) ==> (12 8 7)
Объяснение кода листинга программы
В этом коде определена функция 3-max
, которая ищет третий элемент в списке с максимальным значением.
Список '(1 2 -4 2 8 7 12 6)
содержит восемь элементов.
Согласно коду, функция 3-max
ищет третий элемент с максимальным значением. На первом шаге, функция проверяет, является ли список пустым. Если это так, то возвращается пустой список (m1 m2 m3)
.
Если список не пустой, функция проверяет, есть ли уже найденные максимальные значения для первых трех элементов. Если максимальные значения еще не найдены, то функция рекурсивно вызывается для оставшейся части списка, чтобы найти третий элемент с максимальным значением.
Если список пустой, то возвращается значение, найденное на предыдущем шаге. Если список не пустой, то функция продолжает поиск третьего элемента с максимальным значением.
В данном случае, функция 3-max
находит третий элемент с максимальным значением в списке '(1 2 -4 2 8 7 12 6)
, который равен 12, и возвращает список (12 8 7)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д