21

ググることはほとんど不可能なので、私の理解は、スライムのソースコードを読んで文脈上の手がかりに限定されています: おそらくそれは Common Lisp のオブジェクトシステムの一部なのでしょうか? 「自分」みたいなもの?

スニペット:

(cond #+#.(swank-backend::sbcl-with-new-stepper-p)

おそらく、これによりググりやすくなるでしょう: ポンド プラス ポンド // ハッシュ プラス ハッシュ記号 // オクトソープ プラス オクトソープ

4

5 に答える 5

19

それはめったに見られません。

#+clim clim:+red+ #-clim mygraphics:+red+

上記は、リーダーがいずれかの赤いシンボルを返すことを意味し、機能のリストに CLIM という名前のシンボルがあるかどうかによって異なります*features*。これは、Common Lisp に組み込まれたメカニズムです。

#.(cl:if (cl:zerop (cl:random 2)) :high :low)

上記もリーダーの仕組みです。読み取り時に計算を行うことができます。ところで。*read-eval*これはセキュリティ上の問題であり、Lisp アプリケーションでは無効にする必要があります。これを制御する変数を参照してください。読み取り時に、READ を使用するリーダーは :HIGH または :LOW をランダムに返します。

この組み合わせ#+#.(FOO) BARは、関数 foo が読み取り時にシンボルを返し、機能リストにこの名前のシンボルがあるかどうか、リーダーによってこのシンボルがチェックされ、存在する*features*場合は、入力の次の項目が読み取られることを意味します。それ以外の場合、次の項目はスキップされます。

この例では、IF は常に :CAPI を返します。

LispWorks では (CAPI は機能リストにあります):

CL-USER 41 > (read-from-string "#+#.(cl:if cl:t :capi :clim) a b")
A
31

SBCLで

* (read-from-string "#+#.(cl:if cl:t :capi :clim) a b")

B
32
于 2011-04-26T06:27:09.120 に答える
15

実際には、 Sharpsign Plusの後にSharpsign Dotが続きます。

于 2011-04-26T04:17:56.613 に答える
4

それらはCommonLispリーダーのマクロ文字です:

Lispリーダーで使用するための特別な目的の構文を定義し、リーダーのマクロ関数によって実装される、1文字または2文字のディスパッチによって導入されたテキスト表記。

リーダーマクロを通常のマクロと混同しないでください。相互に関係はありません。

set-dispatch-macro-character関数を使用して、カスタムリーダーマクロでCommonLisp構文を拡張できます。

于 2011-04-26T06:52:53.327 に答える
0

また、#-foo(code to execute)foo が にない場合にのみコードを実行します*features*

#+#.などに関する情報は、 Common Lisp HyperSpecでも見つけにくいですが、関連する HyperSpec ページは、「Sharpsign マイナス」などでググれば見つかります (Thanks Austin.)。

于 2013-01-01T06:57:44.617 に答える