メモメモ。

カンマアットは、「バッククオートによる保護をキャンセル(多くの場合これは評価することと同様)してから外側のカッコを外す」であって、「カッコを外してから評価する」ではないんだね。


(declare (ignore hogehoge))
ってのは、局所変数としてhogehogeを定義したけど実際は使用しないよってことをLispに伝えているようだ。
declareは局所変数の型を指定しているものらしいので、ignore型=使わないよ、ってことなんだろうと思う。
どうやらよく使われる組み合わせであるようなので、この程度は解説したページがあっても良いだろと思った。


let直下にletがあることは意味がある可能性があった。

;これはエラー
(let ((x 10)
      (y x)))

このように、局所変数として定義されたばかりのものを他の局所変数の定義に利用することはletでは出来ない。let*を使うか、letを二重にするかすれば解決できる。

;これらは大丈夫
(let* ((x 10)
       (y x)))

(let ((x 10))
  (let (y x)))

現在わかんないこと:
info(関数かマクロか特別式かSBCL独自のものか何なのかは分からんけど)



現在、SBCLのソースのsetfを解読しています。
SBCLの方は、最近書いた、multiple-value-bindを用いた方法にかなり似ているようなので読みやすいのです。
しかしまあ…処理系によって全然書き方が違うのは興味深いですね。


しかしまあ…処理系によって全然依存関係が違うのは、コードの一部だけを取り出して再現しようとする私にとっては厄介で仕方ないですね。