0

在 Guile 或使用 SRFI-46 中,可以像指定自定义省略号标识符中所示一样。但是在 SISC 或“纯方案”R5RS 中是否有可能?

我知道不使用省略号是可能的,但是如果我需要像下面的示例那样使用内部省略号怎么办?

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

1 回答 1

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 ...)))))
            ...))))
于 2014-05-18T13:14:59.470 回答