Добавление элементов в список / последовательность в Clojure

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

Как вы добавляете элементы в списокпоследовательность (не ясно, в чем разница) в 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 ответов


(+ 1 2 3)

...будут делать это. Решение @ Nathan Hughes:

(apply + [1 2 3]) 

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

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

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

(reduce + s) ; 6

что лучше? мнения разделились.