home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 01 / pattern / match.3 < prev    next >
Encoding:
Text File  |  1987-04-20  |  3.4 KB  |  153 lines

  1. /******************* MATCH.3 ************************/
  2. clauses
  3.   match(_,[],[]):- !, m_retract.
  4.   match(Subject,[Hpat|Tpats], [M| ML1]) :- 
  5.     m(Subject,Hpat), 
  6.     m_item(M), 
  7.     str_len(M, Len),
  8.     frontstr(Len, Subject, _, Newsub),
  9.     match(Newsub, Tpats, ML1), !,
  10.     m_retract.
  11.    
  12.   m(String, any([H| _])):-
  13.     str_len(H, Lany), str_len(String, LS),
  14.     Lany<= LS,
  15.     frontstr(Lany, String, X, _),
  16.     X = H, 
  17.     m_retract, asserta(m_item(X)), !.
  18.   m(String, any([_| T])):-
  19.     m(String, any(T)).
  20.  
  21.   m(String, bal) :- 
  22.     not(frontchar(String,')',  _)),
  23.     m_retract,
  24.     str_len(String, L),
  25.     m_arbs(String, L), 
  26.     m_bals.
  27.  
  28.   m(String, break(X)) :-
  29.      contain(String, X),
  30.      m_retract, asserta(m_item("")), !.
  31.   m(String, break(X)) :-
  32.      frontstr(1, String, A, Rest),
  33.      m(Rest, break(X)),
  34.      m_item(M),
  35.      m_retract,
  36.      concat(A, M, Mres),
  37.      asserta(m_item(Mres)).
  38.   
  39.   m(String, len(N)) :-
  40.     frontstr(N, String, X, _),
  41.     m_retract,
  42.     asserta(m_item(X)).   
  43.  
  44.   m(_, null) :-
  45.     m_retract, asserta(m_item("")).
  46.  
  47.   m(String, lit(X)):-
  48.      str_len(X,XLen), 
  49.      frontstr(XLen,String,Y,_),
  50.      X=Y,
  51.      m_retract,
  52.      asserta(m_item(X)).
  53.     
  54.   m(String, rpos(N)) :-
  55.     str_len(String, N),
  56.     m_retract, asserta(m_item("")).
  57.   
  58.   m(String, rtab(N)):-
  59.     str_len(String, Len),
  60.     N <=  Len, N1 = Len - N,
  61.     frontstr(N1, String, X, _),
  62.     m_retract, asserta(m_item(X)).
  63.     
  64.   m(String, span(X)) :-
  65.     frontstr(1, String, Y, _),
  66.     member(Y, X), 
  67.     m_retract,
  68.     m_spanner(String, X).
  69.   m(String, span(X)):-
  70.     frontstr(1, String, Y, _),
  71.     member(Y, X), 
  72.     m_collect("", Match), 
  73.     assertz(m_item(Match)), !.
  74.   m(_, span(X)) :-
  75.     m_retract,
  76.     member("", X),
  77.     asserta(m_item("")).  
  78.  
  79.   m(String, notany(List)) :-
  80.     frontchar(String, X, _),
  81.     not(member(X, List)),
  82.     str_char(XS, X),
  83.     m_retract, asserta(m_item(XS)), !.
  84.   
  85.   m_count("", _, 0).
  86.   m_count(String, Char, N) :-
  87.     frontchar(String, Char, Rest),
  88.     m_count(Rest, Char, N1),
  89.     N = N1 + 1, !.
  90.   m_count(String, Char, N) :-
  91.     frontchar(String, _, Rest),
  92.     m_count(Rest, Char, N).
  93.     
  94.   m_bals :- 
  95.     m_item(A),
  96.     m_count(A, '(', Left),
  97.     m_count(A, ')', Right),
  98.     Left <> Right, 
  99.     retract(m_item(A)),
  100.     fail.
  101.   m_bals.
  102.   
  103.   m_arbs(String, N):-
  104.     frontstr(N, String, X, _),
  105.     asserta(m_item(X)),
  106.     N1 = N-1,
  107.     m_arbs(String, N1).      
  108.   m_arbs(_, _).    
  109.   
  110.   m_retract :-
  111.     retract(m_item(_)), fail.
  112.   m_retract.
  113.   
  114.   m_collect(In, Out) :-
  115.     retract(m_item(A)),
  116.     concat(In, A, In1),
  117.     m_collect(In1, Out).
  118.   m_collect(X, X).
  119.   
  120.   contain(String, [H| _]):-
  121.     m(String, lit(H)), !.
  122.   contain(String, [_| Tail]) :-
  123.     contain(String, Tail).
  124.  
  125.   m_spanner(String, X) :-
  126.     frontstr(1, String, Y, Rest),
  127.     member(Y, X), !,
  128.     assertz(m_item(Y)),
  129.     m_spanner(Rest, X).
  130.     
  131.   trim(Oldstr, Newstr) :-
  132.     str_len(Oldstr, Len),
  133.     L1=Len-1,
  134.     frontstr(L1, Oldstr, X, Y),
  135.     Y=" ", !,
  136.     trim(X, Newstr).
  137.   trim(String, String).
  138.  
  139.   dupl(N,_,"") :- N<=0, !.  
  140.   dupl(1,Ch,Ch) :- !.
  141.   dupl(N,Ch,Res) :-
  142.     N>0,
  143.     N1=N-1,
  144.     dupl(N1,Ch,N1Res),
  145.     concat(N1Res,Ch,Res).     
  146.  
  147.   member(Str,[Str|_]):- !.
  148.   member(Str,[_|T]) :- member(Str,T).
  149.  
  150.   append([], List, List).
  151.   append([X|L1], List2, [X|L3]) :-
  152.     append(L1, List2, L3).    
  153. /****************** Ende MATCH.3 *******************/