Var clojure.core / unquote-splicing - несвязанная ошибка при передаче элементов списка в hash-map - PullRequest
1 голос
/ 22 августа 2010

Я пытаюсь создать карту из чередующегося списка и сталкиваюсь с ошибками.Вот что я делаю:

(interleave ['a 'b] [1 2])

дает список (a 1 b 2).

Если я хочу создать хэш-карту из набора элементов, я могу сделать

(hash-map 'a 1 'b 2)

Объединяя их вместе,

(hash-map ~@(interleave ['a 'b] [1 2]))

Я получаю эту ошибку:

java.lang.IllegalStateException: Var clojure.core/unquote-splicing is unbound. (repl-1:2)

Как передать элементы списка в hash-map

1 Ответ

6 голосов
/ 22 августа 2010

Вам необходимо использовать apply:

(apply hash-map (interleave ['a 'b] [1 2]))

apply применяет функцию к последовательности аргументов;для подробностей введите (doc apply) в REPL.

~@ - это один из двух компаньонов к синтаксической кавычке, записанный как backtick, другой * ~:

`(~(+ 1 2) ~@[2 1])
; => (3 2 1)

Три полезны в основном для написания макросов;вы не можете использовать ~ и ~@ вне синтаксической кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...