[英]Dijkstra algorithm on scheme
我已经创建了Dijkstra算法正常工作所需的几乎所有过程,但我在最短路径过程中遇到了一些问题,我在纸上写了它,但无法使其在方案中起作用
(define (shortestpath origin destiny graph)
(define (update x)
(begin
(set! new-dist (+ (dist-between n x graph)
(dist-info-node (get-info-node i n))))
(when (< new-dist (dist-info-node (get-info-node i v)))
(update-previous-dist-node i v new-dist n))))
上面是主要过程,这使我在第四行出现错误
(define (get-info-node i n)
(define (get-info-node-aux i n cont)
(if (equal? n (vector-ref (no-info-no i) cont))
(vector-ref i cont)
(get-info-node-aux i n (+ cont 1))))
(get-info-node-aux i n 0))
(define (dist-info-node i)
(vector-ref i 1))
(define new-dist 0)
我得到的错误是第4行上的“展开:模块中的未绑定标识符:i”
(define (update-previous-dist-node! i n d a)
(define (update-previous-dist-node!-aux i n d a cont)
(if (equal? n (vector-ref (no-info-no i) cont))
(begin
(modify-dist! (vector-ref i cont) d)
(modify-previous! (vector-ref i cont) a))
(update-previous-dist-node!-aux i n d a (+ cont 1))))
(update-previous-dist-node!-aux i n d a 0))
所有程序均已定义,但主要程序无法正常工作。 这是先写在纸上的,我已经尝试了一切,但我一定想念一些东西
在我看来,您好像已将程序构造为在一个较大的内部定义的许多小功能一样。 这是一个坏主意。 无法独立测试帮助程序功能的优势(内部过程可以引用起点,目的地和图形)超过了优势。 如果要调试此功能,我将:
内部函数更新中唯一绑定的变量是x。 外部函数最短路径中绑定的唯一变量是原点,目的地和图形。 您收到错误消息,因为我不受约束。 n或v都不是。您需要将i,n和v传递给外部函数,或者将它们定义为全局变量,或者在函数内部使用let绑定它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.