Схема: таинственная пустота в шаблоне матча - PullRequest
2 голосов
/ 27 февраля 2011

Я пишу функцию под названием annotate, которая использует match-lambda - часто с рекурсивными вызовами для аннотирования.Вот одно из совпадений с образцом:

(`(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".

Если кто-то может сказать мне, в чем проблемаэто будет с благодарностью.

Спасибо.

1 Ответ

2 голосов
/ 27 февраля 2011

#<void> - это возвращаемое значение от displayln.Функции вывода в некоторых реализациях Scheme и Racket обычно возвращают это, когда возвращать нечего.

...