Haskell拥有带有递归的concat方法



我在Haskell上练习递归,需要在嵌套列表上使用自己的无懈可击进行连接方法。

我试过了

myConcat :: [[a]] -> [a]
myConcat [[]] = []
myConcat ((x:xs)) = x : myConcat ((xs))

但它似乎不起作用。

myConcat [[1,2],[3,4,5],[6]] == [1,2,3,4,5,6]

这就是目标。

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

由于x在这里是一个列表(它有[a]类型),你不能在这里使用x : …,除非你再次想创建一个列表列表,但你的myConcat将充当列表的id函数。

您需要在此处将x与列表的其余部分一起附加,以便您可以使用(++) :: [a] -> [a] -> [a],确实:

myConcat :: [[a]] -> [a]
myConcat [] = []
myConcat (x:xs) = x ++ myConcat xs

请注意,您忘记了基本大小写[]。通过编写[[]]您将列表与一个元素匹配:空列表。那是另一回事。

你好,你只需要用x ++ myConcat xs替换你的x : myConcat xs

最新更新