Для функционального программирования я пишу макрос схемы, который переводит код схемы в код coffeescript.Я использую guile в Linux Mint 12 и имею (use-syntax (syn-ice-9 syncase)) active.
В настоящее время я пытаюсь вложить let-синтаксис в 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)
После нескольких попыток исследовать эту ошибку, я начинаю думать, что япросто не понимая что-то фундаментальное.Я был уверен, что вы можете вложить let-синтаксис в define-синтаксис.Что я делаю не так?