无法获得一些简单的Haskell代码来编译,无论我尝试多少种不同的方式



我正在尝试编写一个 Haskell 函数,该函数接收一棵树,并将每个节点替换为包含该节点处子树高度的一对,以及原始节点

根据我在最后一行代码中放置括号的位置,我会收到各种不同的错误。我知道我的身高函数有效,因为我以前曾将其用于不同的函数。我显然没有正确地将事物组合在一起,因为我得到了从没有给最大值足够的参数到给配对太多参数的所有东西。请帮忙!我真的被困在这里,没有任何进展,因为我只是来回移动括号。

data Tree a = Tip | Bin (Tree a) a (Tree a) deriving (Show, Eq)
getHeight :: Tree a -> Integer
getHeight Tip = 0
getHeight (Bin l _ r) = (max (getHeight l) (getHeight r)) +1
pairs :: Tree a -> Tree (Integer, a)
pairs Tip = Tip
pairs (Bin l x r) = (Bin (pairs l) ((max (left right)) x) (pairs r))
where left = (getHeight l)
right = (getHeight r)

调用带有两个参数的函数的方法是用空格分隔它们,如下所示:

f x y

或者,在您的情况下,这将是:

max left right

构造一对的方法是使用括号和逗号,如下所示:

(42, "foo")

或者,在您的情况下,这将是:

(max left right, x)

总结所有这些,这一行应该是:

pairs (Bin l x r) = Bin (pairs l) (max left right, x) (pairs r)

最新更新