String Processing in Prolog
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% String Processing in Prolog
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Nicolaie Popescu-Bodorin, 2009
% http://fmi.spiruharet.ro/bodorin/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Prolog, TP 2.0
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CONSTANTS
ofraza="Sunt Catalin. Sunt student si am o bursa aici. Tu?"
DOMAINS
fraza=string
prop=string
cuv=string
lcuv=cuv*
lprop=prop*
PREDICATES
% String processing in Prolog:
% frontchar(String,FrontChar,RestString)
% fronttoken(Str,Tok,Rest)
% frontstr(Len,InpStr, StartStr, RestStr)
% concat(Str1, Str2, StrResult)
% str_len(Str, Len)
fr2lprop(fraza,lprop)
frontprop(fraza,prop,fraza)
frontprop(fraza,prop,prop,fraza)
propsep(char)
CLAUSES
% USAGE: fr2lprop(ofraza,LP)
fr2lprop("",[]):-!.%not(fronttoken(S,_,_)).
fr2lprop(S,[H|T]):-frontprop(S,H,ST),fr2lprop(ST,T).
% USAGE: frontprop(ofraza,P,RF)
frontprop("","",""):-!.
frontprop(S,P,ST):-frontprop(S,"",P,ST).
frontprop(Si,Pi,P,ST):-
frontchar(Si,F,Sia),
not(propsep(F)),
str_char(SF,F),
concat(Pi,SF,Pia),
frontprop(Sia,Pia,P,ST),!.
frontprop(Si,Pi,Pia,Sia):-
frontchar(Si,F,Sia),
propsep(F),
str_char(SF,F),
concat(Pi,SF,Pia),!.
frontprop("",Pi,Pi,"").
propsep(X):-X='.';X=';';X='?';X='!'.