问题描述
这里是Haskell的新手。尝试弄清楚在给定各种树定义的情况下如何进行预遍历。我已经看到了一棵定义为
data BB a = L | K a (BB a) (BB a) deriving Show
prefixCollect L = []
prefixCollect(K w l r) = w : prefixCollect l ++ prefixCollect r
但是,如果树的定义不同,我不确定如何执行相同的操作:
data BB a = L | K (BB a) a (BB a) deriving Show
吗?
可以请人帮忙吗?
解决方法
在定义函数的方式上几乎没有区别;类型定义的差异只会改变您对参数进行模式匹配的方式。
prefixCollect L = []
-- K l w r instead of K w l r
prefixCollect (K l w r) = w : prefixCollect l ++ prefixCollect r
两个定义都以完全相同的方式定义一棵树:作为一个由值和两个子树组成的节点。数据构造函数K
列出这三个值的顺序并不重要。