Как создавать и добавлять элементы в словарь - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь создать словарь или хэш-таблицу, где ключи - это строки, а значения - целые числа со следующим кодом:

(define dict #())
(dict-set! dict "bash" 1)
(displayln dict)
(dict-set! dict "racket" 1)
(displayln dict)

Однако выдает следующую ошибку:

dict-set!: contract violation
  expected: (dict-implements/c dict-set!)
  given: '#()
  in: the d argument of
      (->i
       ((d (dict-implements/c dict-set!))
        (k (d) (dict-key-contract d))
        (value (d) (dict-value-contract d)))
       (_r void?))
  contract from: <collects>/racket/dict.rkt

Где проблема и как ее можно решить?

1 Ответ

1 голос
/ 11 июня 2019

Проблема в том, что литерал #() является пустым вектором.

Чтобы создать изменяемую хеш-таблицу, используйте (make-hash).

 (define dict (make-hash))
...