2017-06-08 30 views
0

據我所知,#' <object>(function <object>)的縮寫。lisp中「#'」的行爲

但我注意到在應用函數中使用#'時行爲不同。

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

然而

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

回答

2

reference描述:

記號#'name可以用作用於(function name)的縮寫。

注意,使用的語法爲#',不'#,這只是一個方式引用符號#,因爲'a相當於(quote a)

所以,你應該使用:

(apply #'+ '(1 2)) 

一般後跟一個字符的字符#具有用於輸入值的特殊含義。例如#\用於讀取字符(如在#空格中),#(用於讀取載體(如在#(1 2 3)中)等。

+0

謝謝! (愚蠢的錯誤在我身邊) – Tanmay

+2

#是默認的閱讀器宏字符,按照慣例。用不同的起始字符可以很容易地做到這一點。 – Sylwester

0

#符號由讀者實現。

如果你想看到的效果,比如,你可以使用這個:

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

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