gpt4 book ai didi

haskell - 这种折叠和迭代的模式是什么?

转载 作者:行者123 更新时间:2023-12-04 13:34:01 25 4
gpt4 key购买 nike

想象一下,您需要折叠一个序列,并且还想知道该范围内几个点的中间值。这就是我用来做这个的:

[a,b,c] = map fst . tail $ chain [g i, g j, g k] (zero, sequence)

g :: Integer -> (a,b) -> (a,b)

chain (f:fs) x = x : chain fs (f x)
chain [] x = [x]

函数 g消耗输入序列的指定部分(长度为 ij 等),从某个初始值开始并产生相同类型的结果,以馈送到下一次调用。对于从开始和相同初始值开始的不同长度多次使用该序列将是低效的,当然在时间和空间方面都是如此。

所以一方面我们折叠这个整数序列——序列上的中间点;另一方面,我们迭代这个函数, g .它是什么?我在这里缺少一些基本的东西吗?这可以通过折叠等常规轨道以某种方式表达吗?

编辑:已解决:以上很简单
[a,b,c] = map fst . tail $ scanl (flip g) (zero, sequence) [i, j, k] 

有趣的是,可修改的迭代实际上是如何折叠修改器列表的。

最佳答案

试试 scanl : http://www.haskell.org/hoogle/?hoogle=scanl

scanl is similar to foldl, but returns a list of successive reduced values from the left:

scanl f z [x1, x2, ...] == [z, z `f` x1, (z `f` x1) `f` x2, ...]

Note that

last (scanl f z xs) == foldl f z xs

关于haskell - 这种折叠和迭代的模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9760823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com