Преобразовать строку в список слов, упорядоченных лексикографически - Prolog

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

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

Ввести строку. Преобразовать введенную строку в список слов, упорядоченных лексикографически.

Решение задачи: «Преобразовать строку в список слов, упорядоченных лексикографически»

textual
Листинг программы
  1. domains
  2. str=string
  3. strl=str*
  4. int=integer
  5.  
  6. predicates
  7.  
  8. instr(str,char,int,int)
  9. headstr(str,int,str)
  10. tailstr(str,int,str)
  11. split(str,strl)
  12. mins(strl,str,str)
  13. remf(strl,str,strl)
  14. vsort(strl,strl)
  15. task(str,strl)
  16.  
  17. clauses
  18.  
  19. instr("",_,_,0).
  20. instr(S,C,N,N1) :- frontchar(S,C,_), N1=N+1, !.
  21. instr(S,C,N,K)  :- frontchar(S,_,RS), N1=N+1, instr(RS,C,N1,K).
  22.  
  23. headstr(_,0,"").
  24. headstr(S,L,R) :- frontchar(S,B,RS), L1=L-1, headstr(RS,L1,RR), frontchar(R,B,RR).
  25.  
  26. tailstr(S,0,S).
  27. tailstr(S,N,Q) :- frontchar(S,_,RS), N1=N-1, tailstr(RS,N1,Q).
  28.  
  29. split("",[]).
  30. split(S,[S])   :- instr(S,' ',0,K), K=0,!.
  31. split(S,[H|T]) :- instr(S,' ',0,K), K>1, K1=K-1, headstr(S,K1,H), tailstr(S,K,RS), split(RS,T).
  32. split(S,Q)     :- frontchar(S,' ',RS), split(RS,Q).
  33.  
  34. mins([],S,S).
  35. mins([H|T],S,Q) :- H>=S, mins(T,S,Q).
  36. mins([H|T],S,Q) :- H<S,  mins(T,H,Q).
  37.  
  38. remf([],_,[]).
  39. remf([H|T],H,T) :- !.
  40. remf([Q|T],H,[Q|Z]) :- remf(T,H,Z).
  41.  
  42. vsort([],[]).
  43. vsort([S|T],[H|Z]) :- mins([S|T],S,H), remf([S|T],H,P),vsort(P,Z).
  44.  
  45. task(S,R) :- split(S,LS), vsort(LS,R).

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

  1. Название: instr/4 Описание: Функция instr разделяет строку на подстроки на основе указанного разделителя. Входные данные: S - исходная строка, C - символ разделителя, N - номер начального символа, N1 - номер конечного символа Выходные данные: В случае успеха возвращается S1, в противном случае возвращается пустая строка.
  2. Название: headstr/3 Описание: Функция headstr извлекает начальную часть строки до первого вхождения разделителя. Входные данные: S - исходная строка, L - длина начальной части, R - результат Выходные данные: В случае успеха возвращается R, в противном случае возвращается пустая строка.
  3. Название: tailstr/3 Описание: Функция tailstr извлекает конечную часть строки после последнего вхождения разделителя. Входные данные: S - исходная строка, N - номер первого символа, R - результат Выходные данные: В случае успеха возвращается R, в противном случае возвращается пустая строка.
  4. Название: split/2 Описание: Функция split разделяет строку на список строк на основе указанного разделителя. Входные данные: S - исходная строка, LS - список строк Выходные данные: В случае успеха возвращается LS, в противном случае возвращается пустой список.
  5. Название: mins/3 Описание: Функция mins находит минимальный элемент в списке строк. Входные данные: S - список строк, H - текущий элемент, Q - результат Выходные данные: В случае успеха возвращается Q, в противном случае возвращается пустая строка.
  6. Название: remf/3 Описание: Функция remf удаляет из списка строк все элементы, меньшие указанного значения. Входные данные: S - список строк, H - текущий элемент, Q - результат Выходные данные: В случае успеха возвращается Q, в противном случае возвращается пустой список.
  7. Название: vsort/2 Описание: Функция vsort сортирует список строк в лексикографическом порядке. Входные данные: S - список строк, Q - отсортированный список Выходные данные: В случае успеха возвращается Q, в противном случае возвращается пустой список.
  8. Название: task/2 Описание: Функция task преобразует строку в список строк, упорядоченных лексикографически. Входные данные: S - исходная строка, Q - результат Выходные данные: В случае успеха возвращается Q, в противном случае возвращается пустой список.

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


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

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

11   голосов , оценка 3.909 из 5

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

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

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