Haskell 如何将多态数据类型转换为单个元素列表
我想知道是否有可能将一个元组作为第一个元素存储第二个元素的出现次数,转换为一个元素列表,例如:Haskell 如何将多态数据类型转换为单个元素列表,haskell,Haskell,我想知道是否有可能将一个元组作为第一个元素存储第二个元素的出现次数,转换为一个元素列表,例如: [(2,'a'),(1,'b'),(4,'c')] ~> ['a','a','b','c','c','c','c'] 这种数据类型的定义是[(Int,a)](在本例中,我选择a作为字符)。您尝试过concatMap吗 示例列表: ls = [(2,True),(1,False),(4,True)] concatMap (\tp -> replicate (fst tp) (snd tp
[(2,'a'),(1,'b'),(4,'c')] ~> ['a','a','b','c','c','c','c']
这种数据类型的定义是
[(Int,a)]
(在本例中,我选择a
作为字符)。您尝试过concatMap吗
示例列表:
ls = [(2,True),(1,False),(4,True)]
concatMap (\tp -> replicate (fst tp) (snd tp)) ls
映射函数,然后将其展开,从而得到最终列表:
=> [True,True,False,True,True,True,True]
如果您正在学习基础知识,并且应该自己构建基本功能,那么这个问题有两个部分:
(2,'a')
)repeatElements::[(Int,a)]->--插入结果类型
repeatElements[]=--插入空列表基本情况的结果
repeatElements((n,x):xs)=RepeatElement nx--插入递归的部分
哪里
RepeatElement::Int->a->--插入结果类型
RepeatElement 0 ch=--插入零所需基本情况的结果
RepeatElement n ch=--插入递归大小写的结果
提示:使用
复制
。是的,这是可能的。我建议你把它分成小块。首先,编写一个函数f::(Int,a)->[a]
,它只对一个元组执行此操作。一旦你做到了这一点,那么对整个元组列表就更容易了。concatMap
的第一个参数也可以拼写为uncurry replicate
。