/* Shoe problem (planning) in Picat. Inspired by http://www.idi.ntnu.no/emner/tdt4136/PRO/shoeson.txt Attributed to AIMA 2nd edition, Fig 11.6 This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ % import util. import gps_utils. main => go. go => Init = $[[start]], Final = $[[finish]], cl_facts($[final2(Final)]), gps_best_plan(Init), nl. final(L) => final2(Final2), pre(L,Final2), writeln(final=L). action(From,To,Move,Cost) ?=> pre(From,$[[rightshoe_on],[leftshoe_on]]), Move = [finish], To = From.add([[finish]]), Cost = 1. action(From,To,Move,Cost) ?=> pre(From,$[[rightsock_on]]), Move = [rightshoe], To = From.add($[[rightshoe_on]]), Cost = 1. action(From,To,Move,Cost) ?=> % pre(From,[[]]), Move = [rightsock], To = From.add($[[rightsock_on]]), Cost = 1. action(From,To,Move,Cost) ?=> pre(From,$[[leftsock_on]]), Move = [leftshoe], To = From.add($[[leftshoe_on]]), Cost = 1. action(From,To,Move,Cost) => % pre(From,[[]]), Move = [leftsock], To = From.add($[[leftsock_on]]), Cost = 1.