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

时间:2019-10-20 01:18:25

标签: haskell functional-programming

我正在尝试编写一个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)

1 个答案:

答案 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)