因此,在一個Java Dev職位的求職面試中,我被要求設計一個算法來從一百萬個數值中找出十個最大值。我想出了一個簡單的蠻力算法,這比我的面試官滿意得多。我明天去參加第二輪面試。Clojure打印列表兩次,當我只打一次打印
因爲我喜歡挑戰自己,我一直在閱讀「勇敢和真實的Clojure」,在面試後不久就訪問了Lazy Sequences和Collections部分,並開始想知道我是否不能實現Clojure函數來完成同樣的任務。
我得到了實際的過濾功能正常工作,但無法理解我在運行應用程序時看到的內容。這裏是我的代碼:
(defn random-numbers
([] (random-numbers 0))
([n] (cons n (lazy-seq (random-numbers (rand 10000))))))
(def big-array (take 1000000 (random-numbers)))
(defn top-ten [[big0 big1 big2 big3 big4 big5 big6 big7 big8 big9 :as acc] x]
(cond
(> x big0) [x big1 big2 big3 big4 big5 big6 big7 big8 big9]
(> x big1) [big0 x big2 big3 big4 big5 big6 big7 big8 big9]
(> x big2) [big0 big1 x big3 big4 big5 big6 big7 big8 big9]
(> x big3) [big0 big1 big2 x big4 big5 big6 big7 big8 big9]
(> x big4) [big0 big1 big2 big3 x big5 big6 big7 big8 big9]
(> x big5) [big0 big1 big2 big3 big4 x big6 big7 big8 big9]
(> x big6) [big0 big1 big2 big3 big4 big5 x big7 big8 big9]
(> x big7) [big0 big1 big2 big3 big4 big5 big6 x big8 big9]
(> x big8) [big0 big1 big2 big3 big4 big5 big6 big7 x big9]
(> x big9) [big0 big1 big2 big3 big4 big5 big6 big7 big8 x]
:else acc))
(defn top-ten-list [coll]
(reduce top-ten [0 0 0 0 0 0 0 0 0 0] coll))
(defn unlines [coll]
(clojure.string/join \newline coll))
(defn -main []
(print (unlines (top-ten-list big-array))))
(-main)
而且兩次產生預期的輸出:
9999.978584142405
9999.966008266641
9999.954608202788
9999.925928099525
9999.779899149064
9999.755392364965
9999.75279348399
9999.640257438374
9999.615213138313
9999.447171545269999.978584142405
9999.966008266641
9999.954608202788
9999.925928099525
9999.779899149064
9999.755392364965
9999.75279348399
9999.640257438374
9999.615213138313
9999.44717154526
輸出略有變化取決於我是否使用打印或的println,在第二盤開始輸出一個新的行,如果我使用println。
我相當確信第一個輸出是我調用函數和處理結果的方式的工件,但我不確定我出錯的地方!
你是怎麼執行這個腳本的?只是複製粘貼這個腳本,運行它,我只看到一個版本的輸出,而不是雙倍。實際上,我使用[lein exec](https://github.com/kumarshantanu/lein-exec)像這樣運行它:'cat yourscript.clj | lein exec' –
我是通過點擊IntelliJ中的運行按鈕/命令來運行它....我會試試你的方法。 – cptully
@AlexMiller在下面評論說,刪除(-main)行將解決IntelliJ中的問題,並且確實如此。 @ MatiasElgart建議使用'lien exec'也可以。 – cptully