2017-06-08 9 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)) 

文字が続く文字#は値を入力するための特別な意味を持っています。例えば、#\は、#\ Spaceのような文字を読むためのもので、#(1 2 3)のようなベクトルを読み取るための#(などです。

+0

ありがとうございました!!! (私の側で愚かな間違い) – Tanmay

+2

#は、慣例により、デフォルトのリーダーマクロ文字です。 1つは、異なる開始文字で同じことを簡単に行うことができます。 – Sylwester

0

# 'の表記は読者によって実装されています。

あなたが効果を確認したい場合は、たとえば、これを使用することができます。

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

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