Построить программу "сжатия" слов - Lisp

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

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

Доброго времени суток! Поступила очередная и, как заявлено, последняя задача из серии горячо любимого лиспа.
Построить программу "сжатия", назначение которой - преобразование английских слов в их "звуковой" код. Этот процесс предусматривает "сжатие" примерно одинаково звучащих слов в одинаковый их код - своего рода, аббревиатуру этих слов. Слова "сжимаются" в соответствии со следующими правилами: -первая буква слова сохраняется; -все последующие за ней гласные, а так же буквы "h", "w" и "y" удаляются; -сдвоенные буквы заменяются одиночными; -закодированное слово состоит не более чем из четырёх букв, остальные буквы удаляются. Напишите функцию (f w), которая выдаёт результат сжатия слова, представленного в виде списка букв w. Примеры: (f '(barringto n)) = (b r n g) и (f '(11 e we 11 y n)) = (1 n).
Что-то не знаю, как к ней подступиться.

Решение задачи: «Построить программу "сжатия" слов»

textual
Листинг программы
  1. (defun compress-word (w)
  2.   (compress (cdr w) (list (car w))))
  3.  
  4. (defun compress (w ac &aux (a (car w)))
  5.   (cond ((or (null w)(= (length ac) 4)) (reverse ac))
  6.         ((or (member a '(a e i o u y h w)) (eq a (car ac)))
  7.          (compress (cdr w) ac))
  8.         ((compress (cdr w) (cons a ac)))))
  9.  
  10. > (compress-word '(b a r r i n g t o n))
  11. (B R N G)
  12. > (compress-word '(a r r i n g t o n))
  13. (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут