【发布时间】:2011-07-05 03:44:00
【问题描述】:
我正在编写一个名为 annotate 的函数,它使用 match-lambda —— 通常使用递归调用来进行 annotate。这是模式匹配之一:
(`(lambda (,<param1> . ,<params>) ,<stmts>)
`(CLOSURE ENV (,<param1> . ,<params>) (lambda (ENV) ,(map annotate (map (lambda (x) (append `(,<param1> . ,<params>) (list x))) `(,<stmts>))))))
但是,当匹配此模式时,返回的是:
'(CLOSURE
ENV
(x)
(lambda (ENV)
((CLOSURE
ENV
(x y)
(lambda (ENV) ((+ x y))))))
#<void>)
具体来说,我无法弄清楚“void”来自哪里。事实上,如果我包括以下行:
,(displayln (map annotate (map (lambda (x) (append `(,<param1> . ,<params>) (list x))) `(,<stmts>))))
打印出来:
((CLOSURE ENV (x y) (lambda (ENV) ((+ x y)))))
特别是没有“void”。
如果有人能告诉我问题出在哪里,将不胜感激。
谢谢。
【问题讨论】:
标签: scheme pattern-matching racket void