Common Lisp Unbound Variable

时间:2012-03-08 17:38:08

标签: lisp common-lisp clos

是否可以使用未初始化的变量作为函数参数?对于作业,我必须使用CLOS编写语义网络系统,我的教授包括一个测试函数来测试我们的输出,其中一个指定:

(print (def-concept Human))

意味着将参数Human传递给函数def-concept。运行此测试功能时,我无法摆脱错误(在Allegro CL中):

Error: Attempt to take the value of the unbound variable HUMAN'.`

由于这是测试中的第一个函数,因此在此之前不会初始化任何变量。有没有办法绕过传递未初始化的变量作为函数的参数?

提前致谢。

1 个答案:

答案 0 :(得分:4)

在常规Common Lisp函数调用中,不可能将单位化值用作函数参数。 Common Lisp使用急切的评估:在函数调用发生之前,参数表达式被减少到它们的值。

我怀疑你可能并不完全理解家庭作业的结构。

如果def-concept是一个需要值的函数,并且未定义human,则根本无法测试该函数。

也许您需要定义变量human,然后加载包含(print (def-concept human))的文件。

仅仅因为在同一档案中该表格之前没有任何内容并不意味着不可能事先进行评估。可以在该文件之前加载其他文件,也可以在监听器中评估表单。