Схема сопоставления с match-lambda - PullRequest
0 голосов
/ 27 февраля 2011

Я пишу функцию под названием 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 выполняется без проблем.

Любой совет приветствуется.

1 Ответ

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

У вас есть вложенные обратные кавычки: у вас есть одна перед CLOSURE, а затем вторая перед второй lambda без запятой между ними: обратите внимание на буквальную обратную цитату в середине вашего вывода. Я думаю, что удаление обратной цитаты до второго lambda решит проблему.

...