まくろちゃれんじ!setf編(第五話半)
前回のコードはletが二重になっている。これは私には少し変だなーと感じられた。だってさ、letでしたいことって局所変数を定義することだけでしょ?ならlet直下にletがあることには意味はない。一つのletで済むはずだから。
ならやってみろ、おうやってみようじゃないか、というノリで改造計画を立てて、5分くらいで僅かな改造版が出来ました。
二つのletの引数をappendによって一つリストに結合させたらこうなりました。
↓改造前
(defmacro my-setf (place obj) (multiple-value-bind (vars argvs val setter accessor) (get-setf-method place) `(let ,(mapcar #'list vars argvs) (let ((,@val ,obj)) ,setter))))
↓改造後
(defmacro my-setf (place obj) (multiple-value-bind (vars argvs val setter accessor) (get-setf-method place) `(let ,(append (mapcar #'list vars argvs) `((,@val ,obj))) ,setter)))
結局カッコの厚さは同じになっているので、どっちの方が良いというわけでもない。むしろ改造版の方が見栄えが悪いという可能性もあるので、「改造」という言葉を使っています。
眠い。ねようかなあ。