簡體   English   中英

Haskell:在Maybe名單上

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM