Next: iklib records defs methods, Previous: iklib records defs comparison, Up: iklib records defs [Index]
In a use of the syntax define-record-type
, the definition
clause:
(hash-function ?expr)
allows the specification of an expression ?expr which must evaluate to a custom hash function protocol for instances of the record–type; iklib records hash, for details on record’s hash functions.
If the record–type has a parent: the protocol function is applied to
the hash function of the parent (or #f
if the parent has no hash
function) and the resulting value must be a function, which becomes the
hash function of the record–type.
If the record–type has no parent: the protocol function is called as a thunk and the resulting value must be a function, which becomes the hash function of the record–type.
As example using the typed language, the following record–type has no parent:
(define-record-type duo (fields one two) (hash-function (lambda () (lambda ({O duo}) (fx+ (fixnum-hash (.one O)) (fixnum-hash (.two O))))))) (hash (new duo 1 2)) ⇒ 3
the following record–type has a parent defining a hash function:
(define-record-type alpha (fields a) (hash-function (lambda () (lambda ({O alpha}) (.a O))))) (define-record-type beta (fields b) (hash-function (lambda (alpha-hash) (lambda ({O beta}) (fx+ (alpha-hash O) (.b O)))))) (hash (new beta 1 2))) ⇒ 3
The hash
syntax can always compute a hash value for records;
when the record–type has no custom has function, the core primitive
record-hash
is used record-hash.