【发布时间】:2017-11-16 12:38:16
【问题描述】:
我有一个列表 [Maybe a],我想用一个使用 foldl 的函数来删除 Nothing 元素 例如 cut [Just 2, Just 10, Nothing, Just 5] -> [2,10,5]
I wrote:
cut :: [Maybe a] -> [a]
cut a = foldl (help) [] a
where help (x:xs) Nothing = (x:xs)
help (x:xs) Just a = a:(x:xs)
我的错误在哪里?
【问题讨论】:
-
你为什么要把
(x:xs)写成help (x:xs)。 -
出了什么问题?这能编译吗?你能给出示例输入的示例输出吗?
-
你确定你的作业没有写“
foldl或foldr”吗?foldl在这里基本上是错误的方法。使用它自然会颠倒列表。 -
我写 (x:xs) 是因为这是我收集所有 Just 元素的列表。
-
@Bice: 但
(x:xs)并不将项目限制为列表(类型签名已经这样做了)。它将事物限制为具有至少一个元素的列表。
标签: list haskell functional-programming maybe