考虑以下类型来表示树:
data Tree a =Empty
|Leaf a
|Fork (Tree a) (Tree a)
我需要帮助定义从非空树中删除所有空的函数clean :: Tree a -> Tree a
。当树中没有元素时,该函数应返回Empty。
注意:可能的树是Fork Empty Empty
这是我到目前为止所尝试的内容,但我不知道它是否适用于上述情况:
clean :: Tree a -> Tree a
clean Leaf x = Leaf x
clean Fork Empty r = r
clean Fork l Empty = r
clean Fork l r = aux l r --If both left and right are empty, I can't fork.
aux :: Tree a -> Tree a -> Tree a
aux l r = if (clean l)==Empty && (clean r)==Empty
then Empty else Fork (clean l) (clean r) --I am not sure about this case?
我应该包括案例清洁叉空空=空吗? 这没有多大意义,因为我想删除整个Fork而不是放空
答案 0 :(得分:1)
我认为这应该有用(我现在不能尝试):
clean :: Tree a -> Tree a
clean (Fork l r) = f (clean l) (clean r) where
f Empty r = r
f l Empty = l
f l r = Fork l r
clean x = x