相当于"嵌套匹配"在Rust

时间:2018-03-11 10:30:31

标签: functional-programming rust purely-functional

按照Okasaki的例子,我试图在Rust中实现一个纯功能的红黑树。当我插入一棵红黑树时,我可能不得不插入树中。这是balance函数的Haskell代码:

balance :: Ord a => Color -> Tree a -> a -> Tree a -> Tree a
balance Black (T Red (T Red a x b) y c) z d = T Red (T Black a x b) y (T Black c z d)
balance Black (T Red a x (T Red b y c)) z d = T Red (T Black a x b) y (T Black c z d)
balance Black a x (T Red (T Red b y c) z d) = T Red (T Black a x b) y (T Black c z d)
balance Black a x (T Red b y (T Red c z d)) = T Red (T Black a x b) y (T Black c z d)
balance c l v r = T c l v r

此代码使用嵌套匹配。但是,这在Rust中是不可能的,因为必须使用&#34;盒装&#34;左右分支的表示。我正在使用Rc。这是Tree<A>的数据定义:

#[derive(Clone, Debug, Eq, PartialEq)]
enum Tree<A> {
    E,
    T(Color, Rc<Tree<A>>, A, Rc<Tree<A>>)
}

如何实现等效的#34;嵌套匹配&#34;当我有Rc s?

我很清楚无法匹配Rc s 。相反,我想知道是否有相同的编程习语可以达到同样的效果。

0 个答案:

没有答案