您能解释这三个符号proclaim
,declaim
和declare
之间的区别吗?
最佳答案
proclaim
为创建全局function命名一个declarations。您应该尽可能使用 declaim
。 declaim
命名了一个macro,以使全局declarations(如 proclaim
)在编译时也有效。 declare
只是一个symbol(即,它没有命名为function,macro或special operator),用于在某些形式的开头创建本地declarations(您可以将其视为这些形式的语法元素)。 因此,前两个影响global environment,最后一个影响local。
declaim
比 proclaim
更可取,因为它对compilation environment具有立竿见影的效果:也就是说,如果您的代码是
(proclaim '(special *x*))
(defun foo () (print *x*))
编译器会抱怨
foo
读取了未知的特殊变量*x*
,而(declaim (special *x*))
(defun foo () (print *x*))
不会引起任何警告。
PS 。如果您想知道为什么CL甚至有
proclaim
:首先,从历史上讲,它在 declaim
之前就存在了,其次, proclaim
在宏中更简单,更有用。关于lisp - 宣告,宣告,宣告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14813801/