私は、Scheme のマクロ システムがどのように機能するかを学んでおり、自分のコードをより JavaScript らしく見せようとしています。function
というわけでマクロから始めようと思います。これは、関数定義を次のように表示する方法です。
(function id (x) x)
次のように展開する必要があります。
(define (id x) x)
そこで、次のようにマクロを書きます。
(define-syntax function
(lambda (name args . body)
`(define (,name ,@args) ,@body)))
ただし、それを使用すると、次のエラーが発生します(チキンスキームで):
Error: during expansion of (define ...) - in `define' - lambda-list expected: (define ((function id (x) x) . #<procedure (rename sym1348)>) #<procedure (compare s11400 s21401)>)
Call history:
<syntax> (function id (x) x)
<eval> (##sys#cons (##core#quote define) (##sys#cons (##sys#cons name args) body))
<eval> (##sys#cons (##sys#cons name args) body)
<eval> (##sys#cons name args) <--
どこが間違っていますか?さらに、プログラムを自分でデバッグできるようにするには、このようなエラー メッセージをどのように読むのですか?