如何模式匹配'letrec'

时间:2011-03-15 03:54:28

标签: scheme pattern-matching syntax-error racket letrec

我正在尝试使用match-lambda对letrec进行匹配调用。在我看来,这种模式:

(match-lambda
  (`(letrec ((,<var> ,<val>) . (,<vars> ,<vals>)) ,<expr> . ,<exprs>)
   `(<match>))

应匹配表单的调用:

(letrec ((<var> <val>) ...) <expr> ...)

但是,当然,这不起作用。

感谢任何建议。

2 个答案:

答案 0 :(得分:1)

我认为您需要使用...中的match-lambda语法:

(match-lambda
  (`(letrec ((,<var> ,<val>) ...) ,<expr> ...)
    body))

答案 1 :(得分:0)

我不确定,但我认为问题可能出在((,<var> ,<val>) . (,<vars> ,<vals>))上。这与((,<var> ,<val>) ,<vars> ,<vals>)相同,这不是您想要的。也许尝试((,<var> ,<val>) . ,<vars-vals>))

之类的东西

我也调查了documentation,似乎letrec不应该是你表达的一部分,你应该使用match-lambda*

尝试

(match-lambda
  (`(((,<var> ,<val>) . ,<vars-vals>) ,<expr> . ,<exprs>)
   `(<match>)))

(当然,我可能错了)