【发布时间】:2014-02-08 15:53:42
【问题描述】:
考虑以下类型来表示树:
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?
我应该包括案例 clean Fork Empty Empty = Empty 吗? 这没有多大意义,因为我想删除整个 Fork 而不是在那里放一个 Empty
【问题讨论】:
-
你说你不知道你的实现是否适用于给定的案例——你没有测试过吗?另外,我建议您更详细地指定您真正想要的内容。特别是,您想用其他东西替换
Emptys?或者更新树的结构?如果有,具体是怎样的? -
@PetrPudlák 我想通过删除所有 Empty 来更新树的结构
-
你的意思是
|Fork (Tree a) (Tree a)? -
@TomEllis 当然。抱歉打错了。我编辑了我的问题