Добавить элементы в список / последовательность в Clojure - PullRequest
7 голосов
/ 02 декабря 2011

Должен быть простой способ сделать это, и я, очевидно, скучаю по нему: |

Как добавить элементы в список \ последовательность (непонятная разница) в clojure?

Я пробовал следующее:

Clojure> (add [1 2 3])
java.lang.RuntimeException: Unable to resolve symbol: add in this context
Clojure> (+ [1 2 3])
java.lang.ClassCastException: Cannot cast clojure.lang.PersistentVector to java.lang.Number
Clojure> (apply merge-with + [1 2 3])
java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long
Clojure> (add-items [1 2 3])
java.lang.RuntimeException: Unable to resolve symbol: add-items in this context

1 Ответ

9 голосов
/ 03 декабря 2011
(+ 1 2 3)

... сделаю это. Решение Натана Хьюза:

(apply + [1 2 3]) 

... работает, если у вас есть ссылка на последовательность, а не ее встроенное определение, например ::

(def s [1 2 3])
; (+ s) CastClassException
(apply + s) ; 6

Как отмечает @ 4e6, reduce также работает:

(reduce + s) ; 6

Что лучше? Мнения различаются .

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