10

#+と の#-演算子の意味を知っている人はい.sbclrcますか? マニュアルでは見つけられませんでした。私はquicklispをインストール#-した後、私は見る:.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 の一部ですか?

4

2 に答える 2

21

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

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

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

Lisp ファイルでは、この式は次のことを意味します: featureが features のリストに存在しない場合にのみ#-quicklisp(foo)読み取りと実行を行います。(foo)quicklisp*features*

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

ドキュメントを参照してください。

典型的な拡張機能は、機能ケースリーダー マクロです。

于 2011-12-28T08:53:11.340 に答える
8

これらは Common Lisp READer の一部です。特定の機能 (多くの場合、特定の CL 実装) が利用可能 ( #+) または利用不可 ( #-) でない限り、テキストを「隠す」という考え方です。

これらはおそらく「テキスト マクロ」の C/C++ の考え方に最も似ている CL の概念です。概念的にも実用的にも、次のようなものに非常に似ています

 #ifdef __MSVC12__
 #ifndef __cplusplus__

...など。それらは文字通り、入ってくるコースコードのビットをREADer から隠します。実行しているCL実装に機能がない場合/「間違った」実装である場合/フラグが何であれ、それらは単に存在しなくなります。

于 2011-12-28T04:08:43.803 に答える