このページを読んだ後。define-syntax
の代わりに使い方を覚えるのが難しいので、mit-schemeに実装(または少なくとも同等のものを見つけて)しdefine-macro
たいと思います。define-macro
これが私の(問題のある)実装です:
(define-syntax define-macro
(rsc-macro-transformer
(let ((xfmr (lambda (macro-name macro-body)
(list 'define-syntax macro-name
(list 'rsc-macro-transformer
(let ((m-xfmr macro-body))
(lambda (e r)
(apply m-xfmr (cdr e)))))))))
(lambda (e r)
(apply xfmr (cdr e))))))
(define-macro my-when
(lambda (test . branch)
(list 'if test (cons 'begin branch))))
(my-when #t
(begin
(display "True")
(newline)))
そしてREPLは不平を言った:
;The object (lambda (test . branch) (list (quote if) test (cons (quote begin) branch))) is not applicable.
私はスキームに不慣れで、何が悪いのかわかりません。誰かが私を助けてくれますか?