(defun best-first (graph start goal) (best-first-aux graph start goal (list (list start)))) (defun best-first-aux (graph start goal path-queue) (let ((path (first path-queue))) (cond ((null path-queue) nil) ((node-equal goal (first path)) (reverse path)) (t (best-first-aux graph start goal (sort (append (new-paths path graph) (rest path-queue)) #'(lambda (p1 p2) (closerp p1 p2 goal))))))))
> (best-first *graph1* 's 'f) (s a b e f) > (best-first *graph1* 'f 's) (f e d s)