0

In Guile or using SRFI-46 it is possible like shown in Specifying a Custom Ellipsis Identifier. But is it possible in SISC or "pure scheme" R5RS?

I know it is possible without using ellipsis, but what if I need to use inner ellipsis like the example bellow?

(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)
Felipe
  • 16,649
  • 11
  • 68
  • 92

1 Answers1

1

The macro expander used in SISC, psyntax, supports a different way to do inner ellipses, by using the ... macro. You can write this by applying the ... macro to each inner ellipses you want to use:

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

or you can apply it to an outer form where all the ellipses within are supposed to be inner:

(define-syntax define-quotation-macros
  (syntax-rules ()
    ((_ (macro-name head-symbol) ...)
     (begin (define-syntax macro-name
              (... (syntax-rules ()
                     ((_ x ...)
                      '(head-symbol x ...)))))
            ...))))
C. K. Young
  • 219,335
  • 46
  • 382
  • 435