Rekursiv reverse Sequenz in Clojure

Will ich das umkehren einer Reihenfolge, in Clojure ohne die reverse Funktion, und dies rekursiv.

Hier ist was ich kam mit:

(defn reverse-recursively [coll]
  (loop [r (rest coll)
         acc (conj () (first coll))]
    (if (= (count r) 0)
      acc
      (recur (rest r) (conj acc (first r))))))

Beispiel-Ausgabe:

user> (reverse-recursively '(1 2 3 4 5 6))
(6 5 4 3 2 1)
user> (reverse-recursively [1 2 3 4 5 6])
(6 5 4 3 2 1)
user> (reverse-recursively {:a 1 :b 2 :c 3})
([:c 3] [:b 2] [:a 1])

Fragen:

  1. Gibt es einen kürzeren Weg, dies zu tun, d.h. ohne Schleife/wiederholen?
  2. Gibt es eine Möglichkeit, dies zu tun, ohne mit einem "Akkumulator" - parameter in der Schleife?

Referenzen:

Was ist der beste Weg, um rekursiv reverse a string in Java?

http://groups.google.com/group/clojure/browse_thread/thread/4e7a4bfb0d71a508?pli=1

  • Waren Sie möglicherweise versucht, diese 4clojure problem? 🙂
  • Nein, ich war es nicht. "Reverse a string rekursiv" ist eine sehr häufige interview problem.
InformationsquelleAutor noahlz | 2011-12-06
Schreibe einen Kommentar