[racket] keyword-apply questions

From: Kevin Forchione (lysseus at gmail.com)
Date: Mon Sep 22 12:05:00 EDT 2014

Hi guys,
Apparently, with a desire to use keywords more in functions, I’ll have to wrap my head around keyword-apply better. Two questions I have are:

1. Why must the  kw-lst  be sorted in keyword<? rather than having those arguments appear in any order that makes sense to the caller, and then having keyword-apply sort both kw-lst and kw-val-lst appropriately to keep the key/value pairs synchronized?

2. The reference says:

(keyword-apply proc
				kw-lst
				kw-val-lst
				v …
				lst
				#:<kw> kw-arg …)

After playing around a bit all of the following are equivalent:

(define (bar #:x x #:y y #:z z u v . w) (list x y z u v w))

(keyword-apply bar '() '() '(6 7 8 9 10) #:x 3 #:y 4 #:z 5)
(keyword-apply bar '(#:x #:y #:z) '(3 4 5) '(6 7 8 9 10))
(keyword-apply bar #:x 3 #:y 4 #:z 5 '() '() '(6 7 8 9 10))
(keyword-apply bar #:z 5 #:y 4 #:x 3 '() '() '(6 7 8 9 10))
(keyword-apply bar #:z 5 #:x 3 '(#:y) '(4) '(6 7 8 9 10))
(keyword-apply bar #:z 5 #:x 3 '(#:y) '(4) 6 7 '(8 9 10))

So it appears that ordering of keywords is only mandatory in the kw-lst. What’s the advantage to using the kw-lst/kw-val-lst? If those lists are primarily built using automation, rather than by hand, then question #1 is probably explained by the idea that the automation is expected to sort the keywords prior to the call?

-Kevin

Posted on the users mailing list.