首页 > 解决方案 > 无论我尝试多少种不同的方法,都无法编译一些简单的 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)

标签: haskellfunctional-programming

解决方案


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

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)

推荐阅读