Das erste Problem ist, dass into
Sammlungen akzeptiert, keine Sammlung und ein einzelnes Element. Ich glaube, Sie wollten stattdessen conj
verwenden:
(conj result (func first-value))
Ein weiteres Problem ist, dass Clojure Sammlungen (result
Vektor in diesem Fall) sind unveränderlich so funktioniert wie conj
oder into
eine neue aktualisierte Sammlung zurückkehren, anstatt ihre Eingangsparameter zu modifizieren, so müssen Sie ihr Ergebnis für recur
verwenden:
(recur another (conj result (func first-value)))
Und das letzte Problem ist, dass Sie +
Funktion sind vorbei, die auf ein einziges Argument angewendet wird, wenn w krank es zurückgeben. Ich vermute, dass Sie stattdessen inc
verwenden wollten.
So kann Ihr Arbeits Code sollte wie folgt aussehen:
(defn mapset [func ele]
(loop [elements ele
result []]
(if (empty? elements)
(set result)
(let [[first-value & another] elements]
(recur another (conj result (func first-value)))))))
(def v [1 2 3 4 5])
(mapset inc v)
;; => #{4 6 3 2 5}
Was ist Ihr Ziel? Versuchen Sie, Ihre eigene Implementierung als Übung zu erstellen, oder möchten Sie eine Funktion, die eine Zusammensetzung von Map Converting Result Seq in eine Menge zurückgibt? –
Ja, das ist Übung in dem Buch Clojure für Mutige. Auch ich möchte nur wissen, was ich falsch gemacht habe, und warum mein Code nicht funktioniert – Hive
PS Entschuldigung für mein Englisch – Hive