それはめったに見られません。
#+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