#'main 是什么语法? #? ‘?

在 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​ 来引用这个函数对象。

  • Lisp
    38 引用 • 13 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...