Предикат, преобразующий строку в строку, состоящую из первых букв слов - Prolog

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

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

Создайте предикат, преобразующий исходную строку в строку, состоящую из первых букв слов первоначальной строки.

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

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

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

В коде преобразовывается строка в строку, состоящую из первых букв слов. В коде используется язык программирования Prolog со следующими ключевыми элементами:

  • Домены: str=string, strl=str*, int=integer, intl=int*.
  • Предикаты: instr(str,char,int,int), headstr(str,int,str), tailstr(str,int,str), split(str,strl), flist(strl,strl), join(strl,str), task(str,str).
  • Клаузы:
    • instr(``,_,_,0).
    • instr(S,C,N,N1) :- frontchar(S,C,_), N1=N+1, !.
    • instr(S,C,N,K) :- frontchar(S,_,RS), N1=N+1, instr(RS,C,N1,K).
    • headstr(_,0,``).
    • headstr(S,L,R) :- frontchar(S,B,RS), L1=L-1, headstr(RS,L1,RR), frontchar(R,B,RR).
    • tailstr(S,0,S).
    • tailstr(S,N,Q) :- frontchar(S,_,RS), N1=N-1, tailstr(RS,N1,Q).
    • split(``,[]).
    • split(S,[S]) :- instr(S,' ',0,K), K=0,!.
    • split(S,[H|T]) :- instr(S,' ',0,K), K>1, K1=K-1, headstr(S,K1,H), tailstr(S,K,RS), split(RS,T).
    • split(S,Q) :- frontchar(S,' ',RS), split(RS,Q).
    • join([],``).
    • join([H|T],R) :- join(T,RR), concat(H, ,H1), concat(H1,RR,R).
    • flist([],[]).
    • flist([H|T],[S|R]) :- frontchar(H,C,_), frontchar(S,C, ), flist(T,R).
    • task(S,R) :- split(S,LS), flist(LS,LR), join(LR,R). Вот список номеров и соответствующих названий переменных:
  • 1: S
  • 2: C
  • 3: N
  • 4: N1
  • 5: K
  • 6: RS
  • 7: H
  • 8: T
  • 9: Q
  • 10: RR
  • 11: R
  • 12: H1
  • 13: L
  • 14: S1
  • 15: R1
  • 16: B
  • 17: K1
  • 18: RS1
  • 19: LS
  • 20: LR

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


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

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

13   голосов , оценка 3.692 из 5

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

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

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