问题标签 [lazy-sequences]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - mapM 的懒惰版本
假设,我在使用 IO 时得到了大量的项目列表:
现在,我正在尝试fn :: a -> IO b
申请as
:
mapM
有 type mapM :: Monad m => (a -> m b) -> [a] -> m [b]
,这就是我在类型匹配方面所需要的。但它会在内存中构建所有链,直到返回结果。我正在寻找类似的mapM
,它将懒惰地工作,以便我可以bs
在 tail 仍在构建时使用 head of。
haskell - 我可以在 Haskell 中作为单个 IO 操作懒惰地读取 n 个文件吗?
如何使用恒定内存懒惰地将多个文件作为单个 ByteString 读取?
我目前有以下实现,但根据我从分析中看到的以及我的理解,我将以n-1
内存中的文件结束。
我知道这里的缺陷是我正在应用 IO 操作然后重新包装它们,所以我认为我需要的是一种在foldl1 joinIOStrings
不应用它们的情况下替换它们的方法。
clojure - 在重复处停止和拆分生成的序列 - clojure
我正在尝试制作一个只会生成值的序列,直到它找到以下条件并返回列出的结果:
案例头 =
- 0 - 返回 {:origin [除 0 之外的所有生成] :pattern 0}
- 1 - 返回 {:origin nil :pattern [all-generated-values] }
- 重复值 - {:origin [values-before-repeat] :pattern [values-after-repeat]
{
在到达行尾之前停止的案例示例:
[9 8 4 5 6 7 4 ] - 重复“4”,因此停止。返回前面作为原点,其余作为模式。
[4 5 6 1] - 找到一个“1”所以停止,所以将所有内容作为模式返回
[3 0 ] - 找到一个 '0' 所以停止
:else 如果序列达到 x - 1 的长度:
问题
我已经成功地使用 partition-by 在找到重复值的点拆分组,但我想懒惰地这样做。有什么方法可以使用 take-while、condp 或 for 循环的 :while 子句来创建一个在发现重复时进行分区的条件?
一些尝试
# 更新
我真正想做的是找出一个值是否重复并在不使用索引的情况下对 seq 进行分区。那可能吗?像这样的东西-
{
}
clojure - 了解 Clojure 中延迟斐波那契实现的执行
我试图了解以下代码的执行:
这就是我希望执行的样子
这显然是不正确的,因为结果是错误的。我能想到的唯一产生正确结果的执行是:
这是执行过程中头部和尾部状态的正确“表示”吗?如果是这样,为什么(rest fibs)
返回单个项目?是因为像 (rest (rest (rest [1 1 2 3]))) 这样的递归调用吗?
clojure - 惰性序列的实现时序
为什么是输出
不是
?
scala - 在可遍历视图上执行 foldLeft 时,Scala 中的类型差异错误
Traversable
我正在尝试使用运算符在 Scala 中连接一系列视图,foldLeft
并且遇到了我不理解的类型差异错误。
我可以像这样reduce
连接一个Traversable
视图列表。
(请注意,我必须在reduce
参数上写类型注释:reduce(_ ++ _)
不编译。我不明白为什么,也希望能得到解释。)
我还可以将列表分成头部和尾部并将它们连接起来。
但是,如果我尝试对 a 做同样的事情,foldLeft
我会得到类型差异错误。
我怀疑这个问题与存在类型有关Traversable[_]
,但我无法弄清楚我到底做错了什么。我在上面的表达式中尝试了各种类型签名,但无济于事。从 Stackoverflow 上的其他问题来看, 的类型有些棘手foldLeft
,但我找不到解决此问题的问题。
为了比较,相同的算法Stream
可以顺利运行。
以上是我想要做的,除了我想使用视图而不是Stream
因为我不需要记住我的所有结果。
这似乎是一个奇怪的要求。我想这样做的原因foldLeft
是因为执行视图提供Traversable
了一种有效的方法来实现惰性深度优先搜索。
haskell - double stream feed to prevent unneeded memoization?
I'm new to Haskell and I'm trying to implement Euler's Sieve in stream processing style.
When I checked the Haskell Wiki page about prime numbers, I found some mysterious optimization technique for streams. In 3.8 Linear merging of that wiki:
And it says
“<strong>The double primes feed is introduced here to prevent unneeded memoization and thus prevent memory leak, as per Melissa O'Neill's code.”</p>
How could this be? I can't figure out how it works.
haskell - 流式处理中的高效欧拉筛
欧拉筛比埃拉托色尼筛具有更好的渐近复杂度,并且可以用命令式语言简单地实现。
我想知道是否有任何方法可以用流优雅地实现它。我已经检查了haskell wiki 关于素数的信息,但是这两种实现比该 wiki 中的其他筛子(甚至是试除法!)慢数百倍。
所以我尝试自己写:
minus
类似于minus
in Data.List.Ord
。
takeWhile'
与 类似takeWhile
,但有细微差别:takeWhile
删除不满足谓词的第一个元素;takeWhile'
会接受的。
lsp i
返回 i 的有限乘积流,素数不超过 i 的最小素数。
可悲的是,我的实现运行速度非常慢......而且我找不到罪魁祸首。
无论如何,是否有可能以流处理方式实现高效的欧拉筛?还是该算法具有与流的本质相反的固有特性?
clojure - 将 LazySeqs 组合成一个地图集合
我正在尝试将几个 LazySeq 组合成一个地图集合。
进入
保证 LazySeq 的长度相同。这样做的功能性方法是什么?
stream - 方案中的流 - 通过方案中的流映射定义整数
如何通过 Scheme 中的流映射定义整数: