guile-user
[Top][All Lists]
Advanced

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

Re: hash-get-handle and hash-ref redundant


From: Stephen Compall
Subject: Re: hash-get-handle and hash-ref redundant
Date: Fri, 29 Jun 2007 22:16:04 -0500

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: signature.asc
Description: This is a digitally signed message part


reply via email to

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