Построить программу "сжатия" слов - Lisp
Формулировка задачи:
Доброго времени суток!
Поступила очередная и, как заявлено, последняя задача из серии горячо любимого лиспа.
Что-то не знаю, как к ней подступиться.
Построить программу "сжатия", назначение которой - преобразование английских слов в их "звуковой" код. Этот процесс предусматривает "сжатие" примерно одинаково звучащих слов в одинаковый их код - своего рода, аббревиатуру этих слов. Слова "сжимаются" в соответствии со следующими правилами:
-первая буква слова сохраняется;
-все последующие за ней гласные, а так же буквы "h", "w" и "y" удаляются;
-сдвоенные буквы заменяются одиночными;
-закодированное слово состоит не более чем из четырёх букв, остальные буквы удаляются.
Напишите функцию (f w), которая выдаёт результат сжатия слова, представленного в виде списка букв w. Примеры: (f '(barringto n)) = (b r n g) и (f '(11 e we 11 y n)) = (1 n).
Решение задачи: «Построить программу "сжатия" слов»
textual
Листинг программы
(defun compress-word (w) (compress (cdr w) (list (car w)))) (defun compress (w ac &aux (a (car w))) (cond ((or (null w)(= (length ac) 4)) (reverse ac)) ((or (member a '(a e i o u y h w)) (eq a (car ac))) (compress (cdr w) ac)) ((compress (cdr w) (cons a ac))))) > (compress-word '(b a r r i n g t o n)) (B R N G) > (compress-word '(a r r i n g t o n)) (A R N G)
Объяснение кода листинга программы
В коде представлена функция сжатия слова compress-word
, которая принимает на вход слово w
и возвращает сжатую версию этого слова.
Сжатие слова реализуется с помощью вспомогательной функции compress
, которая принимает на вход список слов w
, список ac
и переменную a
.
В функции compress
используется условие cond
, которое проверяет три случая:
- Если
w
равноnil
или длинаac
равна 4, то возвращается перевёрнутый списокac
. - Если
a
равно одному из гласных '(a e i o u y h w)' илиa
равно первому элементуac
, то рекурсивно вызывается функцияcompress
дляcdr w
иac
. - Если
a
не равно ни одному из вышеописанных случаев, то с помощью функцииcons
добавляетсяa
в началоac
, а затем рекурсивно вызывается функцияcompress
дляcdr w
иac
. Таким образом, функцияcompress-word
применяет функциюcompress
к каждому символу входного слова, пока не будет получена сжатая версия слова. Примеры использования функцииcompress-word
со словами '(b a r r i n G T O N)' и '(a r r i N G T O N)' показывают, что функция корректно обрабатывает входные данные и возвращает сжатую версию слова.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д