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 >
Wrap
Text File
|
1996-06-04
|
2KB
|
58 lines
% FILE. . . . . /_/udir4/_/bonnet/life/boites.lf
% EDIT BY . . . Christophe Bonnet
% ON MACHINE. . Prl303
% STARTED ON. . Tue Jul 21 19:00:36 1992
::box(int,int).
%box represente une boite, le premier argument etant le numero de la boite, et
%le deuxieme le nombre de billes contenues dans la boite.
%
%L'ordre sur les boites correspond a l'ordre de leur numero.
box_less(box(A,@),box(B,@)) :- A < B.
%On a une configuration de depart :
init_bx([box(3,2),box(6,1)|L1:[box(7,9),box(11,4)|L2:[box(18,6),box(34,65)]]],
[L1,L2]).
%Le deuxieme argument est une liste de "pointeurs" vers la place de certaines
%boites, que je veux pouvoir supprimer de la configuration en un temps
%constant, quelques soient les operations effectuees entre temps. Pour cela, on
%utilisera le predicat "del" :
del(L:[@|Tl]) :- L <- Tl.
%Les operations que l'on s'autorise a effectuer sur la configuration de depart
%sont des ajouts ou retraits de billes dans les boites, operations que l'on
%represente par des listes (triees) de boites.
exemple -> [box(3,-1),box(4,5),box(11,-2),box(18,3)].
%le "merge" de deux listes de boites correspond a la combinaison de deux
%operations, ou (ce qui revient au meme, ou presque) a l'application d'une
%operation a la combinaison initiale. Il va de soit que l'on souhaite preserver
%la validite' des coreferences crees par init_bx...
%solution actuelle :
merge(L1,L2) :- merge2(L1,[@|L2]). % Helas !
merge2([],@).
merge2(L1,[@|L2:[]]) :- L2 <- L1.
merge2([A|L1],LP:[U|L2:[B|@]]) :- box_less(A,B),
LP <- [U|L3:[A|L2]],
merge2(L1,L3).
merge2(L1:[A|@],[@|L2:[B|@]]) :- box_less(B,A),
merge2(L1,L2).
merge2([box(Id,A)|L1],[@|L2:[box(Id,B)|@]]) :- B <- A+B,
merge2(L1,L2).
%voir fichier boites.sample