如何将多态数据类型转换为单个元素列表

时间:2018-10-18 19:52:00

标签: haskell

我在徘徊,是否有可能将一个元组(其第一个元素存储第二个元素的出现次数)转换为单个元素列表,例如:

[(2,'a'),(1,'b'),(4,'c')] ~> ['a','a','b','c','c','c','c']

此类数据类型的定义为[(Int, a)](在此示例中,我选择a作为字符)。

2 个答案:

答案 0 :(得分:4)

如果您正在学习基础知识并且应该自己构建基本功能,则此问题有两个部分:

  1. 一个接一个地处理每个元组。
  2. 正确处理一个元组( e g 。,DECLARE BEGIN END;)。

您可以将其分为两个功能。处理所有元组的那个将称为仅处理每个元组一个的一个。

尝试首先自行解决,但如果遇到困难,以下内容将破坏代码的基本结构(包括两个函数的基本用例和递归用例模式),但并非如此。完成的代码本身:

  

(2, 'a')

答案 1 :(得分:3)

您尝试过concatMap吗?

示例列表:

ls = [(2,True),(1,False),(4,True)]

concatMap (\tp -> replicate (fst tp) (snd tp)) ls

您先映射函数,然后将其展平,这样您便获得了最终列表:

=> [True,True,False,True,True,True,True]