Racket中不可变哈希的一些问题

时间:2011-04-13 05:20:15

标签: scheme racket

我有以下愚蠢的测试代码:

#lang racket
(define vars '('g1 'g2 'g3 'g1))
(define addrs '(123 456 789 012))

(define immhs (make-immutable-hasheq empty))

(define immhs* (for/fold ([imhs immhs]) ([var (in-list vars)] [addr (in-list addrs) ]) (hash-set imhs var addr )))

immhs*

(hash-ref immhs* 'g1)

输出结果为:

'#hasheq(('g1 . 123) ('g2 . 456) ('g3 . 789) ('g1 . 12))
hash-ref: no value found for key: 'g1

为什么hash-ref无法引用'g1? (它也会在'g2上失败等) 然后我使用(hash-keys immhs*),它返回'('g1 'g2 'g3 'g1),其中有'g1; 我进一步使用(car (hash-keys immhs*)),它返回''g1;那么问题是为什么之前有两个引用'

1 个答案:

答案 0 :(得分:2)

问题恰恰就是您看到的两个引号:x评估绑定到x的任何内容,'x计算符号,''x评估为引用形式 - 'x。试试这个:

(define vars '(g1 g2 g3 g1))

它会起作用。