2016-08-17 77 views
0

这可能是一个非常简单的问题。将清单预先列入清单

给出两个字符串列表,xs和ys,我需要一个列表,其中列出了两个列表。

例如,

body = ["1", "2"] suffixes = ["a", "b", "c"]

会给输出

[["1a", "1b", "1c"], ["2a", "2b", "2c"]]

据我了解,Haskell使用map,而其他语言将使用for each,所以我试图映射追加功能的名单, map (++"1") suffixes 但我无法弄清楚如何将其动态应用于["1", "2"]而不是对其进行硬编码。

+2

也许另一个地图? – Alec

回答

6

如果您不需要列表边界(一个很常见的情况):

Control.Applicative> liftA2 (++) ["1", "2"] ["a", "b", "c"] 
["1a","1b","1c","2a","2b","2c"] 

否则,只窝您的来电map

> map (\prefix -> map (prefix++) ["a", "b", "c"]) ["1", "2"] 
[["1a","1b","1c"],["2a","2b","2c"]] 
+0

另一种可能性更容易扩展到使用两个以上的选择列表:concat <$> sequence [[“1”,“2”],[“a”,“b”,“c”]]' – amalloy