作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(a, b)) -> a -6ren">
我遇到了一种模式,我从种子值 x
开始。并在每一步生成一个新的种子值和一个要输出的值。我想要的最终结果是输出值列表。这可以用以下函数表示:
my_iter :: (a -> (a, b)) -> a -> [b]
my_iter f x = y : my_iter f x'
where (x',y) = f x
fibs:: [Integer]
fibs = my_iter (\(a,b) -> let c = a+b in ((b, c), c)) (0,1)
-- [1, 2, 3, 5, 8...
iterate
来自Prelude,但它们也有一些不足之处。
my_iter f x = map f2 $ iterate f1 x
where f1 = fst . f
f2 = snd . f
my_iter f x = map snd . tail $ iterate (f.fst) (x, undefined)
最佳答案
如前所述,您想要的功能是 unfoldr
.顾名思义,它与foldr
相反。 ,但确切地了解为什么这是真的可能会很有启发性。这是 foldr
的类型:
(a -> b -> b) -> b -> [a] -> b
b
类型的方法。 ,并对应于列表的两个数据构造函数:
[] :: [a]
(:) :: a -> [a] -> [a]
[a]
替换为
b
.注意
[]
案例产生
b
在没有输入的情况下,我们可以将两者合并为一个函数,取
Maybe (a, b)
作为输入。
(Maybe (a, b) -> b) -> ([a] -> b)
(b -> Maybe (a, b)) -> (b -> [a])
unfoldr
的类型.
关于haskell - 如果 "output"值与被迭代的值不同,那么前奏迭代的替代方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12590332/
在序曲中, > :load foo.hs > -- before edit > :edit foo.hs ... Edit and save file > -- But before edit > :
我安装了 emacs prelude .我主要使用它在 C++ 中进行编辑。我拥有我想要编辑的大部分内容,但缺少一个。 我想使用 gnu global,所以我通过 M-x list-packages
我是一名优秀的程序员,十分优秀!