Я пишу функцию под названием annotate, которая использует match-lambda, часто с рекурсивными вызовами для аннотирования. Вот одно из совпадений с шаблоном:
(`(lambda (,<param1> . ,<params>) ,<stmts>)
`(CLOSURE ENV (,<param1> . ,<params>) `(lambda (ENV) ,(map annotate ,(list-append `(,<param1> . ,<params>) `(,<stmts>))))))
list-append просто создает новые списки из своих двух аргументов. Проблема в том, что когда этот шаблон соответствует, он возвращает что-то вроде:
'(CLOSURE
ENV
(x)
`(lambda (ENV)
,(map
annotate
(<results of list-append>))))
В частности, ", (map annotate" печатает буквально, а не оценивается - даже если оно не заключено в кавычки. Другие шаблоны в функции, кажется, используют точно такой же синтаксис без этой проблемы. Также, функция без кавычек list-append выполняется без проблем.
Любой совет приветствуется.