Выполнить анализ частоты появления каждого символа - Lisp

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

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

Для списка произвольного уровня вложенности выполнить анализ частоты появления каждого символа. Все встречающиеся символы и их число повторов объединить в списки, из которых сформировать список результатов.

Решение задачи: «Выполнить анализ частоты появления каждого символа»

textual
Листинг программы
(defun flat (w &optional acc) 
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))
 
(defun xelm (w &optional ac &aux (a (car w)))
  (cond ((null w) (reverse ac))
        ((find a ac :key #'car) (xelm (cdr w) ac))
        ((xelm (cdr w) (cons (list a (count a w)) ac)))))
 
(defun elms (w)
  (xelm (flat w)))
 
> (elms '(a ((a) (a (a)) b) (b (b) c) c))
((A 4) (B 3) (C 2))

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

В этом коде представлена реализация функции elms, которая выполняет анализ частоты появления каждого символа в строке. Сначала определена вспомогательная функция flat, которая принимает строку w и опциональный аккумулятор acc. Если w — это nil, то возвращается значение аккумулятора. Если w — это атом, то он добавляется в аккумулятор. Если w — это список, то функция рекурсивно вызывается для первого элемента списка, а затем для остальных элементов, и результаты добавляются в аккумулятор. Затем определена вспомогательная функция xelm, которая принимает строку w и опциональный аккумулятор ac. Если w — это nil, то возвращается перевёрнутый аккумулятор. Если w — это не список, то ничего не происходит. Если w — это список, то функция рекурсивно вызывается для первого элемента списка, а затем для остальных элементов, и результаты добавляются в аккумулятор. Наконец, определена основная функция elms, которая принимает строку w и возвращает результат вызова xelm для flat строки w. Пример использования функции elms со строкой '(a ((a) (a (a)) b) (b (b) c) c' показывает, что функция elms возвращает ((A. 4) (B. 3) (C. 2)), что является корректным результатом анализа частоты появления каждого символа в строке.

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


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

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

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