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

  1. % FILE. . . . . /_/udir4/_/bonnet/life/boites.lf
  2. % EDIT BY . . . Christophe Bonnet
  3. % ON MACHINE. . Prl303
  4. % STARTED ON. . Tue Jul 21 19:00:36 1992
  5.  
  6.  
  7. ::box(int,int).
  8.  
  9. %box represente une boite, le premier argument etant le numero de la boite, et 
  10. %le deuxieme le nombre de billes contenues dans la boite.
  11. %
  12. %L'ordre sur les boites correspond a l'ordre de leur numero.
  13.  
  14. box_less(box(A,@),box(B,@)) :- A  < B.
  15.  
  16. %On a une configuration de depart :
  17.  
  18. init_bx([box(3,2),box(6,1)|L1:[box(7,9),box(11,4)|L2:[box(18,6),box(34,65)]]],
  19.     [L1,L2]).
  20.  
  21. %Le deuxieme argument est une liste de "pointeurs" vers la place de certaines
  22. %boites, que je veux pouvoir supprimer de la configuration en un temps
  23. %constant, quelques soient les operations effectuees entre temps. Pour cela, on
  24. %utilisera le predicat "del" :
  25.  
  26. del(L:[@|Tl]) :- L <- Tl.
  27.  
  28. %Les operations que l'on s'autorise a effectuer sur la configuration de depart
  29. %sont des ajouts ou retraits de billes dans les boites, operations que l'on
  30. %represente par des listes (triees) de boites.
  31.  
  32. exemple -> [box(3,-1),box(4,5),box(11,-2),box(18,3)].
  33.  
  34. %le "merge" de deux listes de boites correspond a la combinaison de deux
  35. %operations, ou (ce qui revient au meme, ou presque) a l'application d'une
  36. %operation a la combinaison initiale. Il va de soit que l'on souhaite preserver
  37. %la validite' des coreferences crees par init_bx...
  38.  
  39.  
  40. %solution actuelle :
  41.  
  42. merge(L1,L2) :- merge2(L1,[@|L2]).  % Helas !
  43.  
  44. merge2([],@).
  45. merge2(L1,[@|L2:[]]) :- L2 <- L1.
  46. merge2([A|L1],LP:[U|L2:[B|@]]) :- box_less(A,B),
  47.                 LP <- [U|L3:[A|L2]],
  48.                 merge2(L1,L3).
  49. merge2(L1:[A|@],[@|L2:[B|@]]) :- box_less(B,A),
  50.                 merge2(L1,L2).
  51. merge2([box(Id,A)|L1],[@|L2:[box(Id,B)|@]]) :- B <- A+B,
  52.                         merge2(L1,L2).
  53.  
  54.  
  55.  
  56.  
  57. %voir fichier boites.sample
  58.