2014-11-06 61 views

回答

6

你可以这样做:

singleton x = [x] 
f = map singleton 
+3

'f = map(:[])''? – Claudio 2014-11-06 07:22:48

+0

@Claudio更好。 – tinlyx 2014-11-06 08:13:07

+3

或'f =地图返回':-) – 2014-11-06 08:30:10

8

描述你想要做什么的一种方法是把你的列表中的每个元素分别包含在另一个列表中。或者,您想对列表的每个元素执行操作'a' ---> ['a']

每当你谈到谈到:“每个元素的列表,单独,成别的东西”你在谈论一个map [0],所以我们会写这个功能有点像

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

其中_是功能'a' ---> ['a']。这个功能可以写成一个明确的匿名函数,虽然

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

而这将实现我们所需要的!

但我们可以走得更远一点。首先,在Haskell中,允许您使用下降应用最后一个参数,如果它与最后一个输入参数相同。或者更具体的,我们还可以通过简单地在二者的参数列表,并作为参数传递给map删除csexample作为

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

。其次,我们可以注意到example的类型比它可能弱。写这更好的办法当然是

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

这反映了一个事实,我们没有在里面用具体的事情来Char

[0]或者更一般地,fmap

+3

或'map(:[])'。 – augustss 2014-11-06 07:13:04

4

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

可以代替singleton使用。

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