|
@@ -0,0 +1,41 @@
|
|
|
+% Those are the books:
|
|
|
+book(a).
|
|
|
+book(b).
|
|
|
+book(c).
|
|
|
+book(d).
|
|
|
+book(e).
|
|
|
+book(f).
|
|
|
+
|
|
|
+% This is how 'touching' works:
|
|
|
+touching(X,Y):- touching(Y,X). % touching is symmetric
|
|
|
+touching(p1,p2).
|
|
|
+touching(p2,p3).
|
|
|
+touching(p3,p4).
|
|
|
+touching(p3,p5).
|
|
|
+touching(p3,p6).
|
|
|
+touching(p4,p5).
|
|
|
+touching(p5,p6).
|
|
|
+
|
|
|
+% List all possible positions:
|
|
|
+position(a):- p1,p2,p3,p4,p5,p6.
|
|
|
+position(b):- p1,p2,p3,p4,p5,p6.
|
|
|
+position(c):- p1,p2,p3,p4,p5,p6.
|
|
|
+position(d):- p1,p2,p3,p4,p5,p6.
|
|
|
+position(e):- p1,p2,p3,p4,p5,p6.
|
|
|
+position(f):- p1,p2,p3,p4,p5,p6.
|
|
|
+
|
|
|
+% Every position has one book
|
|
|
+getBook(p1) :- a,b,c,d,e,f.
|
|
|
+getBook(p2) :- a,b,c,d,e,f.
|
|
|
+getBook(p3) :- a,b,c,d,e,f.
|
|
|
+getBook(p4) :- a,b,c,d,e,f.
|
|
|
+getBook(p5) :- a,b,c,d,e,f.
|
|
|
+getBook(p6) :- a,b,c,d,e,f.
|
|
|
+
|
|
|
+% Add your facts:
|
|
|
+not(touching(position(a),position(d))).
|
|
|
+position(e):- p5,p2.
|
|
|
+% C touches exactly two books: eventually something like aggregate_all(count, touching(e,X), Count):-2.
|
|
|
+position(c):- p2, p4,p6.
|
|
|
+touching(position(a),position(f)).
|
|
|
+touching(position(e),position(f)).
|