【发布时间】:2014-10-07 04:59:09
【问题描述】:
我无法让我的代码对树进行预排序遍历到列表才能工作。树的定义如下:
data Tree a b = Branch b (Tree a b) (Tree a b)
| Leaf a
我对前序遍历的定义如下:
preorder :: (a -> c) -> (b -> c) -> Tree a b -> [c]
preorder f g (Leaf b) = [g b]
preorder f g (Branch a left right) = [f a] ++ preorder f g left ++ preorder f g right
但是我得到的错误是:
Couldn't match type `b' with `a'
`b' is a rigid type variable bound by
the type signature for
preorder :: (a -> c) -> (b -> c) -> Tree a b -> [c]
`a' is a rigid type variable bound by
the type signature for
preorder :: (a -> c) -> (b -> c) -> Tree a b -> [c]
In the first argument of `f', namely `a'
In the expression: f a
In the first argument of `(++)', namely `[f a]'
我知道我的问题是该函数的第一个参数的类型以及它需要如何成为 [c] 类型,但我终生无法弄清楚如何得到它。我尝试了 f a 周围的所有括号组合,没有括号,没有一个能成功运行。
【问题讨论】:
标签: haskell tree traversal preorder