Наиболее часто встречаемое слово - 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
и возвращает наиболее часто встречающиеся слова.
- В первой функции
string-list
строкаs
преобразуется в список строк, где все символы, которые не являются буквами или пробелами, удаляются. - Во второй функции
word-max
из списка словv
, полученного из строкиs
, удаляются дубликаты. Затем с помощью циклаloop
и функцииcount
подсчитывается количество каждого слова в списке. Слово с максимальным количеством повторений сохраняется в переменнойm
. - В функции
abundant-word
создается пустой списокv
, который будет заполняться словами из строкиs
. Затем с помощью циклаloop
и условия=
, проверяется каждое слово из спискаv
. Если количество повторений слова в строкеs
равноm
, то это слово добавляется в результат. В итоге функция возвращает список наиболее часто встречающихся слов. Таким образом, при вызове функцииabundant-word
с аргументомaaa aaa bbb bbb ccc
, будет возвращен список(AAA BBB)
, так как словаAAA
иBBB
встречаются наиболее часто.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д