Предикат, меняющий местами первую и последнюю буквы в каждом слове исходной строки - 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. join(strl,str)
  15. lens(str,int)
  16. swapw(str,str)
  17. swapa(strl,strl)
  18. task(str,str)
  19.  
  20. clauses
  21.  
  22. instr("",_,_,0).
  23. instr(S,C,N,N1) :- frontchar(S,C,_), N1=N+1, !.
  24. instr(S,C,N,K)  :- frontchar(S,_,RS), N1=N+1, instr(RS,C,N1,K).
  25.  
  26. headstr(_,0,"").
  27. headstr(S,L,R) :- frontchar(S,B,RS), L1=L-1, headstr(RS,L1,RR), frontchar(R,B,RR).
  28.  
  29. tailstr(S,0,S).
  30. tailstr(S,N,Q) :- frontchar(S,_,RS), N1=N-1, tailstr(RS,N1,Q).
  31.  
  32. split("",[]).
  33. split(S,[S])   :- instr(S,' ',0,K), K=0,!.
  34. split(S,[H|T]) :- instr(S,' ',0,K), K>1, K1=K-1, headstr(S,K1,H), tailstr(S,K,RS), split(RS,T).
  35. split(S,Q)     :- frontchar(S,' ',RS), split(RS,Q).
  36.  
  37. join([],"").
  38. join([H|T],R) :- join(T,RR), concat(H," ",H1), concat(H1,RR,R).
  39.  
  40. lens("",0).
  41. lens(S,L) :- frontchar(S,_,RS), lens(RS,L1), L=L1+1.
  42.  
  43. swapw(S,W) :- lens(S,LS),LS1=LS-1,tailstr(S,LS1,LAST), headstr(S,1,FIRST), frontchar(S,_,M),
  44.               lens(M,L), L1=L-1,  headstr(M,L1,MID),
  45.               concat(LAST,MID,TMP), concat(TMP,FIRST,W).
  46.  
  47. swapa([],[]).              
  48. swapa([H|T],[HH|TT]) :- swapw(H,HH), swapa(T,TT).              
  49.  
  50. task(S,R) :- split(S,LS), swapa(LS,RS), join(RS,R).

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


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

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

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

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

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

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