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