【发布时间】:2016-06-11 01:08:25
【问题描述】:
我正在尝试在我的一个函数中创建一个新队列,但出现错误
define:找到了一个不在顶层的定义
我该如何解决这个问题?我需要在里面的某个地方创建这个队列。我不能只在它之外创建辅助变量。
(define (bfs-graph X G)
(define q (make-queue))
(enqueue! q X)
... some work with queue
)
(define (reachable? X Y G)
(cond
[(empty? (graph-edges G)) #f]
[else (bfs-graph X G)]
)
)
编辑:
好的,这似乎有效。我将尝试更多地使用代码。谢谢。
(define (reachable? X Y G)
(let ((q (make-queue)))
(cond
[(empty? (graph-edges G)) #f]
[else (bfs-graph X G q)]
)
)
)
(define (bfs-graph X G q)
(enqueue! q X)
)
【问题讨论】:
-
您想在每次调用
bfs-graph时创建一个新的、不同的队列,还是在不同的`bfs-graph 调用之间重用同一个队列? -
现在我想起来了,我要递归地重用 bfs-graph。正如您可能已经猜到的那样,我正在尝试查找给定顶点的所有邻居并将它们放入队列中,因此我希望拥有可以附加新值的相同队列。
-
那么最好在过程外部创建队列并将其作为参数从开始计算的过程中传递出去。
-
是的,我想这就足够了。并确保在递归调用中传递队列。
-
您是否将
enqueue!拼错为!enqueue?