:- use_module(library(clpfd)). /* Questo programma implementa il planner con vincoli sul dominio Rocket con 2 posizioni, due carichi e 1 rocket. I nomi delle variabili corrispondono alle proposizioni o azioni del dominio. Ad es. Ato1p1 rappresenta la proposizione at(o1,p1). I nomi delle variabili che iniziano con N rappresentano le propsizioni al nuovo livello creato dalla extend */ extend([Ato1p1,Ato1p2,Ato2p1,Ato2p2,Atrp1,Atrp2,Ino1r,Ino2r], [Loadrp1o1,Loadrp1o2,Loadrp2o1,Loadrp2o2, Unloadrp1o1,Unloadrp1o2,Unloadrp2o1, Unloadrp2o2,Moverp1p2,Moverp2p1, PerAto1p1,PerAto1p2,PerAto2p1,PerAto2p2, PerAtrp1,PerAtrp2,PerIno1r,PerIno2r], [NAto1p1,NAto1p2,NAto2p1,NAto2p2,NAtrp1,NAtrp2,NIno1r,NIno2r]):- domain([Ato1p1,Ato1p2,Ato2p1,Ato2p2,Atrp1,Atrp2,Ino1r,Ino2r],0,1), domain([Loadrp1o1,Loadrp1o2,Loadrp2o1,Loadrp2o2, Unloadrp1o1,Unloadrp1o2,Unloadrp2o1, Unloadrp2o2,Moverp1p2,Moverp2p1, PerAto1p1,PerAto1p2,PerAto2p1,PerAto2p2,PerAtrp1, PerAtrp2,PerIno1r,PerIno2r],0,1), domain([NAto1p1,NAto1p2,NAto2p1,NAto2p2,NAtrp1,NAtrp2,NIno1r,NIno2r],0,1), % effetti add e delete delle azioni load e unload Loadrp1o1 #=> NIno1r, Loadrp1o1 #=> #\ NAto1p1, Loadrp1o2 #=> NIno2r, Loadrp1o2 #=> #\ NAto2p1, Loadrp2o1 #=> NIno1r, Loadrp2o1 #=> #\ NAto1p2, Loadrp2o2 #=> NIno2r, Loadrp2o2 #=> #\ NAto2p2, Unloadrp1o1 #=> #\ NIno1r, Unloadrp1o1 #=> NAto1p1, Unloadrp1o2 #=> #\ NIno2r, Unloadrp1o2 #=> NAto2p1, Unloadrp2o1 #=> #\ NIno1r, Unloadrp2o1 #=> NAto1p2, Unloadrp2o2 #=> #\ NIno2r, Unloadrp2o2 #=> NAto2p2, ....... ....... .......