[racket] keyword-apply questions

From: Kevin Forchione (lysseus at gmail.com)
Date: Mon Sep 22 14:24:18 EDT 2014

On Sep 22, 2014, at 9:05 AM, Kevin Forchione <lysseus at gmail.com> wrote:

> 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

Hmmm… ok, looks like the kws-lst and kvs-lst serve the similar function as common lisp’s &allow-other-keys, which allows passing keyword/keyword values as arguments to functions not directly defining them. 

-Kevin

Posted on the users mailing list.