Построить программу "сжатия" слов - 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, которое проверяет три случая:

  1. Если w равно nil или длина ac равна 4, то возвращается перевёрнутый список ac.
  2. Если a равно одному из гласных '(a e i o u y h w)' или a равно первому элементу ac, то рекурсивно вызывается функция compress для cdr w и ac.
  3. Если 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)' показывают, что функция корректно обрабатывает входные данные и возвращает сжатую версию слова.

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


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

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

13   голосов , оценка 3.615 из 5