* hash-get-handle and hash-ref redundant
@ 2007-06-29 20:49 Jon Wilson
2007-06-30 3:16 ` Stephen Compall
0 siblings, 1 reply; 3+ messages in thread
From: Jon Wilson @ 2007-06-29 20:49 UTC (permalink / raw)
To: Guile Users
Hi,
The procedure hash-get-handle seems to be a less useful version of hash-ref.
guile> (help hash-get-handle )
`hash-get-handle' is a primitive procedure in the (guile) module.
-- Scheme Procedure: hash-get-handle table key
This procedure returns the `(key . value)' pair from the hash
table TABLE. If TABLE does not hold an associated value for KEY,
`#f' is returned. Uses `equal?' for equality testing.
guile> (help hash-ref)
`hash-ref' is a primitive procedure in the (guile) module.
-- Scheme Procedure: hash-ref table key [dflt]
Look up KEY in the hash table TABLE, and return the value (if any)
associated with it. If KEY is not found, return DEFAULT (or `#f'
if no DEFAULT argument is supplied). Uses `equal?' for equality
testing.
Perhaps one is meant to be used only internally? I'm guessing that
hash-get-handle should not be visible. If the developers concur, let's
make this change before 1.8.2.
Regards,
Jon
_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: hash-get-handle and hash-ref redundant
2007-06-29 20:49 hash-get-handle and hash-ref redundant Jon Wilson
@ 2007-06-30 3:16 ` Stephen Compall
2007-06-30 3:21 ` Jon Wilson
0 siblings, 1 reply; 3+ messages in thread
From: Stephen Compall @ 2007-06-30 3:16 UTC (permalink / raw)
To: Jon Wilson; +Cc: Guile Users
[-- Attachment #1.1: Type: text/plain, Size: 1635 bytes --]
On Fri, 2007-06-29 at 16:49 -0400, Jon Wilson wrote:
> The procedure hash-get-handle seems to be a less useful version of hash-ref.
Not exactly true:
guile> (define my-ht (make-hash-table))
guile> (hash-set! my-ht 'x 'y)
y
guile> (eq? (hash-get-handle my-ht 'x) (hash-get-handle my-ht 'x))
#t
guile> (set-cdr! (hash-get-handle my-ht 'x) 'z)
guile> (hash-ref my-ht 'x)
z
Their nature is explained in prose at the top of (guile)Hash Table
Reference.
> Perhaps one is meant to be used only internally? I'm guessing that
> hash-get-handle should not be visible. If the developers concur, let's
> make this change before 1.8.2.
You can use it either to cache HT lookups for faster writes, or use them
as variable bindings similarly to how traditional Smalltalk-80 systems
use Dictionary Associations to represent global and pool variables, or:
(define (make-hash-list)
"Answer a hash-list, an HT that defaults all values to '() and
makes it easy to add values."
(make-hash-table))
(define (hash-list-add! ht key item)
(let ((assoc (hash-create-handle! ht key '())))
(set-cdr! assoc (cons item (cdr assoc)))))
(define (hash-list-ref ht key)
(hash-ref ht key '()))
;; I recently wrote a script that would have seriously benefited
;; in clarity from such a structure.
--
;;; Stephen Compall ** http://scompall.nocandysw.com/blog **
"Peta" is Greek for fifth; a petabyte is 10 to the fifth power, as
well as fifth in line after kilo, mega, giga, and tera.
-- Lee Gomes, performing every Wednesday in his tech column
"Portals" on page B1 of The Wall Street Journal
[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
[-- Attachment #2: Type: text/plain, Size: 140 bytes --]
_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-06-30 3:21 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-29 20:49 hash-get-handle and hash-ref redundant Jon Wilson
2007-06-30 3:16 ` Stephen Compall
2007-06-30 3:21 ` Jon Wilson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).