[英]Haskell: takeWhile on list of Maybe
Maybe n
的无限列表,从特定位置开始,只有Nothing
项:
someNumbers :: [Maybe Int]
someNumbers = [Just 4, Just 3, Just 2, Just 1] ++ cycle [Nothing]
我想计算n
的谓词p
,从第一个Nothing
停止:
howMany :: (Int -> Bool) -> [Maybe Int] -> Int
这是我想出的,具有明确的递归:
howMany p ((Just n):rest)
| p n = 1 + (howMany p rest)
| otherwise = 0
howMany _ _ = 0
我想知道是否有更好的方式来表达这一点,从而利用高级的Haskell抽象。
以下将工作。
import Data.Maybe (isJust, maybe)
howMany p = length . filter (maybe False p) . takeWhile isJust
或者,您也可以使用fromJust
代替maybe
。 通常不建议使用fromJust
类的部分函数,但是在这种情况下是安全的。
import Data.Maybe (isJust, fromJust)
howMany p = length . filter (p . fromJust) . takeWhile isJust
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.