lazy-sequences相关内容
在Scala中,view允许防止创建全新的集合。 例如In Scala, what does "view" do? 在JavaScript中有类似的东西吗? 我的使用案例: x = inputValue.split(",").map(x => x.trim()).filter(f1).map(f2) 正如您在上面的代码中看到的,将创建两个中间集合。在JavaScript中有什么方法
..
我有一个项源,希望单独处理具有相同键函数值的项的运行。在Python中,这将如下所示 for key_val, part in itertools.groupby(src, key_fn): process(key_val, part) 此解决方案完全是惰性的,即如果process不尝试存储整个part的内容,代码将在O(1)内存中运行。 Clojure解决方案 (dos
..
这是一个用 Clojure 编写的数字快速排序算法.它基本上是 "The Joy of Clojure",第 2 版,第 133 页中的快速排序算法.我稍微修改了它以(希望)更好的可读性,因为原始感觉有点太紧凑了:p> (defn qsort-inner [工作](惰性序列(循环[循环工作](让 [[ part & partz ] loopwork ](if-let [[pivot & valu
..
Prolog 中是否可以有惰性列表?类似于以下内容: ones([1 | Y]) :- one(Y). 虽然这显然不像它所写的那样工作. 解决方案 Markus Triska placed here in public域一些代码值得学习: /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P
..
在 Prolog 中可以有惰性列表吗?类似于以下内容: ones([1 | Y]) :- ones(Y). 虽然这显然不像它写的那样工作. 解决方案 Markus Triska 放置在这里公开domain 一些代码值得研究: /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Prolog 流
..
我目前正在阅读 O'reilly Clojure 编程书,其中关于惰性序列的部分内容如下: 惰性序列有可能(尽管非常罕见)知道其长度,因此在不知道其内容的情况下将其作为计数的结果返回. 我的问题是,这是如何做到的,为什么如此罕见? 遗憾的是,本书在这一部分中没有具体说明这些内容.我个人认为在实现之前知道惰性序列的长度非常有用,例如,在同一页面中是使用 map 使用函数处理的惰性文
..
这是一个用 Clojure 编写的数字的快速排序算法.它基本上是 “The Joy of Clojure",第 2 版,第 133 页中的快速排序算法.为了(希望)更好的可读性,我稍微修改了它,因为原版感觉有点太紧凑了:> (defn qsort-inner [工作](懒惰的序列(循环[循环工作](让 [[ part & partz ] 循环 ](if-let [[pivot & valuez]
..
我希望以 Newick 格式 打印二叉树,显示每个节点与其父节点的距离.目前我没有遇到以下代码的问题,它使用常规递归,但树太深可能会产生堆栈溢出. (定义树->newick[树](让 [{:keys [id children to-parent]} 树dist (双到父)] ;to-parent 可能是一个理性的(如果孩子(str "(" (tree->newick (first childre
..
我有一个产生惰性序列的函数,称为 a-function. 如果我运行代码: (map a-function a-sequence-of-values) 它按预期返回一个惰性序列. 但是当我运行代码时: (mapcat a-function a-sequence-of-values) 它打破了我函数的懒惰.事实上,它把代码变成了 (apply concat (map a-fun
..
是否有一种惯用的方法来确定 LazySeq 是否包含一个元素?从 Clojure 1.5 开始,调用 contains? 会抛出 IllegalArgumentException: IllegalArgumentException 包含?不支持类型:clojure.lang.LazySeqclojure.lang.RT.contains (RT.java:724) 在 1.5 之前,据我所知,
..
我的印象是懒惰的序列总是分块的. =>(取 1 (map #(do (print \.) %) (range)))(................................................0) 正如预期的那样,打印了 32 个点,因为 range 返回的惰性序列被分成 32 个元素块.但是,当我使用自己的函数 get-rss-feeds 而不是 range 尝试此操作时
..
我正在尝试打印我的二叉树,但 Clojure 让我很难正确打印序列. 所以,我有一个节点列表 '(1 2 3) 例如. 在每次迭代中,我想打印出每个元素前后有多个空格的节点. (定义空格 [n](应用 str (重复 n " "))) 太好了,这似乎有效. 所以,假设我有一个 nodes 的列表 '(:a :b :c) 我想在一行上打印出来,如上所述,空格. (printl
..
我喜欢 Clojure.关于语言,让我困扰的一件事是我不知道惰性序列是如何实现的,或者它们是如何工作的. 我知道惰性序列只评估序列中要求的项目.它是如何做到这一点的? 是什么让惰性序列如此高效以至于它们不会消耗太多堆栈? 为什么可以将递归调用包装在惰性序列中而不是对于大型计算,不再需要堆栈溢出? 惰性序列消耗哪些资源来完成它的工作? 惰性序列在哪些情况下效率低下? 惰性序列在哪
..
我有一个很长的、懒惰的序列,我想减少它并懒惰地测试.只要两个顺序元素不是 =(或其他一些谓词)彼此,我就想停止使用列表,因为它的生成成本很高.是的,这听起来像 take-while,但请进一步阅读. 我想写一些像这样简单而优雅的东西(假装every?像reduce一样工作): (every? = (range 100000000)) 但这不会懒惰地工作,因此它挂在无限序列上.我发现这几乎
..
如何创建其他语言称为惰性序列或“生成器"函数的函数? 在 Python 中,我可以使用 yield 如下例(来自 Python 的文档)来延迟生成一个序列,该序列可以不使用中间列表的内存的方式迭代: # 生成项目而不是返回列表的生成器def firstn(n):数量 = 0而数量 如何在 Rust 中做类似的事情? 解决方案 Rust 1.0 没有生成器功能,所以你必须手动使用
..
我正在尝试编写一个简单的筛选函数来计算 clojure 中的素数.我已经看到这个关于编写高效筛分函数的问题,但我是还没有到那个地步.现在我只是想写一个非常简单(而且很慢)的筛子.这是我想出的: (defn筛[势素数](if-let [p (第一势)](recur (filter #(not= (mod % p) 0) 电位) (conj primes p))素数)) 对于小范围它工作正常,但会
..
我正在学习 Haskell,并且遇到了以下代码: fibs = 0 : 1 : zipWith (+) fibs (tail fibs) 就其工作原理而言,我在解析时遇到了一些麻烦.它非常简洁,我知道不需要更多内容,但我想了解 Haskell 如何在我写作时设法“填写"谎言: 拿 50 条信息 有什么帮助吗? 谢谢! 解决方案 我将稍微解释一下它的内部工作原理.首先,您必须意
..
我是 Haskell 的新手,我正在尝试以流处理风格实现 Euler's Sieve. 当我查看 有关素数的 Haskell Wiki 页面时,我发现了一些神秘的流优化技术.在该维基的 3.8 线性合并中: primesLME = 2 : ([3,5..] `minus` joinL [[p*p, p*p+2*p..] | p " 怎么会这样?我不知道它是如何工作的. 解决方案 通
..
这两个接口只定义了一个方法 public operator fun iterator(): Iterator 文档说 Sequence 是为了偷懒.但是 Iterable 是不是也很懒惰(除非有 Collection 支持)? 解决方案 关键区别在于 Iterable 和 Sequence. 对于Sequence,扩展函数在可能的情况下延迟执行,类似于Java Streams中间
..
我目前正在学习使用该方案的一些更高级的功能,并且在懒惰列表方面遇到了障碍. 基本上,我正在尝试创建一个无限的,延迟生成的列表,并在其上应用一个惰性过滤器,并且仅采用单个元素.我希望这会消耗很少的内存:过滤器一次只查看一个元素,而无需存储以前的条目.这是我的尝试: (定义lazy-inf-seq(lambda(下一个开始)(延迟(cons开始(lazy-inf-seq(下一个开始))))))
..