Error handling 常见Lisp错误:未声明的自由变量

Error handling 常见Lisp错误:未声明的自由变量,error-handling,lisp,common-lisp,Error Handling,Lisp,Common Lisp,我有一个我正试图编译的函数,但在过去的30分钟里,我一直在绞尽脑汁试图弄清楚为什么这段代码给了我一个未声明的自由变量错误。我正在使用Emacs,无法解释为什么会出现此错误 (定义所有(res diff) (出租*((v-列表(空白单元列表)) (c-清单(空白单位清单) (完整填写c-list v-list res(总res)差异) (格式t) “电阻为~S~%电压为~S~%电流为~S~%” res v-list c-list) 空白单元列表,完全填充,总分辨率都是我自定义的函数 我很确定这个

我有一个我正试图编译的函数,但在过去的30分钟里,我一直在绞尽脑汁试图弄清楚为什么这段代码给了我一个
未声明的自由变量
错误。我正在使用Emacs,无法解释为什么会出现此错误

(定义所有(res diff)
(出租*((v-列表(空白单元列表))
(c-清单(空白单位清单)
(完整填写c-list v-list res(总res)差异)
(格式t)
“电阻为~S~%电压为~S~%电流为~S~%”
res v-list c-list)
空白单元列表
完全填充
总分辨率
都是我自定义的函数

我很确定这个错误与我如何构造代码有关,但正如我之前所说的,我不知道是什么


从Emacs复制:

3 compiler notes:

CircuitFunctions.lisp:61:64:
  warning: Undeclared free variable RES

CircuitFunctions.lisp:61:70:
  warning: Undeclared free variable V-LIST

CircuitFunctions.lisp:61:81:
  warning: Undeclared free variable C-LIST

Compilation failed.
如果您使用的是SLIME(在使用lispbox时,看起来您可能是这样),那么应该有一种方法可以从编译器注释转到它在源代码中发生的位置。我不记得确切的按键组合(如果你在我面前放一个带slime的emacs,我可能会按下它,但不幸的是,这并不意味着我有意识地记得它是什么)。检查“粘液下一个错误”的键可能会有所帮助,并且粘液菜单中可能有某些内容)


通过查看编译器注释中的行号(我认为:61:64等是源代码行和列),实际发出的错误与粘贴的代码完全不匹配。我看不到任何一行的
v-list
res
c-list
都是按这个顺序排列的。不过,这可能是由于宏扩展造成的(作为旁注,它看起来好像
complete fill
要么是一个宏,要么破坏性地修改了它的两个参数)。

根据wvxvw的建议,我的代码可能在某个地方缺少一个参数,我用
C-M-f
滚动了我的文件。它顺利通过了,现在我开始放弃了。最后,为了确保,我复制了这个问题的代码,并用这里的函数替换了我以前的函数。不知怎么的,它现在起作用了。我不知道是什么导致了这个问题,但现在它工作正常了。谢谢大家的意见

显示确切的错误?如果我将
完全填充
空白单元列表
总分辨率
的空定义放在一个文件中,并将上述代码添加到
几乎所有
,我可以对其进行字节编译,而不会出现任何错误。这真的很奇怪……您使用的是哪个平台和版本的Emacs?另外:如果这些警告显示的是行:列编号,我看不出它们如何与您显示的函数相匹配。我已经编译了
complete fill
,该方法可以工作,但此方法无法。我实际上使用的是lispbox,我相信我使用的是common lisp。实际上,我更改了测试错误的顺序,但我忘记了相应地修改代码。变量的顺序与误差几乎没有关系。为了清晰起见,我编辑了这个问题以反映一致性。