Наиболее часто встречаемое слово - 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встречаются наиболее часто.