Описать функцию (частоты х) - Lisp

Узнай цену своей работы

Формулировка задачи:

Описать функцию (частоты х), которая берет в качестве аргумента список атомов х и выдает список всех атомов, встречающихся в х вместе с частотой их появления. Порядок расположения пар несущественен. например > (частоты ‘(a b a b a c a)) (( a 4) (b 2) (c 1)) >(частоты ‘(ни то ни другое)) ((ни 2) (то 1) (другое 1))

Решение задачи: «Описать функцию (частоты х)»

textual
Листинг программы
(defun _member (a w)
  (cond ((null w) nil)
        ((eq (car w) a) (cons (car w) (cdr w)))
    ((_member a (cdr w)))))
 
(defun xlm (w ac m)
  (cond ((null w) ac)
        ((_member (car w) m) (xlm (cdr w) ac m))
        ((xlm (cdr w) (cons (list (car w) (count (car w) w)) ac) (cons (car w) m)))))
 
(defun elm-freq (w)
  (xlm w nil nil))
 
> (elm-freq '(a a a a b b b c c))
((C 2) (B 3) (A 4))

Объяснение кода листинга программы

  1. Функция _member принимает три аргумента: a, w. В первом случае, когда w равно nil, возвращает nil. Во втором случае, когда car w равно a, возвращает cons (car w) (cdr w). В третьем случае, когда (_member a (cdr w)) возвращает true, рекурсивно вызывается функция _member с аргументами a, (cdr w).
  2. Функция xlm принимает три аргумента: w, ac, m. В первом случае, когда w равно nil, возвращает ac. Во втором случае, когда (_member (car w) m) возвращает true, рекурсивно вызывается функция xlm с аргументами (cdr w), ac, m. В третьем случае, когда (xlm (cdr w) (cons (list (car w) (count (car w) w)) ac) возвращает true, создается новый список (cons (car w) m), который добавляется в конец ac.
  3. Функция elm-freq принимает один аргумент: w. В этом случае, когда w не равно nil, рекурсивно вызывается функция xlm с аргументами w, nil, nil.
  4. Вызов функции elm-freq с аргументом '(a a a a b b b c c) возвращает ((C 2) (B 3) (A 4)). Это означает, что функция подсчитала частоту каждого элемента в списке. Элемент C встречается два раза, B — три раза, A — четыре раза.

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


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

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

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