从[a]中提取

时间:2011-05-29 23:29:00

标签: list haskell extract

我怎样才能轻松采取以下

[4]

并返回以下内容:

4

我知道[4] !! 0有效,但似乎不是一个好策略......

5 个答案:

答案 0 :(得分:11)

只是模式匹配它:

getSingleton [a] = a

答案 1 :(得分:6)

head是正常答案,您可以看到其中三个(其中一个带有自定义名称) - 这在功能上与您已知的相同(x !! 0head x)。我强烈建议不要使用部分函数,​​除非你能证明(使用本地知识)你永远不会传递空列表并导致运行时异常。

如果您的函数不保证非空列表,请使用listToMaybe :: [a] -> Maybe a

> listToMaybe [4]
Just 4
> listToMaybe [5,39,-2,6,1]
Just 5
> listToMaybe []
Nothing            -- A 'Nothing' constructor instead of an exception

获得Maybe a后,您可以将其设置为匹配,请将其保留为可能并使用fmap或可能的monad或some other method to perform further operations

答案 2 :(得分:5)

除了gatoatigrado的解决方案之外,您还可以使用head函数,该函数提取列表的第一个元素,但也可以处理具有多个元素的列表,此外还是Prelude中的标准函数。您只需要小心不要将它应用于空列表,否则您将获得运行时异常。

Prelude> head [4]
4
Prelude> head []
*** Exception: Prelude.head: empty list

答案 3 :(得分:2)

如果您想要列表中的第一项,则可以执行

head [4]

答案 4 :(得分:0)

[]是一个单子。因此,您使用monad“提取”操作<-

double x = 2*x

doubleAll xs = do x <- xs
                  return (double x)

当然,monadic计算的结果在monad中返回。 ;)