hashtable-clear-copy taylanbayirli@xxxxxx (11 Sep 2015 14:52 UTC)
|
Re: hashtable-clear-copy
John Cowan
(11 Sep 2015 14:58 UTC)
|
Re: hashtable-clear-copy
taylanbayirli@xxxxxx
(11 Sep 2015 15:36 UTC)
|
Re: hashtable-clear-copy
Arthur A. Gleckler
(11 Sep 2015 16:39 UTC)
|
Re: hashtable-clear-copy
John Cowan
(11 Sep 2015 16:47 UTC)
|
Re: hashtable-clear-copy
John Cowan
(12 Sep 2015 06:11 UTC)
|
hashtable-clear-copy taylanbayirli@xxxxxx 11 Sep 2015 14:52 UTC
While specifying quasiquote semantics, a few things came to my attention. - You might often want a fresh version of a certain hashtable, which contains no entries but has the same hash function, equivalence function, and weakness as the original. This is way too difficult normally (have to manually check if it's an eq? or eqv? table), and now there's a procedure that does just that: (hashtable-clear-copy ht) ;initial capacity has default value (hashtable-clear-copy ht #t) ;initial capacity set to ht's current size (hashtable-clear-copy ht 512) ;initial capacity set manually ("Clear" is an adjective here, not a verb like in hashtable-clear!.) - That fulfills the most common use case, but nevertheless it's annoying that the values returned from the inspection procedures can't directly be passed to make-hashtable to create the same kind of hashtable. There's no reason it shouldn't be able to special-handle eq? and eqv?; it would impose a trivial change to the implementation at most. (And in some implementations the dedicated eq? and eqv? constructors might already be delegating the job to make-hashtable.) So now you can: (make-hashtable (hashtable-hash-function ht) (hashtable-equivalence-function ht) #f ;or (hashtable-size ht) (hashtable-weakness ht)) which is pretty useless when you have hashtable-clear-copy, but it fixes an inconsistency in the API, simplifies the implementation of hashtable-clear-copy, and one can imagine the hash and equivalence functions being copied but the weakness changed, etc. - The hashtable-map in SRFI-125 happens to fit perfectly into the use-case of implementing the quasiquote semantics I specified, which made me wonder whether it's a fine candidate for standardization after all, despite its strange semantics. I decided against that, precisely because I dislike the quasiquote semantics I ended up specifying as well (will keep them simply because I couldn't see a better way). So I stand by my belief that SRFI-125's hashtable-map has strange semantics that are undesirable in the general case, although I haven't added Takashi Kato's proposed hashtable-map either yet (still pondering on it). Taylan