guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Hash table read syntax in guile 2.0


From: Hengqing Hu
Subject: Re: Hash table read syntax in guile 2.0
Date: Sun, 17 Feb 2013 22:15:28 +0800

I don't know it's intentional or a bug,
but now object->string returns something different.

My understanding of length and fold is the same for deep lists as for
hash table.

It's great you have provided a patch so a constant time way
to know no of key/value bindings in a hash table could be more accessible..

在 2013-2-17,19:59,Daniel Hartwig <address@hidden> 写道:

> On 17 February 2013 11:55, Hengqing Hu <address@hidden> wrote:
>> Dear list,
>> 
>> It seems the read syntax of a hash table has been silently changed.
>> 
>> Now (make-hash-table) produces
>> #<hash-table 172f1c0 0/31>
>> instead what was in 1.8
>> #<hash-table 0/31>
>> 
>> But the document is not updated yet?
>> 
> 
> Hi
> 
> That's how hash-table values are printed, true, but it is not _read
> syntax_.  Neither is it a documented format (although it does appear
> in the example output of one command).  You can not rely on the format
> of that string to be anything, it is just a convenience. :-)
> 
> The manual recommends to use hash-fold for counting the elements:
>  (hash-fold (lambda (key value count) (1+ count)) 0 table)
> 
> You could also adapt your parser to be more flexible, looking only at
> the tail of the string after the last whitespace.  Although such hacks
> work, it is not advisable.
> 
> 
>> It would be more convinient if a hash-length procedure could be provided.
> 
> Right.
> 
> The two modules (rnrs hashtables) and (srfi srfi-69) both provide
> *-size.  Their interfaces are slightly different to the native
> hash-tables, and the objects produced are not compatible with each
> other.
> 
> Not sure why the native tables don't have an equivalent, perhaps because:
> - the terms ‘size’ and ‘length’ are not so good for hash tables [1];
> - it's very easy to do with hash-fold;
> - usually more interesting to count particular items rather than everything; 
> and
> - there may not be any guarantees on uniqueness of keys amongst the
> elements stored in hash table, so what is meant by “number of
> elements” can vary between applications [2]?
> 
> Hence, hash-fold is always preferred to determine this.
> 
> However, for quick and dirty case it's simple enough to write -count,
> so I attach a patch for this with total count in constant time:
> 
> -- Scheme Procedure: hash-count pred table
> -- C Function: scm_hash_count (pred, table)
>     Return the number of elements in the given hash TABLE for
>     which `(PRED KEY VALUE)' returns true.  If PRED itself is
>     `#f', return the total number of elements.
> 
> 
> Regards
> 
> 
> [1] Internally and in the documentation, ‘size’ is already associated
> with the number of buckets.  This is consistent with how some academic
> literature uses the term also.
> [2] For example, a vhash can store multiple elements with the same key
> and provides access to them.
> <0001-add-hash-count-for-native-tables.patch>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]