【发布时间】:2012-01-13 18:27:14
【问题描述】:
我想在不使用 reverse 函数的情况下在 Clojure 中反转一个序列,并递归地这样做。
这是我想出的:
(defn reverse-recursively [coll]
(loop [r (rest coll)
acc (conj () (first coll))]
(if (= (count r) 0)
acc
(recur (rest r) (conj acc (first r))))))
示例输出:
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])
问题:
- 有没有更简洁的方法来做到这一点,即没有循环/递归?
- 有没有办法在循环中不使用“累加器”参数来做到这一点?
参考资料:
Whats the best way to recursively reverse a string in Java?
http://groups.google.com/group/clojure/browse_thread/thread/4e7a4bfb0d71a508?pli=1
【问题讨论】:
-
您是否可能尝试过this 4clojure problem? :)
-
不,我不是。 “递归地反转一个字符串”是一个很常见的面试问题。