home *** CD-ROM | disk | FTP | other *** search
- /******************* MATCH.3 ************************/
- clauses
- match(_,[],[]):- !, m_retract.
- match(Subject,[Hpat|Tpats], [M| ML1]) :-
- m(Subject,Hpat),
- m_item(M),
- str_len(M, Len),
- frontstr(Len, Subject, _, Newsub),
- match(Newsub, Tpats, ML1), !,
- m_retract.
-
- m(String, any([H| _])):-
- str_len(H, Lany), str_len(String, LS),
- Lany<= LS,
- frontstr(Lany, String, X, _),
- X = H,
- m_retract, asserta(m_item(X)), !.
- m(String, any([_| T])):-
- m(String, any(T)).
-
- m(String, bal) :-
- not(frontchar(String,')', _)),
- m_retract,
- str_len(String, L),
- m_arbs(String, L),
- m_bals.
-
- m(String, break(X)) :-
- contain(String, X),
- m_retract, asserta(m_item("")), !.
- m(String, break(X)) :-
- frontstr(1, String, A, Rest),
- m(Rest, break(X)),
- m_item(M),
- m_retract,
- concat(A, M, Mres),
- asserta(m_item(Mres)).
-
- m(String, len(N)) :-
- frontstr(N, String, X, _),
- m_retract,
- asserta(m_item(X)).
-
- m(_, null) :-
- m_retract, asserta(m_item("")).
-
- m(String, lit(X)):-
- str_len(X,XLen),
- frontstr(XLen,String,Y,_),
- X=Y,
- m_retract,
- asserta(m_item(X)).
-
- m(String, rpos(N)) :-
- str_len(String, N),
- m_retract, asserta(m_item("")).
-
- m(String, rtab(N)):-
- str_len(String, Len),
- N <= Len, N1 = Len - N,
- frontstr(N1, String, X, _),
- m_retract, asserta(m_item(X)).
-
- m(String, span(X)) :-
- frontstr(1, String, Y, _),
- member(Y, X),
- m_retract,
- m_spanner(String, X).
- m(String, span(X)):-
- frontstr(1, String, Y, _),
- member(Y, X),
- m_collect("", Match),
- assertz(m_item(Match)), !.
- m(_, span(X)) :-
- m_retract,
- member("", X),
- asserta(m_item("")).
-
- m(String, notany(List)) :-
- frontchar(String, X, _),
- not(member(X, List)),
- str_char(XS, X),
- m_retract, asserta(m_item(XS)), !.
-
- m_count("", _, 0).
- m_count(String, Char, N) :-
- frontchar(String, Char, Rest),
- m_count(Rest, Char, N1),
- N = N1 + 1, !.
- m_count(String, Char, N) :-
- frontchar(String, _, Rest),
- m_count(Rest, Char, N).
-
- m_bals :-
- m_item(A),
- m_count(A, '(', Left),
- m_count(A, ')', Right),
- Left <> Right,
- retract(m_item(A)),
- fail.
- m_bals.
-
- m_arbs(String, N):-
- frontstr(N, String, X, _),
- asserta(m_item(X)),
- N1 = N-1,
- m_arbs(String, N1).
- m_arbs(_, _).
-
- m_retract :-
- retract(m_item(_)), fail.
- m_retract.
-
- m_collect(In, Out) :-
- retract(m_item(A)),
- concat(In, A, In1),
- m_collect(In1, Out).
- m_collect(X, X).
-
- contain(String, [H| _]):-
- m(String, lit(H)), !.
- contain(String, [_| Tail]) :-
- contain(String, Tail).
-
- m_spanner(String, X) :-
- frontstr(1, String, Y, Rest),
- member(Y, X), !,
- assertz(m_item(Y)),
- m_spanner(Rest, X).
-
- trim(Oldstr, Newstr) :-
- str_len(Oldstr, Len),
- L1=Len-1,
- frontstr(L1, Oldstr, X, Y),
- Y=" ", !,
- trim(X, Newstr).
- trim(String, String).
-
- dupl(N,_,"") :- N<=0, !.
- dupl(1,Ch,Ch) :- !.
- dupl(N,Ch,Res) :-
- N>0,
- N1=N-1,
- dupl(N1,Ch,N1Res),
- concat(N1Res,Ch,Res).
-
- member(Str,[Str|_]):- !.
- member(Str,[_|T]) :- member(Str,T).
-
- append([], List, List).
- append([X|L1], List2, [X|L3]) :-
- append(L1, List2, L3).
- /****************** Ende MATCH.3 *******************/