|[ << Scheme tutorial ]||[Top][Contents][Index]||[ Interfaces for programmers >> ]|
|[ < Association lists (alists) ]||[ Up : Scheme compound data types ]||[ Calculations in Scheme > ]|
A data structure that is used occasionally in LilyPond. A hash table is similar to an array, but the indexes to the array can be any type of Scheme value, not just integers.
Hash tables are more efficient than alists if there is a lot of data to store and the data changes very infrequently.
The syntax to create hash tables is a bit complex, but you can see examples of it in the LilyPond source.
guile> (define h (make-hash-table 10)) guile> h #<hash-table 0/31> guile> (hashq-set! h 'key1 "val1") "val1" guile> (hashq-set! h 'key2 "val2") "val2" guile> (hashq-set! h 3 "val3") "val3"
Values are retrieved from hash tables with
guile> (hashq-ref h 3) "val3" guile> (hashq-ref h 'key2) "val2" guile>
Keys and values are retrieved as a pair with
This is a preferred way, because it will return
#f if a key is
guile> (hashq-get-handle h 'key1) (key1 . "val1") guile> (hashq-get-handle h 'frob) #f guile>