【问题标题】:How do I apply a function to each element of list, when it has two inputs? Haskell当列表有两个输入时,如何将函数应用于列表的每个元素?哈斯克尔
【发布时间】:2014-12-17 12:29:36
【问题描述】:

如果我有一个有两个输入的函数,例如

func x y

如何将函数应用于列表的所有元素,只有一个输入是列表的元素。 所以如果我有列表 [1,2,3] 和 y = 4,我如何使用 func 使用列表的每个元素作为 x 即

func 1 4
func 2 4
func 3 4

并在列表中返回答案。

仅限前奏功能。

【问题讨论】:

  • 你为什么要标记recursion
  • 根据您的输出,您的列表应该是 [1,2,3,4] 还是要在末尾添加第二个参数?

标签: list haskell


【解决方案1】:

使用flipmap函数的组合:

map (flip func y) x

或者正如@Jubobs 指出的那样,您可以以更直接的方式做到这一点:

map (\x -> func x y) xs

说明:假设您的函数func 具有以下定义:

func :: Int -> String -> Int
func y z = y

现在,您可以使用翻转函数翻转它的参数:

λ> :t (flip func)
(flip func) :: String -> Int -> Int

所以,现在您可以直接将第二个参数应用于它:

λ> :t (flip func "dummy")
(flip func "dummy") :: Int -> Int

现在,您可以使用map 函数将列表的所有元素应用到此函数:

λ> map (flip func "dummy") [1,2,3,4]
[1,2,3,4]

【讨论】:

  • map (\x -> func x y) xs 也应该可以工作,而且可能更容易理解。
  • @Jubobs 是的,那会容易得多,会更新它。
  • @Arthur map (\x -> func x y) xs 没有什么特别之处:这与 map 函数的工作方式相同。 x 对应于列表 xs 的单个元素。它在每次迭代中与y 一起应用于func
猜你喜欢
  • 1970-01-01
  • 2013-03-21
  • 2021-01-14
  • 2021-12-27
  • 2021-04-21
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
相关资源
最近更新 更多