您能解释这三个符号proclaimdeclaimdeclare之间的区别吗?

最佳答案

它们是symbols而不是keywords

  • proclaim 为创建全局function命名一个declarations。您应该尽可能使用 declaim
  • declaim 命名了一个macro,以使全局declarations(如 proclaim )在编译时也有效。
  • declare 只是一个symbol(即,它没有命名为functionmacrospecial 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/

    10-11 21:50