如何使用 foldr(或 foldMap)实现最小值?
How do I implement minimum with foldr (or foldMap)?
我想用 foldr 或 foldMap 实现 minimum。根据练习,它应该有这样的定义:
mini :: (Foldable t, Ord a) => t a -> Maybe a -- named "mini" to avoid name clash
这听起来很简单,但我不知道我可以用什么代替下面的 X 来使它起作用。请帮忙?
mini xs = Just (foldr min X xs)
你也向我展示了如何使用 foldMap 来做这件事,你会得到加分,但这似乎更难。
您可以尝试将 'X' 替换为列表中的第一个元素。当然,您现在应该处理使用空列表调用函数 'mini' 的情况。
你可以这样做:
mini :: (Foldable f, Ord a) => f a -> Maybe a
mini = foldr maybeMin Nothing
where
maybeMin x Nothing = Just x
maybeMin x (Just y) = Just (min x y)
我想用 foldr 或 foldMap 实现 minimum。根据练习,它应该有这样的定义:
mini :: (Foldable t, Ord a) => t a -> Maybe a -- named "mini" to avoid name clash
这听起来很简单,但我不知道我可以用什么代替下面的 X 来使它起作用。请帮忙?
mini xs = Just (foldr min X xs)
你也向我展示了如何使用 foldMap 来做这件事,你会得到加分,但这似乎更难。
您可以尝试将 'X' 替换为列表中的第一个元素。当然,您现在应该处理使用空列表调用函数 'mini' 的情况。
你可以这样做:
mini :: (Foldable f, Ord a) => f a -> Maybe a
mini = foldr maybeMin Nothing
where
maybeMin x Nothing = Just x
maybeMin x (Just y) = Just (min x y)