【发布时间】:2011-07-04 15:31:38
【问题描述】:
我正在使用 match-lambda 根据更基本的函数重写某些函数。下面是一个示例,它采用表示 let* 调用的输入代码的字符串并将它们作为转换为嵌套一元 let 的字符串返回:
(define let*→nested-unary-lets
(match-lambda
(`(let* (()) ,<exprs>)
`(let () ,<exprs>))
(`(let* ((,<var> ,<val>)) ,<exprs>)
`(let ((,<var> ,<val>)) (let () ,<exprs>)))
(`(let* ((,<var> ,<val>) . ,<clauses>) ,<exprs>)
`(let ((,<var> ,<val>)) (let*→nested-unary-lets '(let* (,@<clauses>) ,<exprs>))))))
下面是调用 let*→nested-unary-lets 的示例:
(let*→nested-unary-lets '(let* ((a 1) (b (+ a 1)) (c (+ a b))) (displayln c)))
'(let ((a 1))
(let*→nested-unary-lets
'(let* ((b (+ a 1)) (c (+ a b)))
(displayln c))))
我想知道是否有任何方法可以强制对 let*→nested-unary-lets 的递归调用进行评估,以便输出字符串仅包含嵌套的 let 并且不需要进一步的评估。
谢谢。
【问题讨论】:
标签: recursion scheme pattern-matching racket