树的Haskell预排序树遍历定义为“数据BB a = L | KBB aaBB a派生显示”

问题描述

这里是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列出这三个值的顺序并不重要。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...