2012-02-18 62 views
0

要实现网格深度优先搜索,我写了这样的函数计划:“预计1个参数,给出4”的古怪行为

(define (expand dim node visited obs) 
    (not-in (neighbor dim obs node) visited)) 

功能DFS是

(dfs dim obs visited fringe path goal) 

的只有外观DFS扩大

(expand dim (car fringe) visited obs) 

我使用

(dfs '(5 5) '((2 2) (3 2)) '((2 1)) '((1 1) (3 1)) '((2 1)) '(4 5)) 

暗淡称为DFS是网格的尺寸,OBS是在电网阻塞位置的列表。

当我打电话手动扩大它完美的作品。但是当它在dfs中被调用时,它表示“展开:期望1个参数,给定4:'(5 5)'(1 1)'((2 1))'((2 2)(3 2)( 3 4)(4 4)(5 4))

但是,如果我更改参数的位置展开,例如把OBS作为第二个参数,

(define (expand dim obs node visited) 
    (not-in (neighbor dim obs node) visited)) 

和修改DFS和我的召唤相应的,那么就不会出现错误,一切正常。然后,下次启动DrRacket并将修改后的代码粘贴到其中时,会再次出现相同的错误。如果我换回obs回来,它再次运作良好... 这里发生了什么?谢谢!

+1

请编写其他程序的代码,以便我们更好地理解您的问题。 – 2012-02-18 22:16:49

+0

这也有助于了解:您是将所有定义放入单个文件中,还是将它们放在单独的模块中?你是在#lang racket中,还是在其中一种教学语言中?您所描述的问题听起来好像Racket认为它应该使用标准库中的'expand'功能,而不是您定义的那个。我们需要更多的上下文来诊断实际发生的事情。 – dyoo 2012-02-18 23:40:17

回答

1

expand是一个非常通用的名称,可能在其他地方有一个定义。将你的功能重命名为dfs-expand,看看这是否修复它。

+0

这很可能会解决它,但它避免了解决导致它的问题。 – 2012-02-19 03:13:29

+0

除非导致它的问题是他有两个名为'expand'的函数! ;-) – 2012-02-19 16:40:13

+0

不太可能。看到我的指针:他/他有一个不同的内建问题,仍然没有明确解释他/她在做什么。 – 2012-02-19 17:02:03

1

它看起来像是你在this question中遇到的问题。在那里,expand是已经在Racket中定义的功能,但是编写自己的定义应该仍然可以正常工作。所以就像我在那里说的那样,你应该描述正好你在做什么来首先知道你为什么会遇到这些问题。

相关问题