第4回 慢性的CL勉強会[予習2]

THE POWER OF LISP MACROS
を読み終わったので適当にまとめておきます。
*全体として*
難易度は低めで、ソースコードが多いので、
英語が苦手な私でも結構読みやすかったです。
ただ、本当にソースだけが書いてあって、
その実行結果などが書いてなかったりするので、
少々不親切な感じはしました。
*疑問など*

(format t "Test ~A ~:[FAILED~;passed~].~%"
',name (progn ,@body))

formatが分かりません><

,@(when condition
`((,condition () (format t "Test ~A passed.~%"
',name))))

,@を使ってますが、内側はかならず1要素のリストなので、

,(when condition
`(,condition () (format t "Test ~A passed.~%"
',name)))

では駄目なんでしょうか。

`(format t " ~(~A~)~:[=\"~A\"~;~]"
',key (eq ,value t) ,value)

やっぱりformatが分かりません。

(define-compiler-macro add-vat (amount &key (tax-rate .19))
`(add-vat% ,amount ,tax-rate))

define-compiler-macroって何?

;;; 10. Don't try this at home
;;; --------------------------
;;;
;;; Macros for black belts
;;; - "On Lisp" 
;;; - Screamer 
;;; - Series 
;;; - Iterate 

家で勉強すると体に悪いんですね。分かります。
「black belts = 黒帯 = 上級者向け」ということでしょうか。
難しいから無理するなよってことですかね。
*感心したところ*

(defun new-double-quote-reader (stream macro-char)
(declare (ignore macro-char))
(with-output-to-string (out)
(loop for char = (read-char stream t nil t)
while (char/= char #\")
do (write-char
(cond ((char= char #\\)
(let ((next-char (read-char stream t nil t)))
(case next-char
(#\t #\Tab)
(#\n #\Newline)
(otherwise next-char))))
(t char))
out))))
(set-macro-character #\" 'new-double-quote-reader)

リーダーマクロはかっこよすぎると思います。

単純なマクロはすぐに分かるんですけど、バッククォートが入れ子になって、
「,’,hoge」とか「,@,foo」とかが出てくると少し理解に時間が掛かります。
こういうのはやっぱしソースを沢山見たり書いたりして慣れるしかないんでしょうかね。

Leave a Reply