我在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