Найти максимальное и минимальное слово в строке
Код:
predicates
getMaxMin(string,integer,integer)
max_min(integer,integer,integer,integer,integer)
clauses
getMaxMin(Str,Max,Min):-fronttoken(Str,Word,Rest),!,
getMaxMin(Rest,Ma,Mi),str_len(Word,Len),
max_min(Ma,Mi,Len,Max,Min).
getMaxMin(_,0,9999):-!.
max_min(0,9999,Len,Len,Len):-!.
max_min(Ma,Mi,Len,Len,Mi):-Len>Ma,!.
max_min(Ma,Mi,Len,Ma,Len):-Len<Mi,!.
max_min(Max,Min,_,Max,Min).
goal
clearwindow,
readln(Str),
fronttoken(Str,_,_),
getMaxMin(Str,Max,Min),
write("samoe dlinnoe ", Max, "nsamoe korotkoe ",Min).
getMaxMin(string,integer,integer)
max_min(integer,integer,integer,integer,integer)
clauses
getMaxMin(Str,Max,Min):-fronttoken(Str,Word,Rest),!,
getMaxMin(Rest,Ma,Mi),str_len(Word,Len),
max_min(Ma,Mi,Len,Max,Min).
getMaxMin(_,0,9999):-!.
max_min(0,9999,Len,Len,Len):-!.
max_min(Ma,Mi,Len,Len,Mi):-Len>Ma,!.
max_min(Ma,Mi,Len,Ma,Len):-Len<Mi,!.
max_min(Max,Min,_,Max,Min).
goal
clearwindow,
readln(Str),
fronttoken(Str,_,_),
getMaxMin(Str,Max,Min),
write("samoe dlinnoe ", Max, "nsamoe korotkoe ",Min).
Код:
predicates
length(string,integer)
gtwrd(string,string,string,string)
gtwrd2(string,string,string,string)
longer(string,string)
longer2(string,string)
law(string,string)
law2(string,string)
clauses
length("",0):-!.
length(S,N):-
frontchar(S,_,S1),
length(S1,N1),
N=N1+1.
gtwrd(S,W,E,T):-
frontchar(S,C,S1),
NOT(C=' '),
str_char(SS,C),
concat(W,SS,R),
gtwrd(S1,R,E,T),!.
gtwrd(S,W,W,R):-
frontchar(S,_,R).
gtwrd(S,W,W,S).
longer(A,B):-
length(A,LenA),
length(B,LenB),
LenA>LenB.
law("",""):-!.
law(S,W):-
gtwrd(S,"",WW,SS),NOT(SS=""),
law(SS,WWW),
NOT(longer(WWW,WW)),
W=WWW.
law(S,W):-
gtwrd(S,"",W,_).
gtwrd2(S,Q,E,T):-
frontchar(S,C,S1),
NOT(C=' '),
str_char(SS,C),
concat(Q,SS,R),
gtwrd2(S1,R,E,T),!.
gtwrd2(S,Q,Q,R):-
frontchar(S,_,R).
gtwrd2(S,Q,Q,S).
longer2(A,B):-
length(A,LenA),
length(B,LenB),
LenA<LenB.
law2("",""):-!.
law2(S,Q):-
gtwrd2(S,"",QQ,SS),NOT(SS=""),
law2(SS,QQQ),
NOT(longer2(QQQ,QQ)),
Q=QQQ.
law2(S,Q):-
gtwrd2(S,"",Q,_).
goal
clearwindow,
write("vvedite predlozenie"),nl,
readln(S),
law(S,W),
length(W,N),
write("min slovo: ",W," ",N),nl,
law2(S,Q),
length(Q,M),
write("max slovo: ",Q," ",M).
length(string,integer)
gtwrd(string,string,string,string)
gtwrd2(string,string,string,string)
longer(string,string)
longer2(string,string)
law(string,string)
law2(string,string)
clauses
length("",0):-!.
length(S,N):-
frontchar(S,_,S1),
length(S1,N1),
N=N1+1.
gtwrd(S,W,E,T):-
frontchar(S,C,S1),
NOT(C=' '),
str_char(SS,C),
concat(W,SS,R),
gtwrd(S1,R,E,T),!.
gtwrd(S,W,W,R):-
frontchar(S,_,R).
gtwrd(S,W,W,S).
longer(A,B):-
length(A,LenA),
length(B,LenB),
LenA>LenB.
law("",""):-!.
law(S,W):-
gtwrd(S,"",WW,SS),NOT(SS=""),
law(SS,WWW),
NOT(longer(WWW,WW)),
W=WWW.
law(S,W):-
gtwrd(S,"",W,_).
gtwrd2(S,Q,E,T):-
frontchar(S,C,S1),
NOT(C=' '),
str_char(SS,C),
concat(Q,SS,R),
gtwrd2(S1,R,E,T),!.
gtwrd2(S,Q,Q,R):-
frontchar(S,_,R).
gtwrd2(S,Q,Q,S).
longer2(A,B):-
length(A,LenA),
length(B,LenB),
LenA<LenB.
law2("",""):-!.
law2(S,Q):-
gtwrd2(S,"",QQ,SS),NOT(SS=""),
law2(SS,QQQ),
NOT(longer2(QQQ,QQ)),
Q=QQQ.
law2(S,Q):-
gtwrd2(S,"",Q,_).
goal
clearwindow,
write("vvedite predlozenie"),nl,
readln(S),
law(S,W),
length(W,N),
write("min slovo: ",W," ",N),nl,
law2(S,Q),
length(Q,M),
write("max slovo: ",Q," ",M).
$_="add asdadasa sdadasd aw sdf2000fds qeew";
$min=$_;
for(split){
$min=$_ if length($min)>length($_);
$max=$_ if length($max)<length($_);
}
print "min: $minnmax: $maxn";
Код:
# Пример на Perl. Разделители - пробелы.
$_="add asdadasa sdadasd aw sdf2000fds qeew";
$min=$_;
for(split){
$min=$_ if length($min)>length($_);
$max=$_ if length($max)<length($_);
}
print " min: $min \n max: $max \n";
$_="add asdadasa sdadasd aw sdf2000fds qeew";
$min=$_;
for(split){
$min=$_ if length($min)>length($_);
$max=$_ if length($max)<length($_);
}
print " min: $min \n max: $max \n";
Это, конечно, все хорошо, но надо читать все, что написано. Прога работает корректно, за исключением одного "но". fronttoken как раз делит предложения на слова. Если слово начинается с цифры, то прога будет эти цифры выносить в отдельное слово пока не наткнется на букву.
Может кто-нибудь сделать это через frontchar?