7个版本
0.1.6 | 2021年1月8日 |
---|---|
0.1.5 | 2021年1月8日 |
#1907 in 算法
4KB
tiny_tco
一个微小的 dirt 简单 no_std 尾调用优化库。
工作原理
tco 函数返回一个实现了平凡循环的闭包。
let mut c: TCO<A, B> = TCO::Rec(p);
loop {
match c {
TCO::Rec(i) => c = fun(i),
TCO::Ret(b) => return b,
}
}
如何使用
// y is the acoumulator for the value
let fact = tco(|(x,y): (i32,i32)|
if (x == 0) {
// if we have reached 0 return computed value
TCO::Ret(y)
} else {
// reduce x by 1, and multiplyx value by x
TCO::Rec((x-1,y*x))
},
);
assert_eq!(fact((3,1)),6);