Некоторые проблемы с неизменяемым хэшем в Racket - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть следующий тупой тестовый код:

#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 Ответ

2 голосов
/ 13 апреля 2011

Проблема состоит именно в двух кавычках, которые вы видите: x оценивает то, с чем x связано, 'x оценивает символ, а ''x оценивает цитируемую форму - 'x. Попробуйте это:

(define vars '(g1 g2 g3 g1))

и это будет работать.

...