27 lines
577 B
Rust
27 lines
577 B
Rust
use std::cell::Cell;
|
|
|
|
fn a(
|
|
k: i32,
|
|
x1: &dyn Fn() -> i32,
|
|
x2: &dyn Fn() -> i32,
|
|
x3: &dyn Fn() -> i32,
|
|
x4: &dyn Fn() -> i32,
|
|
x5: &dyn Fn() -> i32,
|
|
) -> i32 {
|
|
let k1 = Cell::new(k);
|
|
struct B<'a> {
|
|
f: &'a dyn Fn(&B) -> i32,
|
|
}
|
|
let b = B {
|
|
f: &|b| {
|
|
k1.set(k1.get() - 1);
|
|
return a(k1.get(), &|| (b.f)(b), x1, x2, x3, x4);
|
|
},
|
|
};
|
|
let b = || (b.f)(&b);
|
|
return if k <= 0 { x4() + x5() } else { b() };
|
|
}
|
|
|
|
pub fn main() {
|
|
println!("{}", a(10, &|| 1, &|| -1, &|| -1, &|| 1, &|| 0));
|
|
}
|