Определить функцию, возвращающую количество элементов, равных максимальному элементу числового списка - 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))))))

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

textual
Листинг программы
(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.

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


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

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

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