関数型プログラミングの割り当てのために、私はスキームコードをコーヒースクリプトコードに変換するスキームマクロを書いています。Linux Mint 12でguileを使用していて、(use-syntax(ice-9 syncase))をアクティブにしています。
現在、let-syntaxをdefine-syntaxにネストしようとしていますが、予期しない「無効な構文」エラーが発生し続けます。私はスキームの初心者なので、プログラミングの習慣が悪い場合はご容赦ください。:)
私のコード:
(define-syntax coffee
(syntax-rules (define lambda)
; translate define function
((_ (define arg1 arg2))
(begin
(let-syntax ((temp
(syntax-rules ()
((_) (quote-replace-list 'arg1 'arg2))))))
(if (list? 'arg1)
(string-append (coffee (car 'arg1)) " = "
(comma-splice (cdr 'arg1)) " -> "
(coffee temp))
(string-append (coffee 'arg1) " = "
(coffee arg2)))))))
と私の出力:
guile> (load "hw2-retry.scm")
guile> (coffee (define (x y) (+ x y)))
ERROR: invalid syntax (let-syntax ((temp (syntax-rules () ((_)
(quote-replace-list (quote #) (quote #)))))))
ABORT: (misc-error)
このエラーを何度か調べてみたところ、基本的なことを理解していないだけだと思い始めました。私はあなたがdefine-syntaxの中にlet-syntaxをネストできると確信していました。私は何が間違っているのですか?