【发布时间】:2020-12-04 10:52:28
【问题描述】:
在 Haskell 中,我们可以展平列表列表 Flatten a list of lists
对于元组的简单情况,我可以看到我们将如何展平某些元组,如下例所示:
flatten :: (a, (b, c)) -> (a, b, c)
flatten x = (fst x, fst(snd x), snd(snd x))
flatten2 :: ((a, b), c) -> (a, b, c)
flatten2 x = (fst(fst x), snd(fst x), snd x)
但是,我正在寻找一个函数,它接受任何嵌套元组作为输入并将该元组展平。
Haskell 中可以创建这样的函数吗?
如果不能创建,为什么会这样?
【问题讨论】:
-
是的,使用模式匹配。写一个函数
(a, (b, c)) -> (a, b, c). -
对于任意 n 元组的情况,“generalis[ing]”到底是什么意思?如果你的意思是,'我们能不能写一个函数来接受 any 嵌套元组作为输入并将其展平',那么不,这样的函数是不可能(或至少不切实际)编写的我知道
-
@Bradm 是的,这正是我的意思。一个可以接受任何嵌套元组作为输入并将其展平的函数。
-
旁注:如果您使用模式匹配而不是对
fst和snd的嵌套调用:flatten (a, (b, c)) = (a, b, c) -
您要解决的实际问题是否有更大的背景?异构列表可能是比元组更好的选择。
标签: haskell