0
필자는 match-lambda를 사용하는 annotate라는 함수를 작성하는데, 종종 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>))))
특히 인쇄 - 그것은 인용 부호가있는 경우에도 함수 내 다른 패턴으로 나타납니다. 이 문제없이 동일한 구문을 사용 또한, 인용 부호로 둘러싸이지 않은 기능 목록 - APPEND가 아무런 문제없이 실행
을 어떤 조언은 감사
나는 그것을 시험해 보았다. "(list-append"가 준 인용문에없는 것) – Schemer
쉼표를 제거해야한다; map annotate는 quasiquote 외부에있을 것이다. –
아, list-append는 애프터 콜 해제 할 필요가 없습니다. 다시 한번 감사드립니다. – Schemer