【问题标题】:Haskell "concat" list of tuples using only list comprehensions仅使用列表推导的 Haskell“concat”元组列表
【发布时间】:2018-10-16 08:12:39
【问题描述】:

如何改变元组列表,比如

[(5,6),(7,8),(9,10)]

进入一个普通的列表,比如

[5,6,7,8,9,10]

通过列表推导并且没有concat?

我试过这个:

[ [y, z] | xs <- [(1,2),(3,4)], y <- fst(xs), z <- snd(xs) ]

【问题讨论】:

  • 提示:你觉得y &lt;- fst(xs) 做什么? fst(xs) 甚至不是一个列表。
  • 此外,don't need to say thanks。点赞和接受答案(如果有的话)更好。
  • 记录:f = foldr (\(a,b) acc -&gt; a:b:acc) [] 将每对的每个元素都添加到累加器中。 f [(5,6),(7,8),(9,10)]给:[5,6,7,8,9,10].

标签: list haskell tuples list-comprehension


【解决方案1】:

要使用列表推导来展平任何列表,形式总是相同的。一次从源中获取多个元素。

列表推导,如函数,可让您指定源、元组或列表的精确模式。

您的函数不是一次一个的倍数形式,因此更正它永远不会给您想要的结果。它至少需要使用concat 来连接输出。

这是扁平化列表理解的形式

[ n |(a,b)<-[(1,2),(3,4),(5,6)],n <-[a,b]]

abn 一次取一个,以展平。

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2020-10-16
    相关资源
    最近更新 更多