lazy-sequences相关内容

惰性分区-按

我有一个项源,希望单独处理具有相同键函数值的项的运行。在Python中,这将如下所示 for key_val, part in itertools.groupby(src, key_fn): process(key_val, part) 此解决方案完全是惰性的,即如果process不尝试存储整个part的内容,代码将在O(1)内存中运行。 Clojure解决方案 (dos ..
发布时间:2022-09-01 15:37:12 其他开发

如何具体化 Prolog 的回溯状态以执行与“lazy seq"相同的任务?来自 Clojure?

这是一个用 Clojure 编写的数字快速排序算法.它基本上是 "The Joy of Clojure",第 2 版,第 133 页中的快速排序算法.我稍微修改了它以(希望)更好的可读性,因为原始感觉有点太紧凑了:p> (defn qsort-inner [工作](惰性序列(循环[循环工作](让 [[ part & partz ] loopwork ](if-let [[pivot & valu ..
发布时间:2022-01-12 10:30:47 其他开发

Prolog中的惰性列表?

Prolog 中是否可以有惰性列表?类似于以下内容: ones([1 | Y]) :- one(Y). 虽然这显然不像它所写的那样工作. 解决方案 Markus Triska placed here in public域一些代码值得学习: /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P ..
发布时间:2022-01-12 09:56:32 其他开发

Prolog 中的惰性列表?

在 Prolog 中可以有惰性列表吗?类似于以下内容: ones([1 | Y]) :- ones(Y). 虽然这显然不像它写的那样工作. 解决方案 Markus Triska 放置在这里公开domain 一些代码值得研究: /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Prolog 流 ..
发布时间:2022-01-07 19:46:40 其他开发

如何在不强制实现的情况下找到惰性序列的长度?

我目前正在阅读 O'reilly Clojure 编程书,其中关于惰性序列的部分内容如下: 惰性序列有可能(尽管非常罕见)知道其长度,因此在不知道其内容的情况下将其作为计数的结果返回. 我的问题是,这是如何做到的,为什么如此罕见? 遗憾的是,本书在这一部分中没有具体说明这些内容.我个人认为在实现之前知道惰性序列的长度非常有用,例如,在同一页面中是使用 map 使用函数处理的惰性文 ..
发布时间:2022-01-02 23:26:19 其他开发

如何具体化 Prolog 的回溯状态以执行与“lazy seq"相同的任务来自 Clojure?

这是一个用 Clojure 编写的数字的快速排序算法.它基本上是 “The Joy of Clojure",第 2 版,第 133 页中的快速排序算法.为了(希望)更好的可读性,我稍微修改了它,因为原版感觉有点太紧凑了:> (defn qsort-inner [工作](懒惰的序列(循环[循环工作](让 [[ part & partz ] 循环 ](if-let [[pivot & valuez] ..
发布时间:2022-01-02 23:20:47 其他开发

以 Newick 格式懒惰地打印一棵树

我希望以 Newick 格式 打印二叉树,显示每个节点与其父节点的距离.目前我没有遇到以下代码的问题,它使用常规递归,但树太深可能会产生堆栈溢出. (定义树->newick[树](让 [{:keys [id children to-parent]} 树dist (双到父)] ;to-parent 可能是一个理性的(如果孩子(str "(" (tree->newick (first childre ..
发布时间:2022-01-02 23:16:09 其他开发

mapcat 打破懒惰

我有一个产生惰性序列的函数,称为 a-function. 如果我运行代码: (map a-function a-sequence-of-values) 它按预期返回一个惰性序列. 但是当我运行代码时: (mapcat a-function a-sequence-of-values) 它打破了我函数的懒惰.事实上,它把代码变成了 (apply concat (map a-fun ..
发布时间:2022-01-02 23:13:17 其他开发

Clojure 打印懒惰序列

我正在尝试打印我的二叉树,但 Clojure 让我很难正确打印序列. 所以,我有一个节点列表 '(1 2 3) 例如. 在每次迭代中,我想打印出每个元素前后有多个空格的节点. (定义空格 [n](应用 str (重复 n " "))) 太好了,这似乎有效. 所以,假设我有一个 nodes 的列表 '(:a :b :c) 我想在一行上打印出来,如上所述,空格. (printl ..
发布时间:2022-01-02 22:33:26 其他开发

Clojure 中如何实现惰性序列?

我喜欢 Clojure.关于语言,让我困扰的一件事是我不知道惰性序列是如何实现的,或者它们是如何工作的. 我知道惰性序列只评估序列中要求的项目.它是如何做到这一点的? 是什么让惰性序列如此高效以至于它们不会消耗太多堆栈? 为什么可以将递归调用包装在惰性序列中而不是对于大型计算,不再需要堆栈溢出? 惰性序列消耗哪些资源来完成它的工作? 惰性序列在哪些情况下效率低下? 惰性序列在哪 ..
发布时间:2022-01-02 22:30:57 其他开发

如何避免 Clojure 对我想要短路的惰性序列的分块行为?

我有一个很长的、懒惰的序列,我想减少它并懒惰地测试.只要两个顺序元素不是 =(或其他一些谓词)彼此,我就想停止使用列表,因为它的生成成本很高.是的,这听起来像 take-while,但请进一步阅读. 我想写一些像这样简单而优雅的东西(假装every?像reduce一样工作): (every? = (range 100000000)) 但这不会懒惰地工作,因此它挂在无限序列上.我发现这几乎 ..
发布时间:2022-01-02 22:29:40 其他开发

Rust 中的惰性序列生成

如何创建其他语言称为惰性序列或“生成器"函数的函数? 在 Python 中,我可以使用 yield 如下例(来自 Python 的文档)来延迟生成一个序列,该序列可以不使用中间列表的内存的方式迭代: # 生成项目而不是返回列表的生成器def firstn(n):数量 = 0而数量 如何在 Rust 中做类似的事情? 解决方案 Rust 1.0 没有生成器功能,所以你必须手动使用 ..
发布时间:2021-12-25 09:47:59 其他开发

导致堆栈溢出的递归函数

我正在尝试编写一个简单的筛选函数来计算 clojure 中的素数.我已经看到这个关于编写高效筛分函数的问题,但我是还没有到那个地步.现在我只是想写一个非常简单(而且很慢)的筛子.这是我想出的: (defn筛[势素数](if-let [p (第一势)](recur (filter #(not= (mod % p) 0) 电位) (conj primes p))素数)) 对于小范围它工作正常,但会 ..
发布时间:2021-12-16 08:13:48 其他开发

理解递归定义的列表(就 zipWith 而言的 fibs)

我正在学习 Haskell,并且遇到了以下代码: fibs = 0 : 1 : zipWith (+) fibs (tail fibs) 就其工作原理而言,我在解析时遇到了一些麻烦.它非常简洁,我知道不需要更多内容,但我想了解 Haskell 如何在我写作时设法“填写"谎言: 拿 50 条信息 有什么帮助吗? 谢谢! 解决方案 我将稍微解释一下它的内部工作原理.首先,您必须意 ..
发布时间:2021-12-14 12:01:26 其他开发

双流馈送以防止不必要的记忆?

我是 Haskell 的新手,我正在尝试以流处理风格实现 Euler's Sieve. 当我查看 有关素数的 Haskell Wiki 页面时,我发现了一些神秘的流优化技术.在该维基的 3.8 线性合并中: primesLME = 2 : ([3,5..] `minus` joinL [[p*p, p*p+2*p..] | p " 怎么会这样?我不知道它是如何工作的. 解决方案 通 ..

为什么方案中的惰性过滤列表会占用大量内存?

我目前正在学习使用该方案的一些更高级的功能,并且在懒惰列表方面遇到了障碍. 基本上,我正在尝试创建一个无限的,延迟生成的列表,并在其上应用一个惰性过滤器,并且仅采用单个元素.我希望这会消耗很少的内存:过滤器一次只查看一个元素,而无需存储以前的条目.这是我的尝试: (定义lazy-inf-seq(lambda(下一个开始)(延迟(cons开始(lazy-inf-seq(下一个开始)))))) ..