【发布时间】:2016-01-29 20:29:20
【问题描述】:
我正在 Clojure 中实现归并排序。使用我的 Java 参考点,我需要创建
for (int k = lo; k <= hi; k++) {
aux[k] = a[k];
}
在 Clojure 中。
这是我已经尝试过的:
- 看起来不太像“for”循环的循环和重复,这让我相信函数式方法会完全不同。
- 我还查看了“for”宏,它似乎最接近我的需要,但为了达到它,我跳了这么多圈,不知何故让我觉得我没有按照 Clojure 的方式做某事。李>
- 我从类似的东西开始
(defn copy-vector [a aux] (doseq [k a] (swap! aux conj k)))。
但是对于应该简单的事情来说,这似乎非常复杂,甚至可能没有完全按照我的需要去做。有关 Clojure 执行此操作方式的任何输入/指导?
【问题讨论】:
-
你到底想复制一个向量做什么?复制向量很简单,但向量是不可变的,因此您不需要复制。你想复制一个向量的切片吗?这也是微不足道的。
-
Clojure 中的数据是不可变的,因此您不能像在命令式语言中那样复制 Clojure 向量。
-
@DiegoBasch - 感谢您的回复。我想我知道向量是不可变的,但仅此而已。我的意图是将所有内容复制到辅助数组中,将其分成两半,对两半进行排序,然后合并回原始数组。我引用的 Java 代码是以下链接中显示的合并方法的一部分:MergeSort
-
复制一个向量使用函数vec。例如,如果你有一个向量 v,那么 (vec v) 创建一个新向量,它是 v 的副本。