Я реализую сортировку слияния в Clojure. Используя мою контрольную точку Java, мне нужно создать эквивалентЗапрос о копировании из одного вектора в другой вектор в Clojure
for (int k = lo; k <= hi; k++) {
aux[k] = a[k];
}
в Clojure.
Вот что я уже пробовал:
- Loop и RECUR, которые, кажется, не выглядят совсем как «для» петли, что приводит меня к мысли о том, что функциональный подход будет что-то радикально отличается.
- Я также посмотрел на макрос «для», который кажется самым близким к тому, что мне нужно, но тот факт, что он подпрыгнул так много обручей, чтобы добраться до него, почему-то заставляет меня чувствовать, что я не делаю что-то вроде Clojure.
- Я начал с чего-то вроде
(defn copy-vector [a aux] (doseq [k a] (swap! aux conj k)))
.
Но это кажется ужасно сложным для чего-то, что должно быть простым и, вероятно, даже не делает то, что мне нужно для него ТОЧНО. Любые входные данные/руководство по способу Clojure для этого?
Что именно вы хотите скопировать вектор? Копирование вектора тривиально, но векторы неизменяемы, поэтому вам не нужно делать копию. Вы хотите скопировать срез вектора? Это тоже тривиально. –
Данные в Clojure неизменяемы, поэтому вы не можете _copy_ Clojure vector, как вы делаете это на императивных языках. –
@DiegoBasch - Спасибо за ответ. Я думаю, что я понимаю, что вектор неизменен, но об этом. Мое намерение состоит в том, чтобы скопировать все в вспомогательный массив, разделить его на две половины, отсортировать две половины, а затем объединиться с оригиналом. Код Java, на который я ссылаюсь, является частью метода слияния, показанного по следующей ссылке: [MergeSort] (http://algs4.cs.princeton.edu/22mergesort/Merge.java.html) –