在Clojure的列表/序列中添加项目

在Clojure的列表/序列中添加项目,clojure,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.Persis

必须有一个简单的方法来做到这一点,我显然错过了:|

如何在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
…会的@Nathan Hughes的解决方案:

(apply + [1 2 3]) 
…在引用序列而不是内联定义序列时有效,例如:

(def s [1 2 3])
; (+ s) CastClassException
(apply + s) ; 6
正如@4e6所指出的,
reduce
也可以工作:

(reduce + s) ; 6

哪个更好

你是说像
(apply+[123])
?是的,@NathanHughes-这就是我要找的。我不知道为什么我想不出这么简单的事情,但是是的-就是这样。我相信
(reduce+[13])
更为惯用。@4e6:(reduce+[13])对我来说没有什么意义,因为+已经使用reduce:@4e6。据我所知,很多clojurians似乎更喜欢(应用+[13]),尽管其他lisp更喜欢reduce。我想,“应用”更好地表达了功能的意图。(reduce+[1 2 3])可能是新的减速机功能发布后的最佳选择-reduce将获得更多的优化:
(reduce + s) ; 6