0
我試圖逐行閱讀文件並將新字符串連接到每行的末尾。爲了測試我已經做到了這一點:Clojure lazy-eval內部應用
(defn read-file
[filename]
(with-open [rdr (clojure.java.io/reader filename)]
(doall (line-seq rdr))))
(apply str ["asdfasdf" (doall (take 1 (read-file filename)))])
如果我只是在一個REPL評估(take 1 (read-file filename))
,我得到的文件的第一行。但是,當我嘗試評估我上面做的時,我得到了"[email protected]"
。
任何人都可以解釋如何強制評估take
讓它不返回懶惰序列?
工作,謝謝。我必須問,doall的文檔字符串表示強制函數的懶惰評估,但是,當我做'(應用str [「asdfasdf」(doall(take 1(read-file filename)))])'我仍然得到懶惰。你能解釋一下嗎? – Nick
lazyseq可以在不轉換爲其他類型的情況下實現。 'doall'實現了整個seq,但你仍然必須像seq那樣對待它。 – Jared314
謝謝,清除了一些東西,我在想這是這樣的,但理解clojure的文檔是天才,本身我認爲:) – Nick