아나포릭 매크로

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))))) 

「 」를 참조해 주세요.

레퍼런스

외부 링크