【发布时间】:2021-12-19 17:58:55
【问题描述】:
我正在尝试使用 foldTree 定义一个 minTree 函数:
foldTree :: (b -> a -> b -> b) -> b -> Tree a -> b
foldTree f e Leaf = e
foldTree f e (Node left x right) = f (foldTree f e left) x (foldTree f e right)
这是我目前所拥有的。
minTree :: (Ord a) => Tree a -> Maybe a
minTree f e Leaf = e
minTree tree = foldTree f e tree
where
f x nothing = Just x
f x (Just y) = Just (min x y)
e = Nothing
但是这段代码不起作用,并给出了一些我不明白如何修复的错误。有人可以帮我找出问题所在以及如何解决它。
【问题讨论】:
-
nothing是一个类似于z的变量。你的意思可能是Nothing。保持启用警告以使 GHC 发现这些类型的错误。此外,f必须采用 3 个参数才能在foldTree中使用。最后,总是发布错误!不发布错误是在强迫我们猜测它,使我们的答案不太准确。 -
定义中
minTree的参数个数不符合签名中的参数个数,在第二行。 -
foldTree基本上是foldr在Foldable实例中的定义,您只需使用预定义的minimum函数即可。 -
(尽管
minTree在将非空树传递给minimum之前仍然需要单独处理一棵空树。)
标签: haskell binary-tree