Common Lisp关键字列表

时间:2016-09-18 17:03:41

标签: lisp common-lisp

我在哪里可以找到常见Lisp关键字的列表,这是Common Lisp中使用的保留字列表,例如ash,setf等等。如果列表具有关键字的用法,那将是很好的,我只能找到遍布网络的示例程序中散布的一些关键字。 我不能搜索关键字,除非我已经知道关键字,我不能 知道关键字,除非它在某个地方的列表中。

由于

3 个答案:

答案 0 :(得分:8)

如果用关键字表示语言定义的运算符,函数和宏,则可以通过执行以下操作获取这些符号的列表:

(let (result) 
  (do-external-symbols (s :common-lisp) 
    (push s result)) 
  (sort result #'string<))

(我不会在这里显示978个符号的完整结果列表)。您可以在CLHS中了解每个内容,特别是查看symbol index

答案 1 :(得分:2)

@Dirk是对的 - 枚举Common-Lisp包中的符号是回答实际问题的最直接方式。

您还可以使用(除其他事项)apropos“搜索”符号,但对于像ashsetf这样的时髦“遗留”符号,您可能永远不会猜到该名称。希望您早期检查documentationdescribe的使用情况。

假设您正在使用某种IDE,例如Emacs + Slime,您还可以使用Inspector检查Package。例如,来自(swank:inspect-in-emacs 'common-lisp)窗口的*slime-repl,或从菜单中选择SLIME→Debugging→Inspect。你会得到类似的东西:

#<SYMBOL {100F56698F}>
--------------------
Its name is: "COMMON-LISP"
It is unbound.
It has no function value.
It is internal to the package: COMMON-LISP-USER [export] [unintern]
Property list: NIL
It names the package: #<PACKAGE "COMMON-LISP">

点击#<Package…>链接查看其信息;应该有该包中所有符号的超链接。不同的IDE可能以自己的方式呈现信息,但其中大部分与上述非常相似。

答案 2 :(得分:2)

作为旁注,Common Lisp中的“keyword”指的是与其他语言不同的东西 - 关键字包中的符号。你可以发现它们,因为它们以冒号开头。一般来说,它们与C中的枚举类似,它们是一个独特但不重要的价值的名称,所以你可以便宜地测试它们。

Common Lisp中的符号用于很多事情,但它们的基本思想是它们是表示其他语言的实际标识符的数据类型,例如变量的名称(与其内容相对)。在Common Lisp中,要运行的代码经历两个阶段 - 读取,将程序文本转换为数据结构(并使用符号表示标识符)和评估,实际运行存储在数据结构中的程序。当求值程序遇到符号时,它会查找由该符号命名的变量的值。然而,关键字有一个有趣的属性 - 它们是自我评估,当评估者遇到它们时它不会查找它们的“值”,它只保留原始符号对象。将此与读者跟踪所有先前读取的符号这一事实相结合,以便当它第二次读取标识符时它只返回现有的符号对象,您具有与前面提到的枚举相同的效果,即命名的唯一值那个试试的便宜。关键字在lisp中几乎可以在任何地方使用,你想为某些东西命名 - 哈希表中的键(虽然你可以使用任何比较相同的东西,关键字很方便),当你想明确地命名你的参数时'传递给一个功能等。