我在打印所有可能的路径时遇到了问题。目前我只能打印出一个路径,如果( path -demo "J“"I"),程序将显示这个错误mcdr:期望类型为<mutable-pair>的参数;给定#f
(define net
'(("A" "B")
("B" "A" "C")
("C" "B" "D")
("D" "C" "E" "F")
("F" "I" "D")
("I" "F")
("E" "D" "J")
("J" "E" "G")
("G" "J" "H")))
(define (path-demo start finish)
(for-each (lambda (x) (display x) (display " "))
(cons "Route:" (shortest-path start finish net))))
(define (shortest-path start end net)
(bfs end (list (list start)) net))
;; Breadth-first search
(define (bfs end queue net)
(display queue) (newline) (newline) ; entertainment
(if (null? queue)
'()
(let ((path (car queue)))
(let ((node (car path)))
(if (equal? node end) ;; Graham used CL eql
(reverse path)
(bfs end
(append (cdr queue)
(new-paths path node net))
net))))))
(define (new-paths path node net)
(map (lambda (n) (cons n path)) (cdr (assoc node net))))
;;
(path-demo "J" "I")发布于 2011-10-22 20:12:20
在您对net的定义中,您忘记了列出H所连接的节点。
当错误发生时,node和net具有以下值:
node: H
net: ((A B) (B A C) (C B D) (D C E F) (F I D) (I F) (E D J)
(J E G) (G J H)))因此
(assoc node net))将返回#f,因为H在net中没有关联。这会导致来自cdr的错误:
cdr: expects argument of type <pair>; given #f发布于 2011-10-18 17:31:14
下面的代码很可能返回#f
(cdr (assoc node net))关于注释(用于格式化):
(define (new-paths path node net)
(write node)
(newline)
(map (lambda (n) (cons n path)) (cdr (assoc node net))))https://stackoverflow.com/questions/7805005
复制相似问题