(define-syntax my-class
(syntax-rules ()
[(my-class <class-name> (<attr> ...)
(method (bigger-x other) (> x (other 'x))))
(define (<class-name> <attr> ...)
(lambda (msg)
(cond [(equal? msg (quote <attr>)) <attr>] ...
[(equal? msg 'bigger-x) (lambda (other) (> x (other 'x)))]
[else "Unrecognized message!"])))]))
これは良いテンプレートではありません。しかし、 の構文を説明するのには適していますdefine-syntax
。4行目にメソッドが1つしかない理由がわかりません。quote <attr>
式の中の[(equal? msg (quote <attr>)) <attr>]
もメソッドではありませんか? それらの構造は非常に似ています。