如何从过滤列表中获得最高价值?哈斯克尔

时间:2019-12-14 10:03:32

标签: haskell

我的函数基本上可以正常工作,但是类型定义存在问题(已修复,无法更改)

DATA(row_with_max_snocount) = lt_table4[ KEY by_snocount INDEX lines( lt_table4 ) ].

输出应类似于:

conditionalMax :: Ord a => (a -> Bool) -> [a] -> Maybe a
conditionalMax f x = maximum [filter (f) x] 

1 个答案:

答案 0 :(得分:4)

这里基本上有两个主要问题:

  1. 使用[filter (f) x]创建一个 singleton 列表:一个正好包含一个元素的列表:过滤后的列表,因此其类型为{{1} };您可能想改用[[a]];和
  2. (filter f x)不会 返回maximum :: (Foldable f, Ord a) => f a -> a,而是返回Maybe a。因此,您需要构造一个函数,该函数首先查看列表是否为空,如果不是,则返回一个包装最大值的a;否则它将返回Just …

因此,您可能想要实现一个辅助函数,然后在Nothing中使用该函数:

conditionalMax

您需要自己填写safeMaximum :: Ord a => [a] -> Maybe a safeMaximum = …的地方。