这是我尝试创建哈希表并根据列表向其添加向量。
(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 '(myVector 5))
(lambda(pair)(function-put! (car pair) (make-hash (cadr pair))) arguments)
我收到以下消息:
#<procedure>
现在我将尝试通过获取它包含的向量的大小来查询哈希表。
(vector-length (function-get myVector))
错误讯息:
myVector: undefined;
cannot reference undefined identifier
context...:
答案 0 :(得分:0)
为了向散列表添加向量,您需要实际创建所述向量并添加它。例如,
(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