Имеется список слов. Составить список различных слов первого списка с указанием частоты их появления в первом списке - 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 решает задачу подсчёта количества вхождений каждого слова в файле и вывода списка различных слов с указанием их частоты.

  1. Функция count-word принимает в качестве аргумента путь к файлу и выполняет следующие действия: — Создаёт пустой список u, который будет хранить слова и их частоту. — Открывает файл в режиме чтения и выполняет цикл, пока не достигнут конец файла. — В каждой итерации цикла считывает строку из файла, удаляет из неё шум (пробелы и символы пунктуации) и добавляет её в список u. — Закрывает файл. — Возвращает список u.
  2. Функция list-symb принимает строку и возвращает список пар, где каждая пара — это символ из строки, окружённый скобками.
  3. Функция drop-noise принимает строку и возвращает новую строку, в которой удалены все символы, не являющиеся буквенно-цифровыми или пробелами.
  4. Функция list-str принимает список строк и возвращает отсортированный список, где все строки приведены к нижнему регистру.
  5. Функция list-pair принимает список строк и опционально — пару элементов списка e, счётчик n и список u. Выполняет следующие действия: — Если e не равен первому элементу списка a, то увеличивает счётчик n, устанавливает u как новое значение пары e и n, обнуляет счётчик n и возвращает новый список. — Если e равен первому элементу списка a, то возвращает исходный список без изменений. Таким образом, код считывает файл построчно, удаляет из строк шум, приводит все слова к нижнему регистру и подсчитывает количество вхождений каждого слова. В результате выполнения кода будет выведен список различных слов с указанием их частоты.

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


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

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

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