【问题标题】:Query about copying from 1 vector into another vector in ClojureClojure中关于从一个向量复制到另一个向量的查询
【发布时间】:2016-01-29 20:29:20
【问题描述】:

我正在 Clojure 中实现归并排序。使用我的 Java 参考点,我需要创建

for (int k = lo; k <= hi; k++) {
            aux[k] = a[k]; 
}

在 Clojure 中。

这是我已经尝试过的:

  1. 看起来不太像“for”循环的循环和重复,这让我相信函数式方法会完全不同。
  2. 我还查看了“for”宏,它似乎最接近我的需要,但为了达到它,我跳了这么多圈,不知何故让我觉得我没有按照 Clojure 的方式做某事。李>
  3. 我从类似的东西开始 (defn copy-vector [a aux] (doseq [k a] (swap! aux conj k)))

但是对于应该简单的事情来说,这似乎非常复杂,甚至可能没有完全按照我的需要去做。有关 Clojure 执行此操作方式的任何输入/指导?

【问题讨论】:

  • 你到底想复制一个向量做什么?复制向量很简单,但向量是不可变的,因此您不需要复制。你想复制一个向量的切片吗?这也是微不足道的。
  • Clojure 中的数据是不可变的,因此您不能像在命令式语言中那样复制 Clojure 向量。
  • @DiegoBasch - 感谢您的回复。我想我知道向量是不可变的,但仅此而已。我的意图是将所有内容复制到辅助数组中,将其分成两半,对两半进行排序,然后合并回原始数组。我引用的 Java 代码是以下链接中显示的合并方法的一部分:MergeSort
  • 复制一个向量使用函数vec。例如,如果你有一个向量 v,那么 (vec v) 创建一个新向量,它是 v 的副本。

标签: loops clojure copying


【解决方案1】:

以下是 Clojure 中的一些合并排序实现。

[剧透警告:这些是完整的实现。如果您想自己完成它,您可能不想立即查看这些内容。]

https://codereview.stackexchange.com/questions/23627/mergesort-implementation-in-clojure

https://gist.github.com/alco/2135276 (第二个包含指向其他几个实现的链接。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多