Search code examples
schemepattern-matchingracketellipsissyntax-object

In Racket or Scheme, is there any way to convert an ellipsis syntax object to a list of syntax objects?


For example:

(syntax-case #'(a b c d) ()
  ((x ...) (list #'x ...))

In the example, (list #'x ...) obviously does not work, but what can I do to output the equivalent of (list #'a #'b #'c #'d)?


Solution

  • Here's one way of doing it:

    Welcome to Racket v5.90.0.6.
    -> (syntax-case #'(a b c d) ()
         ((x ...) (syntax->list #'(x ...))))
    '(#<syntax:5:16 a> #<syntax:5:18 b> #<syntax:5:20 c> #<syntax:5:22 d>)
    

    For more, see the syntax object operations section and the functions exported by syntax/stx.