Наиболее часто встречаемое слово - Lisp

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

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

Для текстового файла определить самое часто встречающееся слово Помогите пожалуйста написать программу на Common Lisp

Решение задачи: «Наиболее часто встречаемое слово»

textual
Листинг программы
(defun abundant-word (s)
  (word-max (string-list s)))
 
(defun word-max (w
                 &aux
                 (v (remove-duplicates w))
                 (m (loop for a in v maximize (count a w))))
  (loop for a in v when (= (count a w) m) collect a))
 
(defun string-list (s) 
  (read-from-string
   (concatenate
    'string "(" (delete-if-not #'(lambda (x)
                                   (or (alpha-char-p x)
                                       (equal x #\space)
                                       (equal x #\-)))
                               s) ")")))
 
> (abundant-word "aaa aaa bbb bbb ccc")
(AAA BBB)

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

В данном коде реализуется функция abundant-word, которая принимает строку s и возвращает наиболее часто встречающиеся слова.

  1. В первой функции string-list строка s преобразуется в список строк, где все символы, которые не являются буквами или пробелами, удаляются.
  2. Во второй функции word-max из списка слов v, полученного из строки s, удаляются дубликаты. Затем с помощью цикла loop и функции count подсчитывается количество каждого слова в списке. Слово с максимальным количеством повторений сохраняется в переменной m.
  3. В функции abundant-word создается пустой список v, который будет заполняться словами из строки s. Затем с помощью цикла loop и условия =, проверяется каждое слово из списка v. Если количество повторений слова в строке s равно m, то это слово добавляется в результат. В итоге функция возвращает список наиболее часто встречающихся слов. Таким образом, при вызове функции abundant-word с аргументом aaa aaa bbb bbb ccc, будет возвращен список (AAA BBB), так как слова AAA и BBB встречаются наиболее часто.

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

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