我寫了下面的語法規則:方案模式匹配
(define-syntax match-rewriter
(syntax-rules()
((_ (patt body) ...)
(λ (x) (match x (patt body) ... (_ x))))))
,如果沒有發現匹配,而不是拋出異常基本上是match-lambda
只不過它返回它的參數。
現在我想寫一個函數let_as_lambda
,它將採用一串源代碼作爲輸入並將let
語句重寫爲新的let_as_lambda
函數。這是我有:
(define let_as_lambda
(match-rewriter (`(let((,<var> ,<val>)) ... ,<expressions>)
`((lambda (,<var> ...) ,<expressions>) ,<val> ...))))
,這顯然是錯誤的,因爲:
(let_as_lambda '(let((x 3)) (+ x 2)))
回報:
'((λ ((x) ...) (+ x 2)) (3) ...)
仍呈現橢圓,並在括號中的 「3」。我相信我的問題是我不瞭解模式匹配中符號`
,.
和,
的正確用法。
如果有人能告訴我正確的方法來做到這一點,將不勝感激。
謝謝。
當!我正在寫我的。 Eli,你太快了。你對關於將quasiquote加上「......」的可行性的評論會使你比我的更好。正如我的學生寫的:> O – 2011-02-24 05:39:58
啊,謝謝,「@」讓世界變得不同。 :-) – Schemer 2011-02-24 06:00:00