我有以下数据类型
data Tree a -> Node a [Tree a]
并希望找到所有节点的标签和树的高度。
这是我所做的:
height:: Tree a -> Integer height
(Node _ (x:xs)) = 1 + maximum height' (x:xs)
height' (x:xs) = map height (x:xs)
Run Code Online (Sandbox Code Playgroud)
我希望height'会返回映射到x:xs的高度列表,并尝试查找该值的最大值,但ghci不赞成此处的map函数。
您可以使用以下代码在一个衬里中编写此代码:
height :: Integral i => Tree a -> i
height (Node _ cs) = 1 + maximum (0 : map height cs)
Run Code Online (Sandbox Code Playgroud)
这里的每一个节点,因此,我们回到1 + …那里…是最大的0,并且这些节点的孩子的高度。我们在这里0用来防止这种情况,如果Node没有孩子的话,maximum将在一个空列表上工作,从而引发错误。
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |