对于函数式编程任务,我正在编写一个将方案代码转换为咖啡脚本代码的方案宏。我在 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)
经过几次尝试研究这个错误之后,我开始认为我只是不理解一些基本的东西。我确信你可以在定义语法中嵌套一个 let 语法。我究竟做错了什么?