I am having a hard time trying to figure out what is going on here.
fn ntimes(f: &fn(int) -> int, n: int) -> &fn(int) -> int {
match n {
0 => &|x| { x },
_ => &|x| { f(x) },
_ => &|x|
{
let nf = ntimes(f, n - 1);
nf(f(x))
},
}
}
fn double(a: int) -> int {
a * 2
}
fn main() {
let quadruple = ntimes(double, 2);
println(format!("quad = {:d}", quadruple(2)));
}
When I compile it, I get this error message:
$ rustc --version
rustc 0.9-pre (950add4 2013-10-26 02:16:08 -0700)
host: x86_64-apple-darwin
$ rustc fn1.rs
fn1.rs:2:4: 10:5 error: mismatched types: expected
`&fn<no-bounds>(int) -> int` but found `&&fn<no-bounds>(int) -> int`
(expected fn but found &-ptr)
fn1.rs:2 match n {
fn1.rs:3 0 => &|x| { x },
fn1.rs:4 _ => &|x| { f(x) },
fn1.rs:5 _ => &|x|
fn1.rs:6 {
fn1.rs:7 let nf = ntimes(f, n - 1);
...
error: aborting due to previous error
task '<unnamed>' failed at 'explicit failure',
/Users/rkrishnan/src/rust/src/libsyntax/diagnostic.rs:101
task '<unnamed>' failed at 'explicit failure',
/Users/rkrishnan/src/rust/src/librustc/rustc.rs:396
Can someone help me understand what is going on here? I tried omitting
the return type of ntimes and let compiler try to infer the type. The
only change is in the first line of the code omitting the return type
of ntimes. But I then get an error about quadruple function. It says
that quadruple is a void.
Thanks.
--
Ramakrishnan
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev