В списке символов 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
 максимум(['с','т','р', 'о', 'к', 'а', ' ', ' ','п' ,'р' ,'о', 'в' ,'е', 'р','к','и',' ','т','е','с','т'], М).

Объяснение кода листинга программы

  1. В этом коде используется язык программирования Prolog.
  2. Задача состоит в поиске длины самого длинного слова в списке символов S1, S2, ..., SТ.
  3. Для решения задачи используется два предиката: внутренний_максимум и максимум.
  4. Предикат внутренний_максимум используется для поиска максимальной длины слова в списке.
  5. Предикат максимум используется для вызова предиката внутренний_максимум и получения результата.
  6. В начале кода определены два домена: list (список символов) и integer (целое число).
  7. Внутренний максимум инициализируется как 0, а текущая длина слова как 0.
  8. Если список пустой, то внутренний максимум равен 0.
  9. Если первый символ в списке является пробелом, то он пропускается, а внутренний максимум и текущая длина слова передаются в рекурсию для обработки оставшейся части списка.
  10. Если первый символ в списке не является пробелом, то он добавляется к текущей длине слова, и если это приводит к превышению максимальной длины слова, то текущая длина слова уменьшается на 1.
  11. Если первый символ в списке является последним символом в слове, то внутренний максимум обновляется на текущую длину слова.
  12. Если первый символ в списке не является последним символом в слове, то внутренний максимум остается неизменным.
  13. В конце кода вызывается предикат максимум для обработки списка ['с','т','р', 'о', 'к', 'а', ' ', ' ','п' ,'р' ,'о', 'в' ,'е', 'р','к','и',' ','т','е','с','т'] и получения максимальной длины слова.
  14. Значение М в предикате максимум инициализируется как 0.
  15. Значение М в предикате максимум обновляется на текущую длину слова, когда первый символ в списке является последним символом в слове.
  16. Значение М в предикате максимум обновляется на максимальную длину слова, когда первый символ в списке не является последним символом в слове.
  17. Значение М в предикате максимум обновляется на максимальную длину слова из внутреннего максимума.
  18. Значение М в предикате максимум обновляется на максимальную длину слова из внутреннего максимума, когда первый символ в списке не является пробелом.
  19. Значение М в предикате максимум обновляется на максимальную длину слова из внутреннего максимума, когда первый символ в списке является пробелом.
  20. Значение М в предикате максимум обновляется на максимальную длину слова из внутреннего максимума, когда первый символ в списке является последним символом в слове.

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


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

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

15   голосов , оценка 4 из 5
Похожие ответы