Определить функцию, возвращающую количество элементов, равных максимальному элементу числового списка - Lisp
Формулировка задачи:
(DEFUN MAX_XY (X Y) (COND ((> X Y) X) (T Y))) (DEFUN MAX_LIST (LST) (COND ((NULL LST) NIL) ((EQ (LENGTH LST) 1) (CAR LST)) (T (MAX_XY (CAR LST) (MAX_LIST (CDR LST))))))
Решение задачи: «Определить функцию, возвращающую количество элементов, равных максимальному элементу числового списка»
(defun max-cnt (w &optional (m (car w)) (n 0)) (cond ((null w) n) ((> (car w) m) (max-cnt (cdr w) (car w) 1)) ((= (car w) m) (max-cnt (cdr w) m (1+ n))) (t (max-cnt (cdr w) m n)))) > (max-cnt '(1 0 1 0 1)) 3
Объяснение кода листинга программы
В коде определена функция max-cnt
, которая принимает два аргумента: w
— список чисел, и m
— максимальное значение, которое нужно считать. Если m
не передано, то оно устанавливается в первый элемент списка w
.
Функция возвращает количество элементов в списке, равных m
.
Когда функция вызывается с аргументом w
, она ищет количество элементов, равных m
, и возвращает это число. Если m
не равно первому элементу списка w
, то функция рекурсивно вызывается для оставшейся части списка. Если m
равно первому элементу списка w
, то функция рекурсивно вызывается для оставшейся части списка, увеличивая счетчик на 1. Если первый элемент списка w
не равен m
, то функция продолжает поиск максимального элемента.
В данном примере функция вызывается с аргументом (1 0 1 0 1)
, который является списком чисел. Максимальное значение m
устанавливается в первый элемент списка w
, то есть 1
. Затем функция начинает поиск элементов, равных m
. В данном случае, таких элементов три, поэтому функция возвращает число 3
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д