Я пишу функцию под названием 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".
Если кто-то может сказать мне, в чем проблемаэто будет с благодарностью.
Спасибо.