Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 基于匹配lambda的模式匹配方案_Scheme_Pattern Matching_Racket - Fatal编程技术网

Scheme 基于匹配lambda的模式匹配方案

Scheme 基于匹配lambda的模式匹配方案,scheme,pattern-matching,racket,Scheme,Pattern Matching,Racket,我正在编写一个名为annotate的函数,该函数使用match lambda,通常使用递归调用进行注释。以下是其中一个模式匹配: (`(lambda (,<param1> . ,<params>) ,<stmts>) `(CLOSURE ENV (,<param1> . ,<params>) `(lambda (ENV) ,(map annotate ,(list-append `(,<param1> . ,

我正在编写一个名为annotate的函数,该函数使用match lambda,通常使用递归调用进行注释。以下是其中一个模式匹配:

(`(lambda (,<param1> . ,<params>) ,<stmts>)
        `(CLOSURE ENV (,<param1> . ,<params>) `(lambda (ENV) ,(map annotate ,(list-append `(,<param1> . ,<params>) `(,<stmts>))))))
(`(λ(,,,),)
`(闭包环境(,,,)`(lambda(ENV),(地图注释,(列表附加`(,,,)`(,,,)))`(,,,,,,,,)))))
list append只是用它的两个参数创建新的列表。问题在于,当此模式匹配时,它会返回类似于:

'(CLOSURE
  ENV
  (x)
  `(lambda (ENV)
     ,(map
       annotate
       (<results of list-append>))))
”(闭包
环境
(十)
`(兰姆达(环境)
,(地图
注释
())))
具体地说,“,(map annotate)”按字面意思打印,而不是进行计算——即使它是无引号的。函数中的其他模式似乎使用完全相同的语法,没有这个问题。此外,无引号的函数list append执行时没有问题


任何建议都是值得赞赏的。

你已经嵌套反引号:你在“代码>关闭”/>代码前面有一个,然后在第二个代码前面的第二个。lambda < /Cord>没有逗号在中间:注意输出中间的字面反引号。我认为在第二个代码之前删除反引号> lambda < /Cord>将修正这个问题。lem.

我试过了,它抱怨前面的unquote“(list append”不是在准引号中。你需要删除那里的逗号;
map annotate
将在准引号之外(因为你想运行它),所以你不需要在它里面取消引号。啊,list append毕竟不需要取消引号。再次感谢。