如何在haskell中获取此数据类型的最大值

如何在haskell中获取此数据类型的最大值,haskell,Haskell,这是我的方法 data Arbre = Feuille Int | Noad [Arbre] maximum1 :: Arbre -> Int maximum1 (Feuille a) = a maximum1 (Noad xs) = maximum1 xs... 您的想法是正确的,因为您的数据类型是 包含整数的类型,或 一个递归的列表 因此,如果要检查此结构中所有值的最大值,则必须递归检查每个列表。您希望调用递归中的每一步和下一步之间的最大值 data Arbre = Feuille

这是我的方法

data Arbre = Feuille Int | Noad [Arbre]

maximum1 :: Arbre -> Int
maximum1 (Feuille a) = a
maximum1 (Noad xs) = maximum1 xs...

您的想法是正确的,因为您的数据类型是

  • 包含整数的类型,或
  • 一个递归的列表
  • 因此,如果要检查此结构中所有值的最大值,则必须递归检查每个列表。您希望调用递归中的每一步和下一步之间的最大值

    data Arbre = Feuille Int | Noad [Arbre]
    
    maximum1 :: Arbre -> Int
    maximum1 (Feuille a) = a
    maximum1 (Noad (x:xs)) = max (maximum1 x) (maximum1 (Noad xs))
    maximum1 (Noad []) = 0
    

    棘手的部分是您需要对arbre列表的头部和尾部进行模式匹配,然后在Noad中重新组合尾部,以便能够递归调用函数。还要检查Noad是否为空(此解决方案假定为正整数)。

    为什么称为
    maximum1
    ?对于
    Noad[]
    ,您希望返回什么?另外,您尝试了什么,在哪里遇到了问题?如果使用
    map maximum1 xs
    ,您将得到一个包含每个子树的最大值的列表。然后,您需要计算列表的最大值(并以某种方式处理空的大小写)。这是一种获取树的最大值的方法(Arbre=Tree,Feuille=leaf)。我希望它能够为Noad[]获取树的最大值。我不知道。谢谢您,这很有帮助!