Syntax 为什么要把#';在某些情况下,使用Lisp?

Syntax 为什么要把#';在某些情况下,使用Lisp?,syntax,lisp,Syntax,Lisp,可能重复: 我正在学习lisp,但有一件事我不明白,为什么必须使用#'。如果存在具有特定名称的函数,为什么lisp会认为它是一个变量? 例: 读取语法 #'X 意思和 (FUNCTION X) (FUNCTION X)的大致意思是“解析函数名称空间中的符号X”。如果没有此选项,X将作为变量进行计算。函数和变量在Common Lisp中位于单独的名称空间中。这是一条规则 至于这个问题,为什么Lisp会认为它是一个变量?换一种说法:既然有两个名称空间,为什么Lisp不能在没有歧义的情况下自动返

可能重复:

我正在学习lisp,但有一件事我不明白,为什么必须使用#'。如果存在具有特定名称的函数,为什么lisp会认为它是一个变量? 例:

读取语法

#'X
意思和

(FUNCTION X)
(FUNCTION X)的大致意思是“解析函数名称空间中的符号X”。如果没有此选项,X将作为变量进行计算。函数和变量在Common Lisp中位于单独的名称空间中。这是一条规则

至于这个问题,为什么Lisp会认为它是一个变量?换一种说法:既然有两个名称空间,为什么Lisp不能在没有歧义的情况下自动返回其中一个呢?原因是,与Lisp-1或Lisp-2相比,这将是一种黑客行为,比两者都糟糕。Lisp-1和Lisp-2是在Lisp文化中使用的词,用于指具有一个变量名称空间和两个变量名称空间的方言

如果你想更多地了解这样或那样做的利弊,请参阅肯特·皮特曼(Kent Pitman)和理查德·加布里埃尔(Richard Gabriel)[功能单元和价值单元分离的技术问题]的这篇论文


顺便说一下:您可以使用“FUNC”或(QUOTE FUNC)来代替:(如果不是“evenp”,则删除…)。这是一种非常晚的绑定机制,通过符号进行绑定,不适用于词汇功能。它可能不会很有效地编译。通过“FUNC”调用总是需要通过符号进行查找,而#”FUNC(至少在某些重要情况下)可以进行优化。

某些Lisp,如Common Lisp,需要这样做。其他人,如Scheme,则不然


您需要这样做,因为您使用的Lisp有一个单独的名称空间用于函数和“普通”变量。如果您省略了
#'
,那么符号
evenp
将被解释为是指“正常”(非功能)名称空间。

感谢您的快速响应。我不知道lisp是这样分开的,至少在CommonLisp中是这样。非常感谢您的回复。这个例子来自我正在使用的那本书,所以我不会在我的代码中使用它,但是我很感激你的建议。这已经被回答过了:我道歉。我应该删除我的列表吗?
(FUNCTION X)