我對 Haskell 很陌生,正在嘗試在包含數字型別的串列串列中找到最大值。數字定義為:
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 將 Numbers 轉換為 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",IntNumber 5],[IntNumber 6,StrNumber "7"],[ ],[StrNumber "8"]]
輸出: 9
uj5u.com熱心網友回復:
以下是我的嘗試:
data Numbers
= StrNumber String
| IntNumber Int
nestedMax :: [[Numbers]] -> Int
nestedMax = maximum' . map maxL
where maxL = maximum' . map toInt
toInt :: Numbers -> Int
toInt (StrNumber x) = read x
toInt (IntNumber x) = x
maximum' :: (Bounded a, Ord a) => [a] -> a
maximum' l -- maximum but output minBound when []
| null l = minBound
| otherwise = maximum l
main = do
print $ nestedMax [[StrNumber "9",IntNumber 2,IntNumber 8],[StrNumber "4",IntNumber 5],[IntNumber 6,StrNumber "7"],[],[StrNumber "8"]] -- 9
print $ nestedMax [] -- -9223372036854775808
我希望代碼簡單明了...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/435556.html
標籤:哈斯克尔
上一篇:cabal.project有可能有兩個單獨的構建單元嗎?
下一篇:抗鋸齒圓在opencv中呈鋸齒狀
