## Unit srfi-69

CHICKEN implements SRFI 69 with SRFI 90 extensions. For more information, see SRFI-69 and SRFI-90.

### Hash Table Procedures

#### make-hash-table

`(make-hash-table [TEST HASH SIZE] [#:test TEST] [#:hash HASH] [#:size SIZE] [#:initial INITIAL] [#:min-load MIN-LOAD] [#:max-load MAX-LOAD] [#:weak-keys WEAK-KEYS] [#:weak-values WEAK-VALUES])` procedure

  Returns a new `HASH-TABLE` with the supplied configuration.

  `TEST`
    The equivalence function.
  `HASH`
    The hash function.
  `SIZE`
    The expected number of table elements.
  `INITIAL`
    The default initial value.
  `MIN-LOAD`
    The minimum load factor. A `flonum` in (0.0 1.0).
  `MAX-LOAD`
    The maximum load factor. A `flonum` in (0.0 1.0).
  `WEAK-KEYS`
    Use weak references for keys. (Ignored)
  `WEAK-VALUES`
    Use weak references for values. (Ignored)

  Please note that hash tables are not guaranteed to compare `equal?` to each other, even if they contain exactly the same key/value pairs.

#### alist->hash-table

`(alist->hash-table A-LIST [#:test TEST] [#:hash HASH] [#:size SIZE] [#:initial INITIAL] [#:min-load MIN-LOAD] [#:max-load MAX-LOAD] [#:weak-keys WEAK-KEYS] [#:weak-values WEAK-VALUES])` procedure

  Returns a new `HASH-TABLE`. The `HASH-TABLE` is populated from the `A-LIST`. The keyword arguments are per `make-hash-table`.

  If a key occurs multiple times in `A-LIST`, the first occurrence will be used in the hash table.

#### hash-table?

`(hash-table? OBJECT)` procedure

  Is the `OBJECT` a `hash-table`?

#### hash-table-size

`(hash-table-size HASH-TABLE)` procedure

  Returns the number of associations in `HASH-TABLE`.

#### hash-table-equivalence-function

`(hash-table-equivalence-function HASH-TABLE)` procedure

  The `HASH-TABLE` `equivalence-function`.

#### hash-table-hash-function

`(hash-table-hash-function HASH-TABLE)` procedure

  The `HASH-TABLE` `hash-function`.

#### hash-table-min-load

`(hash-table-min-load HASH-TABLE)` procedure

  The `HASH-TABLE` minimum load factor.

#### hash-table-max-load

`(hash-table-max-load HASH-TABLE)` procedure

  The `HASH-TABLE` maximum load factor.

#### hash-table-weak-keys

`(hash-table-weak-keys HASH-TABLE)` procedure

  Does the `HASH-TABLE` use weak references for keys?

#### hash-table-weak-values

`(hash-table-weak-values HASH-TABLE)` procedure

  Does the `HASH-TABLE` use weak references for values?

#### hash-table-has-initial?

`(hash-table-has-initial? HASH-TABLE)` procedure

  Does the `HASH-TABLE` have a default initial value?

#### hash-table-initial

`(hash-table-initial HASH-TABLE)` procedure

  The `HASH-TABLE` default initial value.

#### hash-table-keys

`(hash-table-keys HASH-TABLE)` procedure

  Returns a list of the keys in the `HASH-TABLE` population.

#### hash-table-values

`(hash-table-values HASH-TABLE)` procedure

  Returns a list of the values in the `HASH-TABLE` population.

#### hash-table->alist

`(hash-table->alist HASH-TABLE)` procedure

  Returns the population of the `HASH-TABLE` as an `a-list`.

#### hash-table-ref

`(hash-table-ref HASH-TABLE KEY)` procedure

  Returns the `VALUE` for the `KEY` in the `HASH-TABLE`.

  Aborts with an exception when the `KEY` is missing.

#### hash-table-ref/default

`(hash-table-ref/default HASH-TABLE KEY DEFAULT)` procedure

  Returns the `VALUE` for the `KEY` in the `HASH-TABLE`, or the `DEFAULT` when the `KEY` is missing.

#### hash-table-exists?

`(hash-table-exists? HASH-TABLE KEY)` procedure

  Does the `KEY` exist in the `HASH-TABLE`?

#### hash-table-set!

`(hash-table-set! HASH-TABLE KEY VALUE)` procedure

  Set the `VALUE` for the `KEY` in the `HASH-TABLE`.

  A setter for `hash-table-ref` is defined, so

      (set! (hash-table-ref HASH-TABLE KEY) VALUE)

  is equivalent to

      (hash-table-set! HASH-TABLE KEY VALUE)

#### hash-table-update!

`(hash-table-update! HASH-TABLE KEY [UPDATE-FUNCTION [DEFAULT-VALUE-FUNCTION]])` procedure

  Sets or replaces the `VALUE` for `KEY` in the `HASH-TABLE`.

  The `UPDATE-FUNCTION` takes the existing `VALUE` for `KEY` and returns the new `VALUE`. The default is `identity`

  The `DEFAULT-VALUE-FUNCTION` is called when the entry for `KEY` is missing. The default uses the `(hash-table-initial-value)`, if provided. Otherwise aborts with an exception.

  Returns the new `VALUE`.

#### hash-table-update!/default

