'映射'高阶Haskell函数

Jam*_*ray 4 string haskell list higher-order-functions map-function

我有一个列表,例如:

["Hello", "Goodbye"]
Run Code Online (Sandbox Code Playgroud)

我想map在名单上使用;

我之前成功地使用了地图:

f = ("example" ++)
Run Code Online (Sandbox Code Playgroud)

那么:

map f ["Hello", "Goodbye"]
Run Code Online (Sandbox Code Playgroud)

列出清单:

["exampleHello", "exampleGoodbye"]
Run Code Online (Sandbox Code Playgroud)

但是如何在函数"f"中使用列表项呢?

例如,如果我想重复list元素,那么:

["Hello", "Goodbye"]
Run Code Online (Sandbox Code Playgroud)

会成为:

["HelloHello", "GoodbyeGoodbye"]
Run Code Online (Sandbox Code Playgroud)

我怎么能用map和函数'f'(和++)来做呢?

非常感谢,

jeh*_*eha 9

map (\x -> x++x) ["Hello", "Goodbye"]
Run Code Online (Sandbox Code Playgroud)

结果是

["HelloHello","GoodbyeGoodbye"]
Run Code Online (Sandbox Code Playgroud)

所以f可以定义为f x = (x++x).

  • 让我们看看......我们可以使用令人困惑的类型类函数来执行此操作吗?为什么是!`liftM(加入mappend)(mappend(返回"Hello")(返回"Goodbye")):: [String]` (8认同)

Jef*_*rka 7

你可能想要使用lambda函数来做这种事情.您想要查看列表中的每个项目,然后将其替换为自身重复的项目.复制字符串很简单:\str -> str ++ str现在您只需要在列表上映射该函数:

map (\x -> x ++ x) ["Hello", "Goodbye"]
Run Code Online (Sandbox Code Playgroud)