gpt4 book ai didi

lisp - 符号和名称不同吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:26 27 4
gpt4 key购买 nike

符号和名称有区别吗? Paul Graham 的 On Lisp 专注于常见的 lisp,有一些讨论似乎暗示了这一点,例如

Since lambda-expressions are also names of functions, they can also appear first in function calls:
((lambda (x) (* x 2) 3)
6

这听起来像是符号是名字,但名字不是符号。但我不明白什么样的 Lisp“对象”符号是/可能是什么。

这也是源自 my question here关于尖引号 (#') 运算符 v. symbol-function。我怀疑这些不同的唯一原因是因为并非所有名称都是符号,但我还没有足够的背景知识来理解这些答案(因此出现了这个问题)。

我还要求对 elisp v. common lisp 进行澄清。我假设这与词法形式有关,直到版本 24(我认为是 24.1)才在 elisp 中引入。

最佳答案

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

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

例如可以写

(defun (setf foo) (...) ...)

这里的(setf foo)是函数名。

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

Common Lisp Hyperspec 词汇表:Function Name .

function name n. 1. (in an environment) A symbol or a list (setf symbol) that is the name of a function in that environment. 2. A symbol or a list (setf symbol).

注意:1984 年的 Common Lisp 版本(在 CLtL1 中发布)确实只有符号作为函数名称。因此,函数名称 的概念并未定义。从符号中检索函数的函数称为 SYMBOL-FUNCTION。 1989 年,ANSI CL 标准化组决定添加 setf 列表作为函数名称。它还引入了函数 FDEFINITION,它类似于 SYMBOL-FUNCTION,但除了符号之外,它还接受其他函数名称。看这里:Issue FUNCTION-NAME .

关于lisp - 符号和名称不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29333679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com