0

Guile または SRFI-46 を使用すると、 Specifying a Custom Ellipsis Identifierに示すように可能です。しかし、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 で使用されるマクロ エキスパンダーである pyntax は、マクロを使用することにより、内部の楕円を行う別の方法をサポートします......使用したい内側の各楕円にマクロを適用することで、これを書くことができます:

(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 に答える