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中引入.
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,但也接受其他函数名,除了符号.请参见此处:问题功能名称.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |