在 Haskell 中的数字类型列表列表中查找最大值
Find the max in a list of lists of type Numbers in Haskell
我是 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 将数字转换为整数。
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",IntNumber 5],[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
我希望代码简单明了...
我是 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 将数字转换为整数。
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",IntNumber 5],[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
我希望代码简单明了...