trysize (NBranch t (x:xs))
原帖由 jamesr 于 2009-6-26 21:00 发表 谢谢。之前怎么就没发现呢?
原帖由 jamesr 于 2009-6-26 21:00 发表
谢谢。之前怎么就没发现呢?
呵呵,慢慢来吧
There is no royal road to Haskell.—Euclid1
[ 本帖最后由 MMMIX 于 2009-6-26 21:11 编辑 ]
原帖由 jamesr 于 2009-6-26 11:27 发表 见代码:data NTree t = NLeaf t | NBranch t [(NTree t)] deriving Showinstance Tree (NTree t) where size (NLeaf t) = 1 size (NBranch t x:xs) = 1 + size x + size xs
原帖由 jamesr 于 2009-6-26 11:27 发表 见代码:
data NTree t = NLeaf t | NBranch t [(NTree t)] deriving Show
instance Tree (NTree t) where size (NLeaf t) = 1 size (NBranch t x:xs) = 1 + size x + size xs
你这个 size 的定义有问题,size 的类型是size :: (Tree t) -> Int
可是在 size xs 中, xs 的类型是 [Tree t], 把 size xs 换成foldr (s n -> size s + n) 0 xs
就可以了。当然,size (NBranch t x:xs) 也要改成 size (NBranch t (x:xs))
原帖由 jamesr 于 2009-6-26 13:07 发表 还是不对啊:
class Tree a 的定义呢?贴出来看看。
想实现一个度为任意的树,有没有其他好的结构?
你这个结构就挺好的么,可能就是有效率方面的问题,可以看看 zipper,好像针对这个有优化,还没来得及看呢。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
呵呵,慢慢来吧
[ 本帖最后由 MMMIX 于 2009-6-26 21:11 编辑 ]
你这个 size 的定义有问题,size 的类型是
size :: (Tree t) -> Int
可是在 size xs 中, xs 的类型是 [Tree t], 把 size xs 换成
foldr (s n -> size s + n) 0 xs
就可以了。当然,size (NBranch t x:xs) 也要改成 size (NBranch t (x:xs))
class Tree a 的定义呢?贴出来看看。
你这个结构就挺好的么,可能就是有效率方面的问题,可以看看 zipper,好像针对这个有优化,还没来得及看呢。