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",!.