DFS: Code to Build Answer
Depth-first Search tries operators one at a time; after applying one operator to produce a new state, it calls itself recursively to see if the goal can be reached from that state.
apply op search
state ---------> newstate --- ... ---> Goal
<- (cons op path) <- path = ( ops ) <- ()
If path is a list of ops to get from newstate to a goal, then (cons op path) will get from state to a goal.
(defn search [state]
(if (goal? state)
'() ; no ops needed to get to goal
(if (failure? state)
nil
(let [newstate (op1 state)]
(let [path (search newstate)]
(if path
(cons 'op1 path)
... try another op
)))) ))