2011-12-28 17 views
7

誰でも知っている#+#-演算子の意味は.sbclrcですか?私はマニュアルでそれを見つけることができませんでした。 私はquicklispをインストールした後、私は.sbclrc#-を参照してください。演算子#+および# - .sbclrc

#-quicklisp 
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" 
             (user-homedir-pathname)))) 
    (when (probe-file quicklisp-init) 
    (load quicklisp-init))) 

私もSBCLユーザーマニュアルで#+を参照してください、私はそれらの機能の説明を見つけることができませんでした。個々のモジュールの読み込みに関連するもののように見えます。

SBCLの実装またはCommon Lispの一部ですか?

答えて

6

これらはCommon Lisp READの一部です。考えられるのは、特定の機能(多くの場合、特定のCL実装)が(#+)または(#-)でない限り、テキストを「隠す」という考え方です。概念的及び実践的、彼らは

#ifdef __MSVC12__ 
#ifndef __cplusplus__ 

のようなものに非常によく似ている...など -

これらは、おそらく最も「テキストマクロ」のC/C++のアイデアのようにCLのコンセプトです。彼らは文字通りREADから入ってくるソースコードのビットを隠しているので、それらは決して字句解析されていない - 解釈される - コンパイルされた - 評価される - interned - nadaではない。実行しているCL実装に機能がない/「間違った」実装/何らかのフラグがある場合、それらは単に存在しなくなります。

+0

私はこのためのドキュメントを見つけることができる場所あなたが知っていますか?私は知らない他のリーダー機能があるのだろうかと思っています。 – sudo

+3

一般的に、先頭に#が付いているものは、読者にとって特別なものです。 #の下のCLHSインデックスをhttp://www.lispworks.com/documentation/HyperSpec/Front/X_Mast_9.htmからチェックアウトしてください – BRFennPocock

13

これは、SBCLだけでなく、Common Lispの一般的な機能です。

変数「cl:*features*」は、現在Lispシステムに存在するはずの「機能」のシンボルをリストしています。代表的な機能は、エンディアン、実装、サブシステム、プロセッサ、拡張、Lisp方言などです。

のLispファイルでは表現#+quicklisp(foo)は意味:機能quicklispは機能*features*のリストに存在する場合にのみ、(foo)を読んで実行します。 Lispのファイルで

表現#-quicklisp(foo)は意味:機能quicklispは機能*features*のリストに存在しない場合にのみ、(foo)を読んで実行します。

この機能は、実装固有のコードを他のCommon Lisp実装に隠すか、または表示するためによく使用されます。

は、マニュアルを参照してください: