Haskell自己的递归concat方法
我在Haskell上练习递归,需要在嵌套列表上使用自己的推进来实现concat方法 我试过了Haskell自己的递归concat方法,haskell,recursion,concat,Haskell,Recursion,Concat,我在Haskell上练习递归,需要在嵌套列表上使用自己的推进来实现concat方法 我试过了 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]),你不
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
附加到列表的其余部分,这样您就可以使用:
请注意,您忘记了基本情况
[]
。通过编写[[]]
将列表与一个元素匹配:空列表。这是不一样的。您好,您只需将您的x:myConcat xs
替换为x++myConcat xs
因为x
是一个列表,您不能在这里使用x:…
,除非您再次想要创建列表。您介意发布类型错误以供将来搜索吗?这还不够。模式匹配仍不完整。是,请确保列表为空!我的解决方案不完整,我只是想强调一下:
和++
myConcat :: [[a]] -> [a]
myConcat [] = []
myConcat (x:xs) = x ++ myConcat xs