符号和名称是否不同?

dje*_*lin 3 lisp symbols elisp common-lisp lexical-scope

符号和名称是否不同?保罗·格雷厄姆(Paul Graham)的Lisp,侧重于普通的口齿不清,有一些似乎暗示的讨论,例如

由于lambda表达式也是函数的名称,它们也可以首先出现在函数调用中:
((lambda(x)(*x 2)3)
6

这使得听起来像符号是名称,但名称不是符号.但我不明白什么样的Lisp"对象"符号是/可能的.

这也是源于在sharp-quote(#')运算符v.的问题symbol-function.我怀疑这些不同的唯一原因是因为并非所有的名字都是符号,但我还没有足够的背景来理解这些答案(因此这个问题).

我也要求在elisp诉普通lisp中澄清.我假设这与lexical形式有关,直到版本24(我认为24.1)才在elisp中引入.

Rai*_*wig 5

Lambda表达式不是函数的名称.它只是((lambda (...) ...) ...)在Common Lisp中允许的,因为它在标准中被定义为合法语法.

Common Lisp中唯一允许的函数名称是符号和列表(setf symbol).

例如,人们可以写

(defun (setf foo) (...) ...)
Run Code Online (Sandbox Code Playgroud)

(setf foo)是函数名称.

Common Lisp中不存在其他函数名,只有符号和(setf symbol名称.

Common Lisp Hyperspec术语表:函数名称.

函数名 ñ.1.(在环境中)符号或列表(setf符号),它是该环境中函数的名称.2.符号或列表(setf符号).

注意:1984年的Common Lisp版本(在CLtL1中发布)只有符号作为函数名称.因此,没有定义函数名的想法.调用从符号检索函数的函数SYMBOL-FUNCTION.1989年,ANSI CL标准化小组决定将setf列表添加为函数名称.另外还推出了功能FDEFINITION,这就好比SYMBOL-FUNCTION,但也接受其他函数名,除了符号.请参见此处:问题功能名称.