我正在嘗試使用更高級別的順序函式來獲取 Maybe 值串列并回傳 int 型別的最大值,但由于某種原因,我只能回傳一個 Maybe 值。例如這有效:
max' iL = foldl maxMaybe Nothing iL
maxMaybe Nothing y = Just y
maxMaybe (Just x) y = Just (max x y)
然而,這并不像它所說的那樣它仍然期望一個 Maybe 值,但它正在為結果生成一個 int :
max' iL = foldl maxMaybe (minBound::Int) iL
maxMaybe Nothing y = y
maxMaybe (Just x) y = (max x y)
uj5u.com熱心網友回復:
對于第二個實作,您對累加器使用了錯誤的型別,因為foldl' 的累加器是其函式的第一個引數 - 這里是maxMaybefunction-,我們必須在 中交換引數maxMaybe:
max' :: Foldable t => t (Maybe Int) -> Int
max' = foldl maxMaybe (minBound::Int)
maxMaybe :: Ord a => a -> Maybe a -> a
maxMaybe y Nothing = y
maxMaybe y (Just x) = max x y
這個函式現在可以作業了,但我認為這個方法不是找到最大值的好方法,我更喜歡第一個實作,因為你可以對它的結果進行模式匹配。
我建議將第一個實作更改為這個,因為 asfoldlr對于 haskell foldr更可取,并且Just (Just a)是多余且丑陋的:
maxWithFoldlr = (Foldable t, Ord a) => t (Maybe a) -> Maybe a
maxWithFoldlr = foldlr maxMaybe Nothing
maxWithFoldl :: (Foldable t, Ord a) => t (Maybe a) -> Maybe a
maxWithFoldl = foldl maxMaybe Nothing
maxMaybe :: Ord a => Maybe a -> Maybe a -> Maybe a
maxMaybe Nothing y = y
maxMaybe x Nothing = x
maxMaybe (Just x) (Just y) = Just $ max x y
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434048.html
下一篇:搜索二叉樹并回傳值的級別
