#tail #call #optimization #no-std #tco

no-std tiny_tco

一个微小的 dirt 简单 no_std 尾调用优化库

7个版本

0.1.6 2021年1月8日
0.1.5 2021年1月8日

#1907 in 算法

LGPL-2.1-or-later

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);

无运行时依赖