当它有两个输入时,如何将函数应用于列表的每个元素?哈斯克尔

Art*_*hur 2 haskell list

如果我有两个输入的功能,例如

func x y
Run Code Online (Sandbox Code Playgroud)

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

func 1 4
func 2 4
func 3 4
Run Code Online (Sandbox Code Playgroud)

并在列表中返回答案.

仅限前奏函数.

Sib*_*ibi 6

使用flipmap功能的组合:

map (flip func y) x
Run Code Online (Sandbox Code Playgroud)

或者正如@Jubobs指出的那样,你可以用更简单的方式做到这一点:

map (\x -> func x y) xs
Run Code Online (Sandbox Code Playgroud)

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

func :: Int -> String -> Int
func y z = y
Run Code Online (Sandbox Code Playgroud)

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

?> :t (flip func)
(flip func) :: String -> Int -> Int
Run Code Online (Sandbox Code Playgroud)

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

?> :t (flip func "dummy")
(flip func "dummy") :: Int -> Int
Run Code Online (Sandbox Code Playgroud)

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

?> map (flip func "dummy") [1,2,3,4]
[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

  • `map(\ x - > func xy)xs`也应该有用,也许更容易理解. (3认同)