Haskell 定义为 "data BB a = L | K (BB a) a (BB a) deriving (Show)" 的树的预序树遍历

Haskell preorder tree traversal for tree defined as "data BB a = L | K (BB a) a (BB a) deriving (Show)"

这里是 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 ?

有人可以帮忙吗?

您定义函数的方式几乎没有区别;类型定义的差异只会改变你pattern-match反对论点的方式。

prefixCollect L = []
-- K l w r instead of K w l r
prefixCollect (K l w r) = w : prefixCollect l ++ prefixCollect r

两种定义都以完全相同的方式定义树:作为由一个值和两个子树组成的节点。数据构造器 K 列出这三个值的顺序并不重要。