lazy-sequences

    3熱度

    2回答

    我實現了一個函數,該函數將給定輸入集合的n元組作爲惰性seq返回。 (defn gen-ngrams [n coll] (if (>= (count coll) n) (lazy-seq (cons (take n coll) (gen-ngrams n (rest coll)))))) 當我用更大的輸入集合調用此函數時,我期望看到執行時間線性增加。然而,我觀察時

    2熱度

    3回答

    我有幾個字符串: (def a "some random string") (def b "this is a text") 現在我想將它們串聯的部分創建一個字符串「一些文本」。不幸的是,下面的兩個字符串都不起作用。 (clojure.string/join " " [(take 4 a) (take-last 4 b)]) (str (take 4 a) " " (take-last 4

    2熱度

    3回答

    我不明白爲什麼這個懶惰素數序列的定義會導致不終止。我得到的堆棧跟蹤不是很有用(我對clojure的一個抱怨是鈍的堆棧跟蹤)。 (declare naturals is-prime? primes) (defn naturals ([] (naturals 1)) ([n] (lazy-seq (cons n (naturals (inc n)))))) (defn is

    5熱度

    1回答

    運行此按預期工作: (defn long-seq [n] (lazy-seq (cons (list n {:somekey (* n 2)}) (long-seq (+ n 1))))) (take 3 (long-seq 3)) ; => ((3 {:somekey 6}) (4 {:somekey 8}) (5 {:somekey 10})) 但

    4熱度

    4回答

    我試圖瞭解clojure的懶惰序列是懶惰的,當工作發生時,以及我如何影響這些事情。 user=> (def lz-seq (map #(do (println "fn call!") (identity %)) (range 4))) #'user/lz-seq user=> (let [[a b] lz-seq]) fn call! fn call! fn call! fn call

    6熱度

    1回答

    我寫道: (fn r [f xs] (lazy-seq (if (empty? xs) '() (cons (f (first xs)) (r f (rest xs)))))) 解決4clojure.com的問題#118:http://www.4clojure.com/problem/118 它要求重新實現地圖而不使用地圖等和溶液流測試(我不知道它是否正

    2熱度

    1回答

    我試圖通過從地圖操作返回到另一個地圖操作(懶惰)序列,這樣我可以查找元素在第一個序列中。該代碼解析來自文本文件(以行/列格式)的一些足球裝置,清理它,然後返回地圖。 下面是代碼: (ns fixtures.test.lazytest (:require [clojure.string :as str]) (:use [clojure.test])) (defn- colum

    14熱度

    3回答

    我的印象是懶惰的seqs總是被分塊。 => (take 1 (map #(do (print \.) %) (range))) (................................0) 如所預期的32點被打印,因爲由range返回的懶惰SEQ分塊成32個元件塊。然而,不是range當我嘗試這跟我自己的函數get-rss-feeds,懶惰序列不再分塊: => (take 1 (m

    0熱度

    2回答

    我經常使用數組索引是從複雜的用戶指定集合中生成的多維數組。 我正在尋找一個庫,它具有用任意數量的索引表示複雜集合的類以及任意複雜的謂詞。給定一個描述,所需的輸出將是一個發生器。該發生器將依次產生對應於多維數組索引的dicts或tuples。 這樣的圖書館是否存在? 例 假設我們有以下用戶指定的組(在set-builder notation),其代表一些數組變量x[i][j]的索引: {i的1..1

    2熱度

    1回答

    當在工作中對一些Clojure代碼進行壓力測試時,我發現在迭代大型數據集時,堆空間耗盡。我最終設法將這些問題追溯到Clojure的doseq函數的組合,以及對懶惰序列的實現。 這是最少的代碼片段,通過耗盡可用堆空間崩潰的Clojure: (doseq [e (take 1000000000 (iterate inc 1))] (identity e)) 爲doseq的文件明確指出它不保留偷懶序