:- prompt(_, '').
:- use_module(library(readutil)).
% monkey grasps banana
act(state(middle, onbox, middle, hasnot),
grasp,
state(middle, onbox, middle, has) ).
% monkey climbs box
act(state(P, onfloor, P, H),
climb,
state(P, onbox, P, H) ).
% monkey pushes box from P1 to P2
act(state(P1, onfloor, P1, H),
push(P1, P2),
state(P2, onfloor, P2, H) ).
% monkey moves from P1 to P2
act(state(P1, onfloor, B, H),
walk(P1, P2),
state(P2, onfloor, B, H) ).
% define (recursively) how the monkey can get the banana
canget(state(_,_,_,has)).
canget(State1) :- act(State1, _Action, State2), canget(State2).
% define the initial starting condition
go :- canget( state(atdoor, onfloor, atwindow, hasnot) ).
Oi0gc2V0X3Byb2xvZ19mbGFnKHZlcmJvc2Usc2lsZW50KS4KOi0gcHJvbXB0KF8sICcnKS4KOi0gdXNlX21vZHVsZShsaWJyYXJ5KHJlYWR1dGlsKSkuCgoKJSBtb25rZXkgZ3Jhc3BzIGJhbmFuYQphY3Qoc3RhdGUobWlkZGxlLCBvbmJveCwgbWlkZGxlLCBoYXNub3QpLAogICAgZ3Jhc3AsCiAgICBzdGF0ZShtaWRkbGUsIG9uYm94LCBtaWRkbGUsIGhhcykgKS4KCiUgbW9ua2V5IGNsaW1icyBib3gKYWN0KHN0YXRlKFAsIG9uZmxvb3IsIFAsIEgpLAogICAgY2xpbWIsCiAgICBzdGF0ZShQLCBvbmJveCwgICBQLCBIKSApLgoKJSBtb25rZXkgcHVzaGVzIGJveCBmcm9tIFAxIHRvIFAyCmFjdChzdGF0ZShQMSwgb25mbG9vciwgUDEsIEgpLAogICAgcHVzaChQMSwgUDIpLAogICAgc3RhdGUoUDIsIG9uZmxvb3IsIFAyLCBIKSApLgoKJSBtb25rZXkgbW92ZXMgZnJvbSBQMSB0byBQMgphY3Qoc3RhdGUoUDEsIG9uZmxvb3IsIEIsIEgpLAogICAgd2FsayhQMSwgUDIpLAogICAgc3RhdGUoUDIsIG9uZmxvb3IsIEIsIEgpICkuCgolIGRlZmluZSAocmVjdXJzaXZlbHkpIGhvdyB0aGUgbW9ua2V5IGNhbiBnZXQgdGhlIGJhbmFuYQpjYW5nZXQoc3RhdGUoXyxfLF8saGFzKSkuCmNhbmdldChTdGF0ZTEpIDotIGFjdChTdGF0ZTEsIF9BY3Rpb24sIFN0YXRlMiksIGNhbmdldChTdGF0ZTIpLgoKJSBkZWZpbmUgdGhlIGluaXRpYWwgc3RhcnRpbmcgY29uZGl0aW9uCmdvIDotIGNhbmdldCggc3RhdGUoYXRkb29yLCBvbmZsb29yLCBhdHdpbmRvdywgaGFzbm90KSApLgoKCjotIGdvLCB3cml0ZSgic3VjY2VzcyEiKSA7IHdyaXRlKCJmYWlsISIpLgoK