【问题标题】:Remove all Empty's Haskell删除所有 Empty 的 Haskell
【发布时间】: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 当然。抱歉打错了。我编辑了我的问题

标签: haskell tree fork case


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多