use std::ops::ControlFlow; fn each_step(lo: i64, hi: i64, step: i64, mut f: impl FnMut(i64) -> ControlFlow) -> ControlFlow { let mut i = lo; while i < hi { f(i)?; i += step; } ControlFlow::Continue(()) } fn first_multiple_of_7(lo: i64, hi: i64) -> i64 { match each_step(lo, hi, 3, |it| { if it.rem_euclid(7) == 0 { ControlFlow::Break(it) } else { ControlFlow::Continue(()) } }) { ControlFlow::Break(value) => value, ControlFlow::Continue(()) => -1, } } fn main() {assert_eq!(first_multiple_of_7(1,25),7);assert_eq!(first_multiple_of_7(2,6),-1);assert_eq!(first_multiple_of_7(0,1),0);assert_eq!(first_multiple_of_7(-14,0),-14);}