为载体添加到一个哈希表,实际上你需要创建该载体,并将其添加。例如,
(define table (make-hash)) ;; create new mutable hash table
(define vec (make-vector 10 5)) ;; create new vector
(hash-set! table 'myVector vec) ;; add vector to hash, key='myVector, value=vec
(hash-ref table 'myVector) ;; retrieve hash value for specified key
#(5 5 5 5 5 5 5 5 5 5)
注意,使用引用列表时,当你定义arguments
比如,第一个元素实际上是一个符号,即。 'myVector
。因此,要将其称为您的哈希键,您应该在名称上添加以下引号:(function-get 'myVector)
。
考虑以下几点:
(define *function-table* (make-hash))
(define (function-get key)
(hash-ref *function-table* key))
(define (function-put! key value)
(hash-set! *function-table* key value))
(define arguments (list 'myVector (make-vector 10 5)))
((lambda (pair)
(function-put! (car pair) (cadr pair)))
arguments)
那么你可以有:
(vector-length (function-get 'myVector))
=> 10
编辑:如果arguments
是包含需要创建的名称和载体的尺寸列表并添加到哈希,然后您可以执行以下操作:
(define arguments '(myVector 5))
((lambda (pair)
(function-put! (car pair) (make-vector (cadr pair))))
arguments)
然后,
(function-get 'myVector)
=> #(0 0 0 0 0)
(vector-length (function-get 'myVector))
=> 5
计划没有'鳕鱼,hash',但['化妆hashtable'(http://www.r6rs.org/final/html/r6rs-lib/r6rs- libRS-14.html)和[SRFI-125](https://srfi.schemers.org/srfi-125/srfi-125.html)中的'make-hash-table',这也是新的R7RS中的标准 - 尚未定案。 – Sylwester