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

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

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

6   голосов, оценка 3.833 из 5


СОХРАНИТЬ ССЫЛКУ