2015-05-11 228 views
-1

我有一个字符串列表。我想要在空间分割每个字符串,例如使用words,产生一串字符串列表。不幸的是,我不能使用map words myList,因为地图需要[a] - > [b],而我想要[a] - > [[b]]。我将如何去做这件事?将字符串列表拆分为字符串列表列表

另外一个选项是我的头顶部是一个递归函数,我将头字符串从我的原始列表中分离出来,words它然后在那里分析结果,然后我试图用pre-现有的功能和一个班轮。

+0

我不明白为什么'地图words'是不是你想要的。你能给个例子吗? – augustss

+0

我得到一个错误,似乎指向'地图字'不工作;然而,经过对答案的提示进一步分析后,我发现我对错误原因的初步分析实际上并不是“地图词”。谢谢大家的帮助! – Birdie

回答

3

的“地图”的类型签名是

map :: (a -> b) -> [a] -> [b] 

的“单词”的类型签名是

words :: String -> [String] 

因此,类型签名'地图字'是

map words :: [String] -> [[String]] 

嘿,这是exac tly你想要什么!试一试吧。

map words ["hello world","stack exchange"] 

输出:

[["hello","world"],["stack","exchange"]] 
2

我不知道我的理解,你可以使用mapwords产生这样的结果:

GHCi, version 7.10.1: http://www.haskell.org/ghc/ :? for help 
Prelude> let { splitWords [] = []; splitWords ws = map words ws } 
Prelude> splitWords [] 
[] 
Prelude> splitWords ["first sentence", "second sentence"] 
[["first","sentence"],["second","sentence"]] 
Prelude> 

我认为最重要的事情在这里带走的是只是因为地图预计(a -> b) -> [a] -> [b]并不意味着b必须与a相同。这里a是一个字符串和b[String]

+0

不需要特殊情况下的空列表。我们已经有了'map words [] = []'。 –