gpt4 book ai didi

recursion - 在 Clojure 中递归反转序列

转载 作者:行者123 更新时间:2023-12-03 00:34:56 31 4
gpt4 key购买 nike

我想在不使用 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])

问题:

  1. 是否有更简洁的方法来执行此操作,即不使用循环/递归?
  2. 有没有办法在循环中不使用“累加器”参数来执行此操作?
<小时/>

引用文献:

Whats the best way to recursively reverse a string in Java?

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

最佳答案

  • 你不需要数。当剩余序列为空时停止。
  • 您不应该预先填充 acc,因为原始输入可能为空(而且是更多代码)。
  • 解构很酷。
(defn reverse-recursively [coll]  (loop [[r & more :as all] (seq coll)         acc '()]    (if all      (recur more (cons r acc))      acc)))

对于loop/recuracc,您需要某种方式来传递工作反向列表。它要么是loop,要么向函数添加另一个参数(这实际上是loop 正在做的事情)。

或者使用高阶函数:

user=> (reduce conj '() [1 2 3 4])(4 3 2 1)

关于recursion - 在 Clojure 中递归反转序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8395064/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com