2014-10-10 67 views
0

嗨我開始寫clojure代碼和練習Hackerrank問題。輸出println在Hackerrank clojure

問題要求我採取輸入作爲

2 
RGRG 
BGYG 

其中圖2是測試例接着2串號。

我已經寫了下面的代碼來獲取輸入並打印它的輸出,其中fullballs?是我的函數:

(defn Start [FuncToCall inputParse outputParse] 
    (let [lines (line-seq (java.io.BufferedReader. *in*)) 
     input (rest lines) 
     times (first lines)] 
    (for [i (range (Integer. times))] 
     (outputParse (FuncToCall (inputParse (nth input i))))) 
    )) 

(Start fullballs? 
     (fn [x] x) 
     (fn [x] 
     (if x 
      (println "True") 
      (println "False")) 
     x)) 

然而,Hackerrank說,沒有東西印在標準輸出。

而且當我嘗試它詮釋cider repl它不是像往常一樣

(False 

False 

false false) 

爲我的兩個測試用例..

這是問題for或者是我的代碼錯了嗎?

+0

發現我應該用'doseq'來代替'for for' – 2014-10-10 11:59:11

回答

1

for是懶惰的。這意味着,除非您強制評估結果,否則不會執行副作用。

這個在你的REPL中起作用的原因是它試圖打印出你的函數的結果。這迫使評估for產生的延遲序列。使用doseq代替。

For further reading

我不明白你的問題的後半部分:「這對我的兩個測試用例來說並不像平常那​​樣。」