在 Lisp 中,#'
和 '
是常见的符号,它们有不同的含义。让我们逐个解释:
1. #'
符号
#'
是 function
符号的简写形式,用于引用一个函数对象。它告诉 Lisp "这是一个函数对象",而不是普通的变量或表达式。
举例:
假设你定义了一个函数 main
:
(defun main ()
(format t "Hello, World!~%"))
要引用这个函数对象,你可以使用 #'main
,它等价于:
(function main)
-
#'main
表示 "引用函数main
"。 -
main
是一个函数名,而#'main
是对这个函数的引用。
在某些情况下,Lisp 需要明确知道你是在引用一个函数,而不是变量或其他对象。这时使用 #'
来指定你是在引用函数。
使用场景:
在 save-application
中使用 #'main
,是为了告诉 Clozure CL,当程序启动时,要调用 main
函数:
(save-application "C:/lisp-projects/hello.exe" :toplevel-function #'main)
这里的 :toplevel-function #'main
意味着,当生成的可执行程序启动时,首先会调用 main
函数。
2. '
符号(单引号)
单引号 '
是 Lisp 中的引用符号,它用于阻止对表达式的求值。被 '
引用的表达式会以原样返回,而不会被 Lisp 解释或执行。
举例:
-
'x
表示符号x
,不会被解释为变量或函数。 -
'(1 2 3)
表示一个列表(1 2 3)
,不会被解释或求值。
相比 #'
,单引号 '
只是告诉 Lisp "不要求值这个表达式"。它通常用于引用符号、列表或其他数据结构。
区别:
-
#'
引用的是一个函数对象。 -
'
引用的是一个普通的符号或数据结构。
3. 举例对比
区别在于:
(defun main () (print "Hello, World!"))
#'main ; 表示引用函数对象 main
'main ; 表示引用符号 main,而不是函数
-
#'main
是对函数对象main
的引用,表示这是一个可以被调用的函数。 -
'main
是对符号main
的引用,本质上只是符号main
,它不会被当作函数。
在 save-application
中,使用 #'main
是因为我们需要传递一个函数对象,而不是符号 main
。
总结
-
#'
是function
的简写,表示这是一个函数引用((function main)
)。 -
'
是引用符号或数据结构的符号,表示 "不要对它进行求值"。
在生成可执行文件的过程中,我们需要传递函数 main
作为启动函数,所以使用了 #'main
来引用这个函数对象。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于