Problem 2
Iterator
Pythonならこのようなgeneratorを作りたいかもしれません。
def fibs(): a, b = 0, 1 while True: yield b a, b = b, a+b
Rustでは今のところこのような書き方はできないようです。
(Rustはバージョンでけっこう文法等が違うので、検索してもよくわからないことが多いです)
代わりにIteratorを作ることはできます。
use std::env; struct Fibonacci { a: i64, b: i64 } // 生成 impl Fibonacci { fn new() -> Fibonacci { Fibonacci { a: 0, b: 1 } } } // Iteratorの実装 impl Iterator for Fibonacci { type Item = i64; fn next(&mut self) -> Option<i64> { let x = self.a; self.a = self.b; self.b += x; Some(x) } } fn main() { let args: Vec<String> = env::args().collect(); let n: i64 = args[1].parse().unwrap(); let s: i64 = Fibonacci::new().filter(|&f| f%2 == 0).take_while(|&f| f <= n).sum(); println!("{}", s); }
Iteratorを継承したクラスを作るみたいな感じですね。面倒ですね。