首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何最好地在Haskell中实现向量的countWhile?

如何最好地在Haskell中实现向量的countWhile?
EN

Stack Overflow用户
提问于 2015-03-28 04:39:33
回答 1查看 102关注 0票数 1

我想使用一个函数来计算满足谓词的Vector开头的项数。换句话说:

代码语言:javascript
复制
countWhile p xs = V.length $ V.takeWhile p xs

流融合会优化这个函数吗?还是像下面这样显式地写出递归更有效?

代码语言:javascript
复制
countWhile p xs
  | V.null xs = 0
  | otherwise = if p (V.head xs) then 1 + countWhile p (V.tail xs) else 0

或者还有其他更好的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-28 04:54:04

已经有一个函数findIndex用于查找满足谓词的第一个项的索引。

代码语言:javascript
复制
findIndex :: (a -> Bool) -> Vector a -> Maybe Int

假设这是尽可能高效的,我们可以使用它通过查找第一个与谓词不匹配的索引来高效地编写countWhile。如果我们找不到一个与谓词不匹配的,那么所有的(length v)都与谓词匹配。

代码语言:javascript
复制
countWhile :: (a -> Bool) -> Vector a -> Int
countWhile p v = maybe (length v) (findIndex (not . p) v)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29309815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档