颠倒':将扁平列表转换为嵌套列表

时间:2014-11-06 05:46:02

标签: haskell

在Haskell中给出一个扁平的列表:

['a', 'b','c','d']

如何将其更改为:

[['a'], ['b'], ['c'], ['d']]

3 个答案:

答案 0 :(得分:8)

描述您要做的事情的一种方法是将列表中的每个元素单独包装在另一个列表中。或者,您希望对列表的每个元素执行操作'a' ---> ['a']

每当你谈到将列表中的每个元素单独转换为其他内容时,#34;你正在谈论一个map [0],所以我们写这个函数有点像

example :: [Char] -> [[Char]]
example cs = map _ cs

_是函数'a' ---> ['a']的位置。此函数可以写为显式匿名函数,但

example :: [Char] -> [[Char]]
example cs = map (\c -> [c]) cs

这将实现我们的需要!

但我们可以更进一步。首先,在Haskell中,如果它与最后一个输入参数相同,则允许删除应用的最后一个参数。或者,更具体地说,我们也可以将example写为

example :: [Char] -> [[Char]]
example = map (\c -> [c])

只需删除参数列表中的csmap的参数。其次,我们可以注意到example的类型比它可能更弱。一个更好的写作方式当然是

example :: [a] -> [[a]]
example = map (\c -> [c])

反映了我们没有在内部使用Char特定内容的事实。

[0]或者更一般地说,fmap

答案 1 :(得分:6)

你可以这样做:

singleton x = [x]
f = map singleton

答案 2 :(得分:4)

嗯,Ting已经回答了,但我觉得有必要向你介绍猴子算子(:[])

您可以使用此代替singleton

map (:[]) ['a', 'b', 'c', 'd']