Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.36 KB | None | 0 0
  1. fn trampoline<In, Out, F>(init: In, mut func: F) -> Out
  2. where F: FnMut(In) -> Result<Out, In>
  3. {
  4. let mut arg = init;
  5. loop {
  6. match func(arg) {
  7. Ok(out) => return out,
  8. Err(new) => arg = new,
  9. }
  10. }
  11. }
  12.  
  13. fn main() {
  14. println!("{}", trampoline((5, 1), |(n, acc)| if n <= 1 { Ok(acc) } else { Err((n - 1, acc * n)) }));
  15. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement