Haskell自带递归的concat方法

问题描述 投票:1回答:1

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

这是目标。

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

haskell recursion concat
1个回答
1
投票

由于x是此处的列表(其类型为[a]),除非再次想要创建列表列表,否则您不能在此处使用x : …,但是您的myConcat会像[ C0]清单功能。

您需要在列表的其余部分附加 id,因此可以使用x,确实:

(++) :: [a] -> [a] -> [a]

注意,您忘记了基本情况(++) :: [a] -> [a] -> [a]。通过写入myConcat :: [[a]] -> [a] myConcat [] = [] myConcat (x:xs) = x ++ myConcat xs,您可以将列表与one元素匹配:空列表。那是不同的。


1
投票

您好,您只需将[]替换为[[]]

© www.soinside.com 2019 - 2024. All rights reserved.