Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.79 KB | None | 0 0
  1. #lang scratch
  2.  
  3. (define (better-keyword-apply func args)
  4. (define-values (kws rest)
  5. (let loop ([args args]
  6. [kw '()]
  7. [rest '()])
  8. (cond
  9. [(null? args) (values kw rest)]
  10. [(keyword? (first args))
  11. (loop (cddr args)
  12. (cons (cons (first args) (second args)) kw)
  13. rest)]
  14. [else
  15. (loop (cdr args)
  16. kw
  17. (cons (car args) rest))])))
  18. (define sorted-kws (sort kws keyword<? #:key car))
  19. (keyword-apply func
  20. (map car sorted-kws)
  21. (map cdr sorted-kws)
  22. (reverse rest)))
  23.  
  24. (module+ test
  25. (define (f a #:x x #:y y [z "blue"])
  26. (list a x y z))
  27.  
  28. (better-keyword-apply f '(7 #:y 5 #:x 6))
  29. (better-keyword-apply f '(#:x 5 7 #:y 12 6)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement