2014-05-18 8 views
0

Guile에서 또는 SRFI-46을 사용하면 Specifying a Custom Ellipsis Identifier과 같이 표시 될 수 있습니다. 그러나 SISC 또는 "순수한 계획"R5RS에서 가능합니까?SISC/Scheme에서 다른 매크로를 생성하는 매크로를 만드는 방법은 무엇입니까?

줄임표를 사용하지 않고도 가능하다는 것을 알고 있지만 아래 예와 같이 내부 줄임표를 사용해야하는 경우 어떻게해야합니까?

(define-syntax define-quotation-macros 
    (syntax-rules() 
    ((_ (macro-name head-symbol) ...) 
    (begin (define-syntax macro-name 
       (syntax-rules :::() 
       ((_ x :::) 
       (quote (head-symbol x :::))))) 
      ...)))) 
(define-quotation-macros (quote-a a) (quote-b b) (quote-c c)) 
(quote-a 1 2 3) ⇒ (a 1 2 3) 

답변

1

SISC에 사용되는 매크로 확장기, psyntax는 ... 매크로를 이용하여, 내부 타원을 수행하는 다른 방법을 지원한다. 당신은 당신이 사용할 각 내부 타원에 ... 매크로를 적용하여이를 작성할 수 있습니다

(define-syntax define-quotation-macros 
    (syntax-rules() 
    ((_ (macro-name head-symbol) ...) 
    (begin (define-syntax macro-name 
       (syntax-rules() 
       ((_ x (... ...)) 
       '(head-symbol x (... ...))))) 
      ...)))) 

를하거나 내부 있어야 모든 타원 내부의 외부 형태에 적용 할 수 있습니다 :

(define-syntax define-quotation-macros 
    (syntax-rules() 
    ((_ (macro-name head-symbol) ...) 
    (begin (define-syntax macro-name 
       (... (syntax-rules() 
        ((_ x ...) 
         '(head-symbol x ...))))) 
      ...))))