1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use ad_hoc_iterator::{iterate, iterator_from};

fn count_to(n: usize) -> impl Iterator<Item = usize> {
    let mut i = 0;
    iterate! {
        if i < n {
            i += 1;
            Some(i-1)
        } else {
            None
        }
    }
}

fn count_from_to(n: usize, m: usize) -> impl Iterator<Item = usize> {
    let mut i = n;
    iterator_from(move || {
        if i < m {
            i += 1;
            Some(i - 1)
        } else {
            None
        }
    })
}

fn main() {
    for i in count_to(10) {
        println!("{}", i);
    }

    println!("---");

    for i in count_from_to(5, 15) {
        println!("{}", i);
    }
}