huff-0.1.0.0: examples/BlocksWorld.hs
{-# LANGUAGE QuasiQuotes #-}
module Main where
import Huff
[huff|
domain BlocksWorld {
object Obj = A | B | C | Table
predicate on(Obj,Obj), clear(Obj)
operator MoveTo(b: Obj, x: Obj, y: Obj) {
requires: on(b,x), clear(b), clear(y)
effect: on(b,y), clear(x), !clear(y)
}
operator MoveToTable(b: Obj, x: Obj) {
requires: on(b,x), clear(b)
effect: on(b,Table), clear(x)
}
}
|]
main =
do mb <- findPlan $ blocksWorld [ on A Table, on B Table, on C Table
, clear A, clear B, clear C ]
[ on A B, on B C ]
print mb