`(hash-table-update!/default HASH-TABLE KEY UPDATE-FUNCTION DEFAULT-VALUE)` procedure

  Sets or replaces the `VALUE` for `KEY` in the `HASH-TABLE`.

  The `UPDATE-FUNCTION` takes the existing `VALUE` for `KEY` and returns the new `VALUE`.

  The `DEFAULT-VALUE` is used when the entry for `KEY` is missing.

  Returns the new `VALUE`.

#### hash-table-copy

`(hash-table-copy HASH-TABLE)` procedure

  Returns a shallow copy of the `HASH-TABLE`.

#### hash-table-delete!

`(hash-table-delete! HASH-TABLE KEY)` procedure

  Deletes the entry for `KEY` in the `HASH-TABLE`.

#### hash-table-remove!

`(hash-table-remove! HASH-TABLE PROC)` procedure

  Calls `PROC` for all entries in `HASH-TABLE` with the key and value of each entry. If `PROC` returns true, then that entry is removed.

#### hash-table-clear!

`(hash-table-clear! HASH-TABLE)` procedure

  Deletes all entries in `HASH-TABLE`.

#### hash-table-merge

`(hash-table-merge HASH-TABLE-1 HASH-TABLE-2)` procedure

  Returns a new `HASH-TABLE` with the union of `HASH-TABLE-1` and `HASH-TABLE-2`. Keys that exist in both tables will be taken from `HASH-TABLE-1`.

#### hash-table-merge!

`(hash-table-merge! HASH-TABLE-1 HASH-TABLE-2)` procedure

  Returns `HASH-TABLE-1` as the union of `HASH-TABLE-1` and `HASH-TABLE-2`. Keys that exist in both tables will be taken from `HASH-TABLE-1`.

#### hash-table-map

`(hash-table-map HASH-TABLE FUNC)` procedure

  Calls `FUNC` for all entries in `HASH-TABLE` with the key and value of each entry.

  Returns a list of the results of each call.

#### hash-table-fold

`(hash-table-fold HASH-TABLE FUNC INIT)` procedure

  Calls `FUNC` for all entries in `HASH-TABLE` with the key and value of each entry, and the current folded value. The initial folded value is `INIT`.

  Returns the final folded value.

#### hash-table-for-each

`(hash-table-for-each HASH-TABLE PROC)` procedure

  Calls `PROC` for all entries in `HASH-TABLE` with the key and value of each entry.

#### hash-table-walk

`(hash-table-walk HASH-TABLE PROC)` procedure

  Calls `PROC` for all entries in `HASH-TABLE` with the key and value of each entry.

### Hashing Functions

All hash functions return a `fixnum` in the range [0 `BOUND`).

When given the fixnum RANDOMIZATION, these functions will use this to perturb the value; if not specified, the value will differ for each invocation of your program. This is for security reasons; an attacker who knows what a value hashes to can deliberately try to cause collisions, thereby flattening your hash table, effectively reducing it to a list. Always make sure you don't expose any hashed value to an attacker.

#### number-hash

`(number-hash NUMBER [BOUND RANDOMIZATION])` procedure

  For use with `=` as a `hash-table-equivalence-function`.

#### object-uid-hash

`(object-uid-hash OBJECT [BOUND RANDOMIZATION])` procedure

  Currently a synonym for `equal?-hash`.

#### symbol-hash

`(symbol-hash SYMBOL [BOUND RANDOMIZATION])` procedure

  For use with `eq?` as a `hash-table-equivalence-function`.

#### keyword-hash

`(keyword-hash KEYWORD [BOUND RANDOMIZATION])` procedure

  For use with `eq?` as a `hash-table-equivalence-function`.

#### string-hash

`(string-hash STRING [BOUND START END RANDOMIZATION])` procedure

  For use with `string=?` as a `hash-table-equivalence-function`. The optional `START` and `END` arguments may be given to limit the hash calculation to a specific sub-section of `STRING`.

#### string-ci-hash

`(string-hash-ci STRING [BOUND START END RANDOMIZATION])` procedure
`(string-ci-hash STRING [BOUND START END RANDOMIZATION])` procedure

  For use with `string-ci=?` as a `hash-table-equivalence-function`.

#### eq?-hash

`(eq?-hash OBJECT [BOUND RANDOMIZATION])` procedure

  For use with `eq?` as a `hash-table-equivalence-function`.

#### eqv?-hash

`(eqv?-hash OBJECT [BOUND RANDOMIZATION])` procedure

  For use with `eqv?` as a `hash-table-equivalence-function`.

#### equal?-hash

`(equal?-hash OBJECT [BOUND RANDOMIZATION])` procedure

  For use with `equal?` as a `hash-table-equivalence-function`.

#### hash

`(hash OBJECT [BOUND RANDOMIZATION])` procedure

  Synonym for `equal?-hash`.

#### hash-by-identity

`(hash-by-identity OBJECT [BOUND RANDOMIZATION])` procedure

  Synonym for `eq?-hash`.

### recursive-hash-max-depth

`(recursive-hash-max-depth)` parameter

  The maximum structure depth to follow when computing a hash value. The default is `4`.

### recursive-hash-max-length

`(recursive-hash-max-length)` parameter

  The maximum vector length to follow when computing a hash value. The default is `4`.

  Previous: Unit srfi-18 Next: Unit posix