7 Stimmen

Füge Elemente in einer Liste/Sequenz in Clojure hinzu

Es muss einen einfachen Weg geben, dies zu tun, den ich offensichtlich verpasst habe :|

Wie fügt man die Elemente in einer Liste/Sequenz (der Unterschied ist nicht klar) in Clojure hinzu?

Ich habe Folgendes versucht:

Clojure> (add [1 2 3])
java.lang.RuntimeException: Symbol: add in diesem Kontext nicht auflösbar
Clojure> (+ [1 2 3])
java.lang.ClassCastException: Kann clojure.lang.PersistentVector nicht in java.lang.Number umwandeln
Clojure> (apply merge-with + [1 2 3])
java.lang.IllegalArgumentException: Kann keinen ISeq aus java.lang.Long erstellen
Clojure> (add-items [1 2 3])
java.lang.RuntimeException: Symbol: add-items in diesem Kontext nicht auflösbar

9voto

Craig Stuntz Punkte 124703
(+ 1 2 3)

...wird es tun. @Nathan Hughes Lösung:

(apply + [1 2 3]) 

...funktioniert, wenn Sie eine Referenz auf die Sequenz haben, anstatt sie inline zu definieren, z.B.:

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

Wie @4e6 bemerkt, funktioniert auch reduce:

(reduce + s) ; 6

Was ist besser? Meinungen variieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X