Имеется список слов. Составить список различных слов первого списка с указанием частоты их появления в первом списке - Lisp
Формулировка задачи:
Имеется список слов. Составить список различных слов первого списка с указанием частоты их появления в первом списке
Решение задачи: «Имеется список слов. Составить список различных слов первого списка с указанием частоты их появления в первом списке»
textual
Листинг программы
(defun count-word (pathname) (let ((u)) (with-open-file (s pathname :direction :input) (do ((c (read-line s nil :eof) (read-line s nil :eof))) ((eql c :eof)) (setq u (nconc (list-symb (drop-noise c)) u)))) (list-pair (list-str u)))) (defun list-symb (s) (read-from-string (concatenate 'string "(" s ")"))) (defun drop-noise (s) (delete-if-not #'(lambda (x) (or (alpha-char-p x) (equal x #\space) (equal x #\-))) s)) (defun list-str (w) (sort (mapcar #'(lambda (a) (string-downcase a)) w) #'string-lessp)) (defun list-pair (w &optional (e (car w)) (n 0) u) (mapcan #'(lambda (a) (incf n) (when (string-not-equal a e) (setq u (cons e n) n 0 e a) (list u))) w)) > (count-word "test.txt") (("balance" . 1) ("based" . 1))
Объяснение кода листинга программы
Данный код на языке Lisp решает задачу подсчёта количества вхождений каждого слова в файле и вывода списка различных слов с указанием их частоты.
- Функция
count-word
принимает в качестве аргумента путь к файлу и выполняет следующие действия: — Создаёт пустой списокu
, который будет хранить слова и их частоту. — Открывает файл в режиме чтения и выполняет цикл, пока не достигнут конец файла. — В каждой итерации цикла считывает строку из файла, удаляет из неё шум (пробелы и символы пунктуации) и добавляет её в списокu
. — Закрывает файл. — Возвращает списокu
. - Функция
list-symb
принимает строку и возвращает список пар, где каждая пара — это символ из строки, окружённый скобками. - Функция
drop-noise
принимает строку и возвращает новую строку, в которой удалены все символы, не являющиеся буквенно-цифровыми или пробелами. - Функция
list-str
принимает список строк и возвращает отсортированный список, где все строки приведены к нижнему регистру. - Функция
list-pair
принимает список строк и опционально — пару элементов спискаe
, счётчикn
и списокu
. Выполняет следующие действия: — Еслиe
не равен первому элементу спискаa
, то увеличивает счётчикn
, устанавливаетu
как новое значение парыe
иn
, обнуляет счётчикn
и возвращает новый список. — Еслиe
равен первому элементу спискаa
, то возвращает исходный список без изменений. Таким образом, код считывает файл построчно, удаляет из строк шум, приводит все слова к нижнему регистру и подсчитывает количество вхождений каждого слова. В результате выполнения кода будет выведен список различных слов с указанием их частоты.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д