我正在尝试编写一个Haskell函数,该函数接受一棵树,并将每个节点替换为一对,其中包含该节点的子树的高度以及原始节点
根据我在最后一行代码中放置括号的位置,我会遇到各种不同的错误。我知道我的身高功能可以正常工作,因为我之前已经将它用于其他功能。我显然没有正确地将事物组合在一起,因为我已经得到了从不给max足够多的参数到对成对的太多参数的所有东西。请帮忙!我真的被困在这里并且没有任何进展,因为我只是来回移动括号。
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)
答案 0 :(得分:5)
调用带有两个参数的函数的方法是我用空格分隔它们,如下所示:
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)