아나포릭 매크로
Anaphoric macro아나포릭 매크로란, 아나포(anaphor, 다른 것을 가리키는 표현)에 의해서 참조될 가능성이 있는 매크로에 공급되는 형태를 의도적으로 캡처하는 프로그래밍 매크로의 일종입니다.아나포릭 매크로는 Paul Graham의 On Lisp에서[1] 처음 등장했고, 그 이름은 언어 아나포라[1](앞의 단어 대신 단어를 사용하는 것)에 대한 언급이다.
예
그loopANSI Common Lisp의 매크로는 바인딩의 anaphoric입니다.여기서,itexpression은 [2][3]절에 있는 테스트 식의 결과를 나타냅니다.
다음은 non-to-no-no-no-no-no-no-nil요소, 장소it동일하지 않은 요소의 값을 나타냅니다.nil:
(고리 위해서 요소 에 '(제로 1 제로 2 제로 제로 3 4 6) 언제 요소 합 그것) ;; ⇒ 16 여기서it의 출력에 구속되어 있다(and (> number 3) number)true일 경우 [4]3보다 큰 숫자를 수집합니다.
(고리 위해서 번호 부터 1 로. 6 언제 (그리고. (> 번호 3) 번호) 모으다 그것) ; IT는 (및 (> 3번) 번호를 말합니다. ;; ⇒ (4 5 6) 아나포릭 매크로의 정의
예를 들어 if-then-else 구조의 아나포릭 버전이 있습니다.이것에 의해 아나포르는 it, test [5]절의 결과에 바인딩:
(defmacro aif (테스트 폼 그때의 옵션 else 형식의) `(허락하다 ((그것 ,테스트 폼)) (한다면 그것 ,그때의 ,else 형식의))) (aif (+ 2 7) (포맷 제로 "~A는 NIL과 같지 않습니다." 그것) (포맷 제로 "~A는 NIL과 같습니다." 그것)) ;; "9는 NIL과 같지 않습니다." 또 다른 예로는 함수 자체를 아나포어에 바인드하는 아나포ic 버전의 함수가 있습니다. self반복할 수 있도록 합니다.[5]
(defmacro 알람 (파마 본문(Body) 몸) `(라벨 ((자신 ,파마 ,@몸)) #'자신)) ;; 재귀적으로 정의된 요인 함수. 여기서 '셀프'는 alambda 함수를 의미한다. (알람 (n) (한다면 (= n 0) 1 (* n (자신 (1- n))))) 「 」를 참조해 주세요.
레퍼런스
외부 링크
- 제14장 Paul Graham의 Anaphoric 매크로 (On Lisp)
- Anaphora : 아나포라 매크로 컬렉션