В списке символов S1, S2, ..., SТ найти длину самого длинного слова - Prolog
Формулировка задачи:
Здравствуйте, очень нужна помощь..
Необходимо написать такую вот программу: в списке символов S1, S2, ..., SТ найти длину самого длинного слова, если разделителем между словами является один или несколько пробелов; вывести это слово. То есть дан список вроде ['с', 'т', 'р', 'о', 'к', 'а', ' ', 'п', 'р', 'о', 'в', 'е', 'р', 'к', 'и'].
С прологом знакома едва, даже не знаю с какой стороны подступиться к этому заданию, спасите пожалуйста кто-нибудь..
Решение задачи: «В списке символов S1, S2, ..., SТ найти длину самого длинного слова»
textual
Листинг программы
DOMAINS list = char*. PREDICATES nondeterm внутренний_максимум(list, integer, integer) nondeterm максимум(list, integer) CLAUSES внутренний_максимум([], 0, 0). внутренний_максимум([Z | X], Максимум, 0) :-Z = ' ', внутренний_максимум(X, Максимум, _),!. внутренний_максимум([_ | X], Максимум, ВремДлина) :- внутренний_максимум(X, Максимум, СтарДлина), ВремДлина=СтарДлина+1,ВремДлина<Максимум,!. внутренний_максимум([_ | X], ВремДлина, ВремДлина) :- внутренний_максимум(X, _, СтарДлина), ВремДлина=СтарДлина+1. максимум(Список, Максимум) :- внутренний_максимум(Список, Максимум, _). GOAL максимум(['с','т','р', 'о', 'к', 'а', ' ', ' ','п' ,'р' ,'о', 'в' ,'е', 'р','к','и',' ','т','е','с','т'], М).
Объяснение кода листинга программы
- В этом коде используется язык программирования Prolog.
- Задача состоит в поиске длины самого длинного слова в списке символов S1, S2, ..., SТ.
- Для решения задачи используется два предиката:
внутренний_максимум
имаксимум
. - Предикат
внутренний_максимум
используется для поиска максимальной длины слова в списке. - Предикат
максимум
используется для вызова предикатавнутренний_максимум
и получения результата. - В начале кода определены два домена:
list
(список символов) иinteger
(целое число). - Внутренний максимум инициализируется как 0, а текущая длина слова как 0.
- Если список пустой, то внутренний максимум равен 0.
- Если первый символ в списке является пробелом, то он пропускается, а внутренний максимум и текущая длина слова передаются в рекурсию для обработки оставшейся части списка.
- Если первый символ в списке не является пробелом, то он добавляется к текущей длине слова, и если это приводит к превышению максимальной длины слова, то текущая длина слова уменьшается на 1.
- Если первый символ в списке является последним символом в слове, то внутренний максимум обновляется на текущую длину слова.
- Если первый символ в списке не является последним символом в слове, то внутренний максимум остается неизменным.
- В конце кода вызывается предикат
максимум
для обработки списка ['с','т','р', 'о', 'к', 'а', ' ', ' ','п' ,'р' ,'о', 'в' ,'е', 'р','к','и',' ','т','е','с','т'] и получения максимальной длины слова. - Значение М в предикате
максимум
инициализируется как 0. - Значение М в предикате
максимум
обновляется на текущую длину слова, когда первый символ в списке является последним символом в слове. - Значение М в предикате
максимум
обновляется на максимальную длину слова, когда первый символ в списке не является последним символом в слове. - Значение М в предикате
максимум
обновляется на максимальную длину слова из внутреннего максимума. - Значение М в предикате
максимум
обновляется на максимальную длину слова из внутреннего максимума, когда первый символ в списке не является пробелом. - Значение М в предикате
максимум
обновляется на максимальную длину слова из внутреннего максимума, когда первый символ в списке является пробелом. - Значение М в предикате
максимум
обновляется на максимальную длину слова из внутреннего максимума, когда первый символ в списке является последним символом в слове.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д