Scheme doesn't have built-in support for multidimensional hashes, but with the right abstractions you can build your own implementation:
; create a new multidimensional hash table
(define (make-multi-hash)
(make-hash-table))
; set a value given a non-empty sequence of keys
(define (multi-hash-set! hash-table value . keys)
(let loop ((hash hash-table)
(keys keys))
(cond ((null? (cdr keys))
(hash-table-set! hash (car keys) value))
(else
(if (not (hash-table-exists? hash (car keys)))
(hash-table-set! hash (car keys) (make-multi-hash)))
(loop (hash-table-ref hash (car keys)) (cdr keys))))))
; retrieve a value given a non-empty sequence of keys
(define (multi-hash-ref hash-table . keys)
(foldl (lambda (k h) (hash-table-ref h k))
hash-table
keys))
Use it like this:
(define h (make-multi-hash))
(multi-hash-set! h 42 'a 'b 'c)
(multi-hash-ref h 'a 'b 'c)
=> 42
Using the above procedures as a starting point surely you can implement the required functionality. Also notice that Chicken Scheme provides a lot of procedures for dealing with "normal" hash tables, some of them will be useful, as this implementation uses ordinary hash tables under the hood.