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
,這更是一口。