我怎麼可以做這樣的事僞C++代碼:迭代步驟和應用功能
vector<int> vs = {...};
for (i = start; i < vs.size(); i += step) {
vs[i] *= 10;
}
Clojure中
?我有這樣的代碼:
(defn step-do [start step v]
(if (< start (count v))
(recur (+ start step) step (assoc v start (* 10 (v start))))
v))
(defn -main
[& args]
(println (step-do 2 3 (vec (range 1 15)))))
或者for
變種:
(defn step-do [start step v]
(last (for [i (range start (count v) step)]
(assoc v i (* 10 (v i))))))
什麼是好?什麼更快?我應該做點別的嗎?
順便說一下,這是完全有可能的替代載體的使用本地陣列這裏(希望有一種暗示!)。然後縮減函數會使用類似'(aset arr i(* 10(aget arr i)))'的東西,集合在仍然來自'range'時減少。由於Clojure代碼片段存在問題,我用矢量的方式寫了答案,但使用'reduce'在不平凡但可預測的循環中轉換某些內容的模式更爲廣泛地適用。在這方面還值得指出的是最近推出的「縮減」提前終止。 –