Haskell具有递归的concat方法

meh*_*tti 0 recursion haskell concat

我在Haskell上练习递归,需要在嵌套列表上使用自己的命令进行concat方法。

我试过了

    myConcat :: [[a]] -> [a]
    myConcat [[]] = []
    myConcat ((x:xs)) = x : myConcat ((xs))
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。

    myConcat :: [[a]] -> [a]
    myConcat [[]] = []
    myConcat ((x:xs)) = x : myConcat ((xs))
Run Code Online (Sandbox Code Playgroud)

这是目标。

主要问题是我真的不知道如何使用嵌套列表。

Wil*_*sem 6

由于x此处是列表(其类型为[a]),因此x : …除非您再次想要创建列表列表,否则您将无法在此处使用列表,但是您myConcat将像id列表函数一样使用。

您需要在此处添加 x列表的其余部分,因此可以使用(++) :: [a] -> [a] -> [a],的确是:

myConcat :: [[a]] -> [a]
myConcat [] = []
myConcat (x:xs) = x ++ myConcat xs
Run Code Online (Sandbox Code Playgroud)

请注意,您忘记了基本情况[]。通过编写,[[]]您可以将一个列表与一个元素匹配:空列表。那是不同的。