0
我正在使用匹配lambda來重寫更基本的特定函數。下面是接受表示爲讓*呼叫輸入代碼串,並返回它們作爲轉換成嵌套一元串讓一個例子:模式匹配中遞歸調用的強制評估
(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* ((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))))
我想知道是否有任何方法來強制遞歸調用的評估讓*→nested-unary-let讓輸出字符串只包含嵌套的讓和請求沒有進一步的評估。
謝謝。
非常感謝!事實證明它必須是:,(let *→nested-unary-let'(let *(,@),)) - 但是如果沒有你的建議,我永遠不會得到它。 :-) –
Schemer
2011-02-25 23:09:01
@Schemer:我在''之前加了'.','以允許多於一個;如果只匹配一個,那麼在quasiquoted輸出中也不應該有'.'。 –
2011-02-25 23:11:38