在Haskell中的Numbers类型列表中查找最大值



我对Haskell很陌生,正试图在包含类型Numbers的列表列表中找到最大值。数字定义为:

data Numbers = StrNumber String | IntNumber Int
deriving (Show, Read, Eq)

我已经有一个函数,可以在int类型的列表列表中找到最大int值。

nested_max :: [[Int]] -> Int
nested_max [] = minBound::Int
nested_max list = maxL (map maxL list)
where
maxL xs = foldr gt (minBound::Int) xs
gt x y = if x < y then y else x

并且可以使用getInt将数字转换为int。

getInt x = read x::Int

我一直试图将getInt映射到正在传递的列表中的每个值,然后在该列表上应用nested_max,但不断出现错误
这就是我一直在尝试的:

getInt x = read x::Int
to_int :: [[Numbers]] -> [[Int]]
to_int list = map (x-> getInt x) list

程序应执行的操作示例是…
输入:find_max_number[[StrNumber"9",IntNumber 2,IntNumber 8],[StrNumber"4",IntNumber5],[IntNumber 6,StrNumber"7"],[],[StrNumber&"8"]]
输出:9

以下是我的尝试:

data Numbers
= StrNumber String
| IntNumber Int
nestedMax :: [[Numbers]] -> Int
nestedMax = maximum . map toInt . concat
where toInt (StrNumber x) = read x
toInt (IntNumber x) = x
main = do
print $ nestedMax [[StrNumber "9",IntNumber 2,IntNumber 8],[StrNumber "4",IntNumber 5],[IntNumber 6,StrNumber "7"],[],[StrNumber "8"]] -- 9

我希望代码简单明了。。。

最新更新