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