2011-12-02 38 views
7

Có một cách đơn giản để thực hiện việc này, và tôi rõ ràng là thiếu nó: |Thêm các mục vào danh sách/chuỗi trong Clojure

Làm cách nào để bạn thêm các mục vào danh sách \ sequence (không rõ ràng về sự khác biệt) trong clojure?

Tôi đã thử những điều sau đây:

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 
+2

có nghĩa là '(áp dụng + [1 2 3])'? –

+0

Vâng, @NathanHughes - đó là những gì tôi đang tìm kiếm. Tôi không biết tại sao tôi không thể tìm ra thứ gì đó đơn giản như vậy, nhưng phải - đó là nó. – javamonkey79

Trả lời

9
(+ 1 2 3) 

... sẽ làm điều đó. @ Nathan Hughes của giải pháp:

(apply + [1 2 3]) 

... hoạt động nếu bạn có một tham chiếu đến chuỗi chứ không phải là định nghĩa nó inline, ví dụ:

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

Như @ ghi chú 4e6, reduce cũng làm việc:

(reduce + s) ; 6 

Điều nào tốt hơn? Opinions vary.

+1

Tôi tin rằng '(giảm + [1 2 3])' là thành ngữ hơn. – 4e6

+0

@ 4e6: [Bạn có thể đúng.] (Http://stackoverflow.com/questions/3153396/clojure-reduce-vs-apply) –

+0

'áp dụng +' công trình, cảm ơn. – javamonkey79

Các vấn đề liên quan