Описать функцию (частоты х) - 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))
Объяснение кода листинга программы
- Функция _member принимает три аргумента: a, w. В первом случае, когда w равно nil, возвращает nil. Во втором случае, когда car w равно a, возвращает cons (car w) (cdr w). В третьем случае, когда (_member a (cdr w)) возвращает true, рекурсивно вызывается функция _member с аргументами a, (cdr w).
- Функция 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.
- Функция elm-freq принимает один аргумент: w. В этом случае, когда w не равно nil, рекурсивно вызывается функция xlm с аргументами w, nil, nil.
- Вызов функции elm-freq с аргументом '(a a a a b b b c c) возвращает ((C 2) (B 3) (A 4)). Это означает, что функция подсчитала частоту каждого элемента в списке. Элемент C встречается два раза, B — три раза, A — четыре раза.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д