lazy-sequences

    8熱度

    2回答

    我正在用Clojure編寫一個簡單的桌面搜索引擎,作爲了解更多關於該語言的一種方式。到目前爲止,我的程序在文本處理階段的表現非常糟糕。 在文本處理我已經到: 清理不需要的字符; 將字符串轉換爲小寫; 拆分文檔以獲取單詞列表; 構建將每個單詞與其文檔中的出現相關聯的映射。 下面是代碼: (ns txt-processing.core (:require [clojure.java.io :

    7熱度

    1回答

    我查看了基本上一直創建惰性序列的地圖源代碼。我認爲迭代集合並添加到瞬態矢量會更快,但顯然不是。我對clojures表現行爲有什麼不瞭解? ;=> (time (do-with/(range 1 1000) (range 1 1000))) ;"Elapsed time: 23.1808 msecs" ; ; vs ;=> (time (doall (map #(/ %1 %2) (rang

    5熱度

    1回答

    在處理seq中的每個元素時,我通常使用first和rest。 但是,這些將導致lazy-seq通過調用參數seq而失去其「懶惰」。我的解決方案一直使用(first (take 1 coll))和(drop 1 coll)來代替lazy-seq s,而我認爲drop 1就好了,我不是特別喜歡撥打first和take來獲得第一個元素。 有沒有更習慣的方式來做到這一點?

    2熱度

    3回答

    我似乎有clojure I/O(或類型系統)令人討厭的問題。問題的關鍵是,這個功能,我希望能消耗字符串和數字或字符串的集合的集合,並返回與數字相關的字符串的字典中,像 (costlist '('("Milk" 4) '("Bread" 2) '("Milk"))) 給 {"Milk" 4, "Bread" 2 } 定義通過 (defn costlist [lst] ;returns

    20熱度

    3回答

    我怎麼能創造什麼其他語言調用一個懶惰序列或「發電機」的功能? 在Python,我可以使用yield如在下面的例子中(從Python的文檔)以懶惰地生成的序列,所以可迭代中不使用中介列表的存儲器中的方式: # a generator that yields items instead of returning a list def firstn(n): num = 0 whil

    3熱度

    1回答

    未實現懶-seq的一步,我有一個懶序列,其中每個項目需要一定的時間來計算: (defn gen-lazy-seq [size] (for [i (range size)] (do (Thread/sleep 1000) (rand-int 10)))) 是否有可能評估一步此序列步驟並打印結果。當我試着使用for或doseq Clojure的處理總是實

    5熱度

    1回答

    給定一個輸入流,我希望以字節數組(塊)的形式創建一個惰性的數據序列。這裏是我的嘗試: (defn- read-or-nil [stream] (let [buf (byte-array 2)] (when-not (= -1 (.read stream buf)) buf))) (defn byte-chunk-seq [stream] (cons (

    2熱度

    1回答

    我嘗試使用Node.js的 DIR /文件結構來實現鏈表結構正在讀取文件系統目錄樹: DIR1 DIR2R file1 file2 file3 … - >列表結構: ("DIR1" ("DIR2" "file1" "file2" "file3" …)) DIR() //looks like a C function file //look

    2熱度

    1回答

    我正在玩懶惰列表,似乎無法弄清楚這一點。 我認爲我可以通過將它作爲一個大的遞歸函數來解決我的問題,這個函數可以完成所有必要的工作,但是我想編寫一個簡單的函數。 我會嘗試寫一個簡單的例子,應該翻譯成我的問題很容易: (defn numbers ([] (numbers 1)) ([n] (cons n (lazy-seq (numbers (inc n)))))) (defn

    4熱度

    1回答

    我想實現SICP部分懶惰流3.5.1 首先,我定義這兩個函數 (defmacro delay (form) `(lambda() ,form)) (defun force (form) (when form (funcall form))) 當我們稱之爲: (force (delay '(+ 1 2))) ;;=> (+ 1 2) (force (del