lisp中“#”的行为

时间:2017-06-08 06:50:53

标签: lisp common-lisp

据我所知#' <object>(function <object>)的缩写。

但是我在应用函数中使用#'时注意到了不同的行为。

实施例

(apply '+ '(1 2)) => Works and give 3
(apply (function +) '(1 2 ) ) => 3 

然而

(apply '# '(1 2)) => Err!! 

2 个答案:

答案 0 :(得分:2)

reference

中所述
  

符号#'name可用作(function name)的缩写。

请注意,使用的语法是#',而不是'#,这只是引用符号#的一种方式,因为'a等同于(quote a) }。

所以你应该使用:

(apply #'+ '(1 2))

通常,后跟字符的字符#对于输入值具有特殊含义。例如,#\用于读取字符(如#\ Space),#(用于读取向量,(如#(1 2 3))等。

答案 1 :(得分:0)

#'符号由读者实现。

如果你想看到效果,你可以使用它:

CL-USER 1 > (read-from-string "#'+")
(FUNCTION +)
3

CL-USER 2 > '#'+
(FUNCTION +)