Ответ в теме: Найти слово с наибольшим количеством гласных букв – Prolog

      Комментарии к записи Ответ в теме: Найти слово с наибольшим количеством гласных букв – Prolog отключены
#1855

Судя по frontchar, вы используете Турбо Пролог — в нем для обработки строк используются особые функции — и это не удобно, т.к. frontchar позволяет получать только первый символ — его было бы удобно заменить операцией отделения головы списка — это более красиво синтаксически, и единообразно.

Однако, если вы используете Турбо Пролог — для Вашей задачи удобно использовать fronttoken (этот стандартные предикат выделяет первое слово строки). Но у Вас в задании сказано, что текст на русском языке, а fronttoken не поддерживает русский язык. Однако, если Вы используете Вижуал Пролог — то смело можете применять frontoken (он там тоже поддерживается и с русскими буквами работает нормально).

Более правильное решение — преобразовать строку строку в список символов и работать с ним.

Если нужно обрабатывать русские символы в Турбо Пролог — можно написать такой предикат для выделения слов (вместо fronttoken) :

getword(InputStr,Word,Buf,Tail):-
    frontchar(InputStr,Char,StrTail),
    NOT(Char=' '),
    str_char(CharStr,Char),
    concat(Word,CharStr,NewStr),
    getword(StrTail,NewStr,Buf,Tail),!.
getword(InputStr,Word,Word,Tail):-
    frontchar(InputStr,_,Tail).
getword(InputStr,Word,Word,InputStr).

Перво что нужно сделать — разделить строку на список слов — это очень просто, достаточно рекурсивно применить описанное выше правило.

Затем, надо где-то определить гласные буквы — я бы сделал это примерно так:

vowel("a").
vowel("e").

буквы в кавычках, т.к. по заданию они русские, а турбо не поймет иначе.

Ну и остается написать предикат, который считает количество гласных букв в слове.
Берешь букву, преобразуешь ее в строку при помощи встроенного предиката str_char (в правиле выше есть пример использования) и передаешь ее в vowel. Попробуй сам, если не получится — пиши )