0
让我们有一个枚举的lambda项:堆积参考/反引用符号
#[deriving(Show, Clone, Eq, PartialEq)]
enum Term {
Var(uint),
App(Box<Term>, Box<Term>),
Lam(uint, Box<Term>)
}
我写了简单的递归函数我能想到的:
fn size(t: &Term) -> uint {
match *t {
Var(_) => 1,
App(ref f, ref x) => 1 + size(&**f) + size(&**x),
Lam(_, ref t) => 1 + size(&**t)
}
}
是&**
-s不可避免的吗?在这种简单的情况下,我发现三个运营商有点多。另外,如果我想突变递归调用变成&mut**x
,这更是一口。