(defun find_route(source destination) (let* ((remaining_nodes (list (make_node source nil 0))) (knowledge (get_world_knowledge)) (solution (breadth_first_search remaining_nodes destination knowledge))) (print_route solution))) ;; assumes that the route is of the form: ;; (total_distance (city1 city2 distance1) (city2 city3 distance2) ... ) (defun print_route (route) (terpri) (princ "distance: ") (if (null route) (progn (princ "infinity") (terpri)) (progn (princ (car route)) (princ " km") (terpri))) (princ "route:") (terpri) (if (null route) (princ "none") (mapcar #'print_segment (cdr route))) (values)) (defun print_segment (segment) (princ (first segment)) (princ " to ") (princ (second segment)) (princ ", ") (princ (third segment)) (princ " km") (terpri)) (defun make_node(city parent distance) (list city parent distance)) (defun node_city (node) (first node)) (defun node_parent (node) (second node)) (defun node_distance (node) (third node))