enum Nat { Zero, Succ(Box) } // Exercise: implement "to_u32()" as a method // Exercise: implement some other operations (sum, ...) impl Nat { fn new(u: u32) -> Nat { if u == 0 { Nat::Zero } else { Nat::Succ(Box::new(Nat::new(u - 1))) } } fn to_u32(n: &Nat) -> u32 { if let Nat::Succ(prev) = n { 1 + Nat::to_u32(prev) } else { 0 } } } fn main() { let z = Nat::Zero; let u = Nat::new(1); let q = Nat::new(4); let c = Nat::new(100); println!("{}", Nat::to_u32(&z)); println!("{}", Nat::to_u32(&u)); println!("{}", Nat::to_u32(&q)); println!("{}", Nat::to_u32(&c)); }