要实现网格深度优先搜索,我写了这样的函数计划:“预计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回来,它再次运作良好... 这里发生了什么?谢谢!
请编写其他程序的代码,以便我们更好地理解您的问题。 – 2012-02-18 22:16:49
这也有助于了解:您是将所有定义放入单个文件中,还是将它们放在单独的模块中?你是在#lang racket中,还是在其中一种教学语言中?您所描述的问题听起来好像Racket认为它应该使用标准库中的'expand'功能,而不是您定义的那个。我们需要更多的上下文来诊断实际发生的事情。 – dyoo 2012-02-18 23:40:17