2015-10-29 1 views
0

Я реализую сортировку слияния в Clojure. Используя мою контрольную точку Java, мне нужно создать эквивалентЗапрос о копировании из одного вектора в другой вектор в Clojure

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

в Clojure.

Вот что я уже пробовал:

  1. Loop и RECUR, которые, кажется, не выглядят совсем как «для» петли, что приводит меня к мысли о том, что функциональный подход будет что-то радикально отличается.
  2. Я также посмотрел на макрос «для», который кажется самым близким к тому, что мне нужно, но тот факт, что он подпрыгнул так много обручей, чтобы добраться до него, почему-то заставляет меня чувствовать, что я не делаю что-то вроде Clojure.
  3. Я начал с чего-то вроде (defn copy-vector [a aux] (doseq [k a] (swap! aux conj k))).

Но это кажется ужасно сложным для чего-то, что должно быть простым и, вероятно, даже не делает то, что мне нужно для него ТОЧНО. Любые входные данные/руководство по способу Clojure для этого?

+0

Что именно вы хотите скопировать вектор? Копирование вектора тривиально, но векторы неизменяемы, поэтому вам не нужно делать копию. Вы хотите скопировать срез вектора? Это тоже тривиально. –

+0

Данные в Clojure неизменяемы, поэтому вы не можете _copy_ Clojure vector, как вы делаете это на императивных языках. –

+0

@DiegoBasch - Спасибо за ответ. Я думаю, что я понимаю, что вектор неизменен, но об этом. Мое намерение состоит в том, чтобы скопировать все в вспомогательный массив, разделить его на две половины, отсортировать две половины, а затем объединиться с оригиналом. Код Java, на который я ссылаюсь, является частью метода слияния, показанного по следующей ссылке: [MergeSort] (http://algs4.cs.princeton.edu/22mergesort/Merge.java.html) –

ответ

0

Вот некоторые реализации объединения в Clojure.

[Предупреждение о спойлере: это полные реализации. Если вы хотите работать через него сами вы не можете смотреть на них сразу.]

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

https://gist.github.com/alco/2135276 (Это второй один включает в себя ссылки на несколько других реализаций.)

Смежные вопросы