gpt4 book ai didi

list - 展平列表列表

转载 作者:行者123 更新时间:2023-12-04 02:33:26 25 4
gpt4 key购买 nike

我必须编写一个扁平化列表的函数。

例如 flatten [] = []flatten [1,2,3,4] = [1,2,3,4]flatten [[1,2],[3],4,5]] = [1,2,3,4,5]
我无法根据给定的 flatten 函数来匹配类型。

这是我所拥有的:

data A a = B a | C [a] deriving (Show, Eq, Ord)

flatten::(Show a, Eq a, Ord a)=>A a -> A a
flatten (C []) = (C [])
flatten (C (x:xs) ) = (C flatten x) ++ (C flatten xs)
flatten (B a) = (C [a])

据我所知,问题是 ++运算符期待它的两个参数的列表,我试图给它类型 A .我添加了 A类型,以便该函数可以获取单个元素或元素列表。

有谁知道以不同方式执行此操作的不同方法,或者解释我可以做些什么来修复类型错误?

最佳答案

有点不清楚您要的是什么,但是展平列表列表是一个名为 concat 的标准函数。在带有类型签名 [[a]] -> [a] 的前奏中.

如果您像上面开始的那样创建嵌套列表的数据类型,也许您想将数据类型调整为如下所示:

 data Lists a = List [a] | ListOfLists [Lists a]

然后你可以将它们展平为一个列表;
 flatten :: Lists a -> [a]
flatten (List xs) = xs
flatten (ListOfLists xss) = concatMap flatten xss

作为测试,
 > flatten (ListOfLists [List [1,2],List [3],ListOfLists [List [4],List[5]]])
[1,2,3,4,5]

关于list - 展平列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9507358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com