Вычислить минимальную и максимальную длины слов строки - 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)
- lens(str,int)
- listlen(strl,intl)
- maxelt(intl,int,int)
- minelt(intl,int,int)
- task(str,int,int)
- 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).
- lens("",0).
- lens(S,L) :- frontchar(S,_,RS), lens(RS,L1), L=L1+1.
- listlen([],[]).
- listlen([S|T],[LS|LT]) :- lens(S,LS), listlen(T,LT).
- maxelt([],M,M).
- maxelt([H|T],X,Q) :- H<=X, maxelt(T,X,Q).
- maxelt([H|T],X,Q) :- H >X, maxelt(T,H,Q).
- minelt([],M,M).
- minelt([H|T],X,Q) :- H>=X, minelt(T,X,Q).
- minelt([H|T],X,Q) :- H <X, minelt(T,H,Q).
- task(S,MIN,MAX) :- split(S,LS), listlen(LS,[L|LLS]), minelt(LLS,L,MIN), maxelt(LLS,L,MAX).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д