方案:模式匹配中的神秘空白

时间:2011-02-27 07:19:03

标签: scheme pattern-matching racket void

我正在编写一个名为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>)

具体来说,我无法弄清楚“无效”的来源。事实上,如果我包括这一行:

,(displayln (map annotate (map (lambda (x) (append `(,<param1> . ,<params>) (list x))) `(,<stmts>))))

打印:

((CLOSURE ENV (x y) (lambda (ENV) ((+ x y)))))

特别是没有“无效”。

如果有人能告诉我这是什么问题,我们将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:2)

#<void>displayln的返回值。 Scheme和Racket的一些实现中的输出函数通常在没有任何有意义的返回时返回。