Function odds::fix [] [src]

pub fn fix<T, R, F>(init: T, closure: F) -> R where
    F: Fn(Fix<T, R>, T) -> R, 

Fixpoint combinator for rust closures, generalized over the return type.

This is a wrapper function that uses the Fix type. The recursive closure has two arguments, Fix and the argument type T.

In Fix<T, R>, T is the argument type, and R is the return type, R defaults to T.

Calling the Fix value only supports function call notation with the nightly channel and the crate feature ‘unstable’ enabled; use the .call() method otherwise.

This helper function makes the type inference work out well.

use odds::fix;
 
assert_eq!(120, fix(5, |f, x| if x == 0 { 1 } else { x * f.call(x - 1) }));

let data = [true, false];
assert!(!fix(&data[..], |f, x| {
    x.len() == 0 || x[0] && f.call(&x[1..])
}));