Lisp 方案:“;需要1个参数,给定4“;古怪的行为

Lisp 方案:“;需要1个参数,给定4“;古怪的行为,lisp,scheme,racket,Lisp,Scheme,Racket,为了在网格中实现深度优先搜索,我编写了如下函数 (define (expand dim node visited obs) (not-in (neighbor dim obs node) visited)) 函数dfs是 (dfs dim obs visited fringe path goal) dfs中expand的唯一外观是 我用手机打电话给dfs dim是网格的维度,obs是网格中阻塞位置的列表 当我手动调用expand时,它工作得非常好。但是当在dfs中调用它时,它会说“扩展:

为了在网格中实现深度优先搜索,我编写了如下函数

(define (expand dim node visited obs)
  (not-in (neighbor dim obs node) visited))
函数dfs是

(dfs dim obs visited fringe path goal)
dfs中expand的唯一外观是

我用手机打电话给dfs

dim是网格的维度,obs是网格中阻塞位置的列表

当我手动调用expand时,它工作得非常好。但是当在dfs中调用它时,它会说“扩展:期望1个参数,给定4:'(55)'(11)'((21))'((22)(32)(34)(44)(54))”

但是,如果我更改expand参数的位置,例如将obs作为第二个参数

(define (expand dim obs node visited)
  (not-in (neighbor dim obs node) visited))
并相应地修改dfs和我的呼叫,这样就不会出现错误,一切都正常。然后,下次我启动DrRacket并将修改后的代码粘贴到其中时,同样的错误再次出现。如果我把obs换回来,它又能正常工作了。。。
这里到底发生了什么?!谢谢

expand
是一个非常通用的名称,可能在其他地方有定义。将您的函数重命名为dfs expand,看看这是否解决了它。

看起来这与您在中遇到的问题相同。就像这里的情况一样,
expand
是一个已经在Racket中定义的函数,但是编写自己的定义仍然可以很好地工作。因此,正如我在这里所说的,您应该准确地描述您正在做什么,以便首先了解出现这些问题的原因。

请为其他过程编写代码,以便我们更好地理解您的问题。了解以下信息也会有所帮助:您是将所有定义放在一个文件中,还是将它们放在单独的模块中?你是用英语还是用一种教学语言?您描述的问题听起来好像Racket认为它应该使用标准库中的
expand
函数,而不是您定义的函数。我们需要更多的上下文来诊断实际发生的情况。这很可能会修复它,但它会避免解决导致它的问题。除非导致它的问题是他有两个名为
expand
!;-)的函数不大可能发生的看我的指针:他/她在不同的内置设备上有相同的问题,但仍然没有准确解释他/她在做什么。我仍然不知道问题和解决方案是什么。原作者接受了答案,但在阅读了条目后,我仍然不知道刚才发生了什么。如果OP能解释刚才发生了什么,这将对遇到类似情况的堆栈溢出上的其他人非常有帮助。
(dfs '(5 5) '((2 2) (3 2)) '((2 1)) '((1 1) (3 1)) '((2 1)) '(4 5))
(define (expand dim obs node visited)
  (not-in (neighbor dim obs node) visited))