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