First-class functions: Difference between revisions

Content added Content deleted
(→‎{{header|Rust}}: Removed duplicate line)
(→‎{{header|Rust}}: Use blowfish operator)
Line 2,222: Line 2,222:
let invlist: [&Fn(f64) -> f64; 3] = [&cube_root, &f64::asin, &f64::acos];
let invlist: [&Fn(f64) -> f64; 3] = [&cube_root, &f64::asin, &f64::acos];


let v: Vec<f64> = flist.iter()
let result = flist.iter()
.zip(&invlist)
.zip(&invlist)
.map(|(f,i)| compose(f,i)(0.5))
.map(|(f,i)| compose(f,i)(0.5))
.collect();
.collect::<Vec<_>>();

println!("{:?}", v);
println!("{:?}", result);


}
}
Line 2,236: Line 2,237:
move |x: T| g(f(x))
move |x: T| g(f(x))


}</lang>
}

/*
This is how compose would be written in stable Rust
fn compose<'a, F, G, T, U, V>(f: F, g: G) -> Box<Fn(T) -> V>
where F: 'a + Fn(T) -> U,
G: 'a + Fn(U) -> V,
{
Box::new(move |x: T| g(f(x)))

}
*/</lang>


=={{header|Scala}}==
=={{header|Scala}}==