我怎样才能轻松采取以下
[4]
并返回以下内容:
4
我知道[4] !! 0有效,但似乎不是一个好策略......
答案 0 :(得分:11)
只是模式匹配它:
getSingleton [a] = a
答案 1 :(得分:6)
head
是正常答案,您可以看到其中三个(其中一个带有自定义名称) - 这在功能上与您已知的相同(x !! 0
〜head 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中返回。 ;)