[plt-scheme] Keyword arguments using syntax/parse
Hi all,
I'm experimenting with syntax/parse as a way of implementing optional
keyword arguments with default values.
I've included some test code below. I'm new to this library so I want
to make sure I'm not missing anything. Is this the intended approach
for this kind of thing?
Many thanks,
-- Dave
; keyword-test.ss =================================
#lang scheme
(require (for-syntax syntax/parse))
; Example macro -----------------------------------
; (_ [#:a expr] [#:b expr])
;
; Expands to (list a b) where a and b:
; - are either specified using #:a and #:b;
; - or take on default values 'default-a and 'default-b.
(define-syntax (test stx)
(syntax-parse stx
[(_ (~or (~optional (~seq #:a user-a) #:name "#:a keyword")
(~optional (~seq #:b user-b) #:name "#:b keyword")) ...)
(with-syntax ([a (or (attribute user-a) #''default-a)]
[b (or (attribute user-b) #''default-b)])
#'(list a b))]))
; Test code ---------------------------------------
(test) ; => '(default-a default-b)
(test #:a 1) ; => '(1 default-b)
(test #:a 1 #:b 2) ; => '(1 2)
; =================================================
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20090829/62f9ea4b/attachment.html>