Java Dev 위치의 취업 인터뷰에서 1 백만 값 배열에서 가장 큰 값 10 개를 찾기위한 알고리즘을 설계하라는 요청을 받았습니다. 내 인터뷰어를 만족시키는 것 이상의 단순한 무력 알고리즘을 생각해 냈습니다. 나는 두 번째 라운드 인터뷰를 위해 내일 들어간다.인쇄를 한 번만 호출하면 Clojure가 두 번 인쇄됩니다.
나는 스스로에게 도전하고 싶기 때문에 "Clojure for the Brave and True"를 읽고 인터뷰 직후에 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