我的函数基本上可以正常工作,但是类型定义存在问题(已修复,无法更改)
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]
答案 0 :(得分:4)
这里基本上有两个主要问题:
[filter (f) x]
创建一个 singleton 列表:一个正好包含一个元素的列表:过滤后的列表,因此其类型为{{1} };您可能想改用[[a]]
;和(filter f x)
不会 返回maximum :: (Foldable f, Ord a) => f a -> a
,而是返回Maybe a
。因此,您需要构造一个函数,该函数首先查看列表是否为空,如果不是,则返回一个包装最大值的a
;否则它将返回Just …
。因此,您可能想要实现一个辅助函数,然后在Nothing
中使用该函数:
conditionalMax
您需要自己填写safeMaximum :: Ord a => [a] -> Maybe a
safeMaximum = …
的地方。