Syntax 方案:匹配lambda语法错误

Syntax 方案:匹配lambda语法错误,syntax,scheme,pattern-matching,racket,Syntax,Scheme,Pattern Matching,Racket,我正在编写一个函数注释,它经常使用match lambda和递归调用来注释。以下是其中一种模式和匹配: (`(,<param> . ,<params> (lambda (,<args>) ,<stmt> . ,<stmts>)) `(CLOSURE ENV ,(append (append `(,<param>) `(,<params>))`(,<args>)) (lambda (ENV) ,(ma

我正在编写一个函数注释,它经常使用match lambda和递归调用来注释。以下是其中一种模式和匹配:

(`(,<param> . ,<params> (lambda (,<args>) ,<stmt> . ,<stmts>))
 `(CLOSURE ENV ,(append (append `(,<param>) `(,<params>))`(,<args>)) (lambda (ENV) ,(map annotate `(,<stmt> . ,<stmts>)))))
(`(,,,(lambda(,),,)
`(闭包ENV,(append)(append`(,)`(,)`(,)`(,)))(lambda(ENV),(地图注释`(,,,,,,))))
我接到一个投诉,说在“param”和“params”之间第一次使用“.”是非法的,但我不知道为什么。这种模式和搭配没有任何抱怨,而且与第一款非常相似

(`(λ(,),)
`(闭包环境,(地图注释`(,,,))(λ(环境),(地图注释`(,,,,))))
任何建议都将不胜感激


谢谢。

需要将
放在列表中最后一个元素之前(除了您不使用的某些特定于球拍的语法)。请记住,列表的一般形式是
(abc.d)
,意思是
(consa(consb(conscd))
。你可以使用<代码>,@ 来匹配列表中间的一些元素,但是我不确定。

< P> <代码> ./COD>需要在列表中的最后一个元素之前(除了一些你不使用的特定于球拍的语法)。请记住,列表的一般形式是
(abc.d)
,意思是
(consa(consb(conscd))
。您可以使用<代码>、@ <代码>来匹配列表中间的一些元素,但我不能肯定。
(`(λ (,<param1> . ,<params>) ,<stmt> . ,<stmts>)
 `(CLOSURE ENV ,(map annotate `(,<param1> . ,<params>)) (λ (ENV) ,(map annotate `(,<stmt> . ,<stmts>)))))