截至2021年,所有常见的lisp特殊功能是什么?

特殊函数之所以得此名,是因为它们不同于宏和普通函数。

就像宏一样,特殊函数评估它们的输入。但与宏不同的是,它们返回要计算的 Lisp 表达式。特殊函数提供了构建 Lisp 的原语,例如赋值、条件和块结构。

1989 年 [1],David S. Touretzky 写道,共有24 个内置的 Common Lisp特殊函数

  1. BLOCK,
  2. CATCH,
  3. COMPILER-LET,
  4. DECLARE,
  5. EVAL-WHEN,
  6. FLET,
  7. FUNCTION,
  8. GO,
  9. IF,
  10. LABELS,
  11. LET,
  12. LET*,
  13. MACROLET,
  14. MULTIPLE-VALUE-CALL,
  15. MULTIPLE-VALUE-PROG1,
  16. PROGN,
  17. PROGV,
  18. QUOTE,
  19. RETURN-FROM,
  20. SETQ,
  21. TAGBODY,
  22. THE,
  23. THROW;
  24. 并且,UNWIND-PROTECT

他还说:

这个列表可能会随着 Common Lisp 标准的未来修订而改变。

这本书在 2014 年有新版本。然而,信息保持不变。即使在 2014 年的书中,文本的开头也与 1989 年的第一版完全一样:

“截至 1989 年中期,24 个内置的 Common Lisp 特殊函数是:......”(第 507 页)。

不确定他们是否仔细研究了这一点,如果他们这样做了,我想他们会将年份更新为“截至2014 年中期......”

因此,中期2021是列表中的任何不同,现在从它是如何在1989年?

资料来源:[1] - COMMON LISP:符号计算的温和介绍

回答

在 Common Lisp 标准(发布于 1994 年)中,没有特殊函数的概念。该标准定义了特殊运算符的概念,并且这些不能是函数。正如 Will Ness 评论的那样,特殊运算符在 Common Lisp HyperSpec(这是从标准派生的 HTML 页面 - 原始标准作为印刷文档和 PDF 文件发布)中列出:3.1.2.1.2.1 Special Forms。这是一个固定列表 -> 标准没有提供给 Common Lisp 用户添加新列表的语言机制。虽然我认为 Common Lisp 的一些实现有一些额外的特殊运算符。

  • 一个形式是一个对象意味着进行评估:一个符号,一个化合物形式或自评估对象。
  • 一个化合物形式:具有一个列表操作者或λ表达式作为第一个元素:一个宏形式,函数形式,一种特殊形式或λ形式
  • 一个特殊形式:的化合物的形式,其中有一个特殊的运算符作为其第一元件
  • 特殊运算符:第 3.1.2.1.2.1 章中列出的符号之一

为什么本书不使用 Common Lisp 标准的术语?也许作者没有意识到这一点,或者认为更新措辞以使用标准措辞太复杂(或费力)——这可能意味着改变文本中的很多东西。

另一个有用的参考是这个 PDF 格式的标准的后期草案:草案提议的 ANSI CL 标准。该草案与已发布的标准内容基本相同,但可以免费获取。Common Lisp HyperSpec的内容也基本相同,只是形式不同。


以上是截至2021年,所有常见的lisp特殊功能是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>