Relacje i operacje na tekstach

Transkrypt

Relacje i operacje na tekstach
Relacje i operacje na tekstach (łańcuchach znaków)
PREDICATES
zawieranie(string,string)
/* zawieranie(T1,T2) – tekst T1 zawarty jest w tekście T2, np. tekst „bc” zawarty jest
w tekście „aabcd” */
podstawienie(string,string,string,string)
/* podstawienie(T1,T2,T3,T4) – tekst T4 jest wynikiem podstawienia tekstu T1 za
tekst T2 w tekście T3 na pierwszym miejscu, na którym tekst T2 występuje w tekście T3. Np.
tekst „aabbc” jest wynikiem podstawienie tekstu „a” za tekst „b” na pierwszym miejscu w
tekście „abbbc” , gdzie tekst „b” występuje */
poczatek(string,string,string)
/* poczatek(T1,T2,P) – tekst P jest częścią tekstu T2 poprzedzającą występowanie w
nim tekstu T1 */
koniec(string,string,string)
/* koniec(T1,T2,P) – tekst P jest częścią tekstu T2 następującą po występowaniu w nim
tekstu T1 */
podstawienie_globalne(string,string,string,string)
/* podstawienie_globalne(T1,T2,T3,T4) – tekst T4 jest wynikiem podstawienia
tekstu T1 za tekst T2 w tekście T3 w kaŜdym miejscu, na którym tekst T2 występuje w
tekście T3. Np. tekst „aaaac” jest wynikiem podstawienie tekstu „a” za tekst „b” w kaŜdym
miejscu w tekście „abbbc” , gdzie tekst „b” występuje */
cyfra(string)
/* predykat cyfra(T)rozpoznaje wśród łańcuchów znaków cyfry: „0”, „1”, ...”9” */
ciag_cyfr(string)
/* predykat ciag_cyfr(T)rozpoznaje wśród łańcuchów znaków ciągi cyfr: np. „019” */
ciag_cyfr_w_tekscie(string,string,string)
/* ciag_cyfr_w_tekscie(T,L,R) – L jest ciągiem cyfr na początku tekstu T, a R jest
pozostałą częścią tekstu T */
napis_liczby(string)
/* predykat napis_liczby(T) rozpoznaje wśród ciągów cyfr napisy liczb, tj. ciągi cyfr
nie zaczynające się od cyfry „0” */
napis_liczby_w_tekscie(string,string,string) /* - predykat rozpoznaje
na początku tekstu napis liczby oraz wyróŜnia pozostałą część takstu */
CLAUSES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
ZAWIERANIE TEKSTÓW
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
zawieranie("","").
zawieranie(T1,T2):T2<>"",concat(T1,_,T2);
T2<>"",frontStr(1,T2,_,N_T2),
zawieranie(T1,N_T2).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
koniec(T1,T2,K):T2<>"",concat(T1,K,T2),!;
T2<>"",frontStr(1,T2,_,N_T2),
koniec(T1,N_T2,K).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
poczatek(T1,T2,P):koniec(T1,T2,K),concat(T,K,T2),concat(P,T1,T).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
PODSTAWIANIE TEKSTU ZA TEKST W TEKŚCIE
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
podstawienie(T1,T2,T3,T4):T1<>T2, T3<>"",
poczatek(T2,T3,P),koniec(T2,T3,K),!,
concat(P,T1,T),concat(T,K,T4).
podstawienie_globalne(T1,T2,T3,T4):-
podstawienie(T1,T2,T3,N_T3),!,
podstawienie_globalne(T1,T2,N_T3,T4);
T4=T3,!.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
NAPIS LICZBY
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cyfra("0"). cyfra("1"). cyfra("2"). cyfra("3"). cyfra("4").
cyfra("5"). cyfra("6"). cyfra("7"). cyfra("8"). cyfra("9").
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Rozpoznawanie napisu jako ciągu cyfr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ciag_cyfr(X):X<>"", cyfra(X),!;
X<>"", cyfra(C), concat(C,N_X,X),cyfra(N_X),!;
X<>"", cyfra(C), concat(C,N_X,X),!, napis_liczby(N_X).
napis_liczby(X):ciag_cyfr(X),frontStr(1,X,C,_),C<>"0",!.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Rozpoznawanie na początku napisu ciągu cyfr
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ciag_cyfr_w_tekscie("","","").
ciag_cyfr_w_tekscie(T,L,R):T<>"",ciag_cyfr(T),L=T,R="",!;
T<>"", frontStr(1,T,L,R),cyfra(L),
frontStr(2,T,L1,_),not(ciag_cyfr(L1));
T<>"", frontStr(1,T,C,N_T), cyfra(C),
ciag_cyfr_w_tekscie(N_T,N_L,R),
concat(C,N_L,L).
napis_liczby_w_tekscie(T,L,R):ciag_cyfr_w_tekscie(T,L,R), frontStr(1,L,C,_),C<>"0",!.

Podobne dokumenty