我想使用一个函数来计算满足谓词的Vector开头的项数。换句话说:
countWhile p xs = V.length $ V.takeWhile p xs流融合会优化这个函数吗?还是像下面这样显式地写出递归更有效?
countWhile p xs
| V.null xs = 0
| otherwise = if p (V.head xs) then 1 + countWhile p (V.tail xs) else 0或者还有其他更好的方法吗?
发布于 2015-03-28 04:54:04
已经有一个函数findIndex用于查找满足谓词的第一个项的索引。
findIndex :: (a -> Bool) -> Vector a -> Maybe Int假设这是尽可能高效的,我们可以使用它通过查找第一个与谓词不匹配的索引来高效地编写countWhile。如果我们找不到一个与谓词不匹配的,那么所有的(length v)都与谓词匹配。
countWhile :: (a -> Bool) -> Vector a -> Int
countWhile p v = maybe (length v) (findIndex (not . p) v)https://stackoverflow.com/questions/29309815
复制相似问题