列表中最新的非Nothing值
我最近开始学习 Haskell,希望你能帮助解决一个列表转换问题。
我有一个自定义数据类型的 Maybe 列表,在这个论坛中简化为字符串,我想将它转换为用最近看到的值替换 Nothing 值。见下文:
Input: [Nothing, Just "Hello", Nothing, Nothing, Just "World", Nothing]
Output: [Nothing, Just "Hello", Just "Hello", Just "Hello", Just "World", Just "World"]
这在 Haskell 中可能吗?任何指针将不胜感激。
回答
这是一个非常简洁和优雅的实现方式:
import Control.Applicative
f = scanl1 (flip (<|>))
执行f [w,x,y,z]yields [w, x <|> w, y <|> x <|> w, z <|> y <|> x <|> w],并将Maybes 与 s链接<|>给你第一个是Just,或者Nothing如果它们都是Nothing.