まくろちゃれんじ!setf編(番外編)
今日はネットワークをやろうと思ったものの、なんか本を読んでいたら飽きてしまったのでその後はずっとsetf関連です。
まとめた情報を書くのにはもう少し時間が必要なので、今のところはちょっとだけ情報発信。メモしてた内容をそのままコピペです。
この式ではCommon Lisp規格に無い、処理系の内部関数を参照していることのほうが多い。それは普段はsetfによって隠蔽されているが、どこかになければならないものだ。それに関してはすべて実装依存なので、コードに可搬性を持たせたいならget-setf-methodの返した関数を使うべきで、system:set-arefのような関数を直接参照してはならない。
onLisp 第12章 汎関数 より。
http://www.shido.info/lisp/macro4.html
get-setf-methodは古くて、現在はget-setf-expansionが使われるらしい。
ここのコードによると、get-setf-method及びget-setf-expansionの関係とは
;;; should be defined in siteinit.l or .xyzzy (defmacro get-setf-expansion (&rest argvs) ; (14) `(get-setf-method ,@argvs))
というものらしい。
・カンマは逆クオートによる評価保護の効果を打ち消す。つまりカンマの付いたS式は逆クオート内であっても評価される。
・カンマ・アットはカンマと同様の効果だが、リストの外側のカッコを取り除くという効果がある。
・mapcarの引数1は適用する関数。引数2以降はその関数への引数として使われる。
(mapcar #'list '(1 2 3 4 5) '(2 4 6 8 10)) -> ((1 2) (2 4) (3 6) (4 8) (5 10))
今、この式を地の文に書いたら、ダブル半角カッコと判断されて、はてな記法により注釈扱いになってしまった。はてな…恐ろしい子…!!