【发布时间】:2021-12-31 13:16:32
【问题描述】:
我想将任意维度列表展平为一维列表 此代码适用于除空 2d 列表之外的所有测试用例
import Prelude hiding (foldl)
foldl :: (b -> a -> b) -> b -> [a] -> b
foldl fun init list =
case list of
[] -> init
(head:tail) -> foldl fun (fun init head) tail
flatten_l :: [[a]] -> [a]
flatten_l xss = foldl (\ ys xs -> ys ++ xs) [] xss
main = interact (\ s -> show $ flatten_l [[1,2,3], [4,5], [6], [], [7,8,9], []] )
这不适用于输入 - [[ ]]
main = interact (\ s -> show $ flatten_l [[]] )
【问题讨论】:
-
“维度”对您来说意味着什么?它似乎与大多数人所说的那个词的意思不一样——
flatten_l只是像大多数人所说的“维度”那样将维度 by 1 减少,它并没有减少to维度 1.“不工作”是什么意思?你得到什么输出?你希望得到什么? -
对于输入 [[]] ,我收到错误 - 使用“show”引起的不明确类型变量“a0”阻止了约束“(显示 a0)”的解决。我想要的输出是 []