Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang scratch
- (define (better-keyword-apply func args)
- (define-values (kws rest)
- (let loop ([args args]
- [kw '()]
- [rest '()])
- (cond
- [(null? args) (values kw rest)]
- [(keyword? (first args))
- (loop (cddr args)
- (cons (cons (first args) (second args)) kw)
- rest)]
- [else
- (loop (cdr args)
- kw
- (cons (car args) rest))])))
- (define sorted-kws (sort kws keyword<? #:key car))
- (keyword-apply func
- (map car sorted-kws)
- (map cdr sorted-kws)
- (reverse rest)))
- (module+ test
- (define (f a #:x x #:y y [z "blue"])
- (list a x y z))
- (better-keyword-apply f '(7 #:y 5 #:x 6))
- (better-keyword-apply f '(#:x 5 7 #:y 12 6)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement