(module m mzscheme
(define-syntax args
(syntax-rules (quasiquote unquote-splicing)
[(_ (x ...) (`,@y z ...))
(args (x ... ,@y) (z ...))]
[(_ (x ...) (y z ...))
(args (x ... ,y) (z ...))]
[(_ (x ...) ())
`(x ...)]))
(define-syntax app
(syntax-rules ()
[(_ f x ...) (apply f (args () (x ...)))]))
(provide (rename app #%app)))
(require m)
(define a '(1 2 3))
(write (list 0 `,@a))
(newline)
(write (+ 1 `,@(map add1 a) 5))
(newline)