您编写的函数将为False
所有参数返回,因为您总是False
在列表结束时返回。
您编写的函数需要跟踪两个变量:处理的元素数和谓词为真的元素数。由于这段代码可能是家庭作业,我给你一个可以用来编写函数的构造。-- ???
在这些地方填写您自己的代码。
moreThan :: (a -> Bool) -> [a] -> Bool
moreThan pred = go 0 0 where
-- procd: number of elements processed
-- holds: number of elements for which pred holds
go procd holds (x:xs) = go procd' holds' xs where
procd' = -- ???
holds' = -- ???
go procd holds [] = -- ???
如果您需要更多提示,请随时发表评论。
编写此函数的一种更惯用的方法是使用折叠:
moreThan pred = finalize . foldr go (0,0) where
-- process one element of the input, produce another tuple
go (procd,holds) x = -- ???
-- produce a boolean value from the result-tuple
finalize (procd,holds) = -- ???