Предикат, преобразующий строку в строку, состоящую из первых букв слов - Prolog
Формулировка задачи:
Создайте предикат, преобразующий исходную строку в строку, состоящую из первых букв слов первоначальной строки.
Решение задачи: «Предикат, преобразующий строку в строку, состоящую из первых букв слов»
textual
Листинг программы
domains str=string strl=str* int=integer intl=int* predicates 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) clauses 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).
Объяснение кода листинга программы
В коде преобразовывается строка в строку, состоящую из первых букв слов. В коде используется язык программирования 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д