Haskell的iterate
函数反复将一个函数应用于一个值以生成一系列值。例如,将(^ 2)应用于2会生成2,2 ^ 2,2 ^ 2 ^ 2,2 ^ 2 ^ 2 ^ 2,...(2,4,16,16,256,...)
Rust是否有同等功能?
答案 0 :(得分:5)
这在标准库中不存在,但是itertools板条箱有iterate
创建一个新的迭代器,该迭代器将函数无限地应用于值并产生结果。
use itertools::iterate;
itertools::assert_equal(iterate(1, |&i| i * 3).take(5), vec![1, 3, 9, 27, 81]);
答案 1 :(得分:0)
itertools::iterate
似乎就是您想要的。
答案 2 :(得分:0)
从Rust 1.34开始,您可以使用std::iter::successors
因此,对于此问题,您将执行以下操作:
use std::iter::successors;
fn main() {
let v = successors(Some(2u8), |n| n.checked_mul(10)).collect::<Vec<_>>();
assert_eq!(v, vec![2, 20, 200]);
for i in successors(Some(2_u32), |n| n.checked_mul(10)) {
println!("{}", i);
}
}
还要看看std::iter::from_fn
,它可能会更强大。