Построить программу "сжать", назначение которой - преобразование английских слов в их "звуковой" код - Prolog
Формулировка задачи:
Всем привет . Не могли бы помочь решить данную задачу ?) Построить программу "сжать", назначение которой - преобразование английских слов в их "звуковой" код. Этот процесс предусматривает "сжатие" примерно одинаково звучащих слов в одинаковый их код - своего рода, аббревиатуру этих слов. Слова "сжимаются" в соответствии со следующими правилами:
• первая буква слова сохраняется;
• все последующие за ней гласные, а также буквы "h", "w" и "y" удаляются;
• сдвоенные буквы заменяются одиночными;
• закодированное слово состоит не более чем из четырех букв, остальные буквы удаляются.
Примеры: сжать(barrington, brng) и сжать(llewellyn, ln) - выполнено.
Указание. Воспользуйтесь предикатом name/2.
Решение задачи: «Построить программу "сжать", назначение которой - преобразование английских слов в их "звуковой" код»
textual
Листинг программы
p(_,_,[],[]). p(3,_,_,[]). p(A,B,[C|D],E):- member(C,"aeiouhwy"), p(A,B,D,E). p(A,B,[B|C],D):- p(A,B,C,D). p(A,_,[C|D],[C|E]):- F is A+1, p(F,C,D,E). res(X,Y):-name(X,[X2|X3]), p(0,X2,X3,Y3), name(Y,[X2|Y3]).
Объяснение кода листинга программы
- Начинается с двух пустых списков, один для входных данных, другой для результатов.
- Используется функция
p/4
, которая принимает четыре аргумента:A
иB
- индексы, которые используются для обработки следующего слова.C
- текущее слово.D
- список звуков слова.E
- список звуков слова, который будет использоваться в качестве результата.
- Если текущее слово является гласной (a, e, i, o, u, h, w, y), функция
p
рекурсивно вызывается с аргументамиA+1
иC
, чтобы обработать следующее слово. - Если текущее слово является согласной (не является гласной), функция
p
рекурсивно вызывается с аргументамиA+1
иC
, чтобы обработать следующее слово. - Если текущее слово является конечным, функция
p
возвращает пустой список для звуков слова. - Используется функция
res/2
, которая принимает два аргумента:X
- имя входного слова.Y
- имя выходного слова.- Функция
name/3
используется для разбиения имени на отдельные слова. - Функция
p
вызывается с аргументами0
,X2
(первое слово входного имени) иX3
(остальные слова входного имени), гдеX2
иX3
передаются в функциюres
. - Функция
name
вызывается снова, на этот раз с аргументамиY
иY3
(результат функцииp
), чтобы объединить имя выходного слова из отдельных звуков.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д