home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lifeos2.zip / LIFE-1.02 / TESTS / LF / VOLANSKI.LF < prev    next >
Text File  |  1996-06-04  |  2KB  |  96 lines

  1. %% Version 1
  2. %% fore^ts type'es
  3. %% !! this won't work with disjunctions in rules
  4.  
  5. match(Var,Inst):-
  6.   Var:==list,!, %libera
  7.   Var=Inst.
  8. match([],[]).
  9. match([foret(Key,Val)|T],L):- Val:==list,!,    %remarquez  Key
  10.   matchone(T,L,Key,Foret_rez),
  11.   Val=Foret_rez.
  12. match([foret(_,X)|T],L):- 
  13.   diff(L,X,Lrest),        
  14.   match(T,Lrest).
  15. match([Tr:tree|T],[Tr1|T1]):-
  16.   matchtree(Tr,Tr1),
  17.   match(T,T1).
  18. match([H|T1],[H|T2]):-
  19.   match(T1,T2).
  20.  
  21. %% 1 parame`tre de plus
  22. %% matchone(mode`le, instance, type de la fore^t, valeur de la fore^t(O))
  23. matchone(L1,L2,_,[]):- match(L1,L2).
  24. matchone(L1,[Tr:tree(H)|T],Key,[Tr|F_rez]):-
  25.   H:=<Key,
  26.   matchone(L1,T,Key,F_rez).
  27.  
  28. diff(X,[],X).
  29. diff([H|T1],[H|T2],Rez):- !,
  30.   diff(T1,T2,Rez).
  31.  
  32.  
  33. ::tree(@,list,list). 
  34. ::foret(@,list).     
  35.  
  36.  
  37. matchtree(tree(Root,Left,Right),tree(Root,L1,R1)):-
  38.   match(Left,L1),
  39.   match(Right,R1).
  40.  
  41.  
  42. const(T:tree(Root),L1,R1)->
  43.   tree(Root,
  44.        cond(Left:project(2,T):==list,
  45.             insforet(L1),
  46.             append(insforet(L1),Left)),
  47.        cond(Right:project(3,T):==list,
  48.             insforet(R1),
  49.             append(insforet(R1),Right))).
  50.  
  51. insforet([])->[].
  52. insforet([foret(2=>X)|T])->
  53.   append(X,insforet(T)).
  54. insforet([H|T])->
  55.   [H|insforet(T)].
  56.  
  57.  
  58. my_apply(Rulename:string,Stk:list):-
  59.   rule(Rulename,Patt,Res),
  60.   match(Patt,Stk),
  61.   write(Rulename,"-->",Res).
  62.  
  63.  
  64.  
  65. %-----Re`gles-----
  66. rule("bidon",
  67.   [F1:foret,X1:tree(a),FA:foret(y),X2:tree(b,[])],
  68.   [F1,const(X2,[X1,FA],[])] ).
  69. %-Ex: my_apply("bidon", [_,_,_,tree(c,[b,c],[]),tree(y),tree(y),tree(c,[],[t,y])] )?
  70.  
  71. rule("det_nom",
  72.   [F1:foret,X1:tree(det),FA:foret(adjq),X2:tree(nom,[])],
  73.   [F1,const(X2,[X1,FA],[])] ).
  74. %-Ex: my_apply("det_nom",[_,_,_,tree(det,[1],[]),tree(adjq,[],[2]),tree(adjq,3=>[3]),tree(nom)])?
  75.  
  76. rule("sujet",
  77.   [F0:foret,X1:tree({nom;pper}),
  78.    X2:tree(verb,[FN:foret(ne),FF:foret({pper;etre;avoir})])
  79.   ],
  80.   [F0,const(X2,[X1],[])] ).
  81. %-Ex: 
  82.  
  83.  
  84. %% signature plus grande:
  85.  
  86. c <| {a;b}.
  87.  
  88. cls:={nom;det;adj;pron;verbe}.
  89. det:={art;nonq}.
  90. adj:={qual}.
  91. qual:={adjq}.
  92. pron:={pper;pdem;pposs;pint}.
  93. verbe:={verb;etre;avoir;aller;ppass;ppres;infi}.
  94.  
  95.  
  96.