-1

您好,我在haskell中有一个函数 foo (Int -> Int -> Int) ,我想将列表 [1..y] 的每个元素映射到一个值 x ,我通常会这样做:

map (foo x) [1..y]

问题是我的函数不是可交换的,所以我真正想做的是这样的(注意前面的语法不正确):

map (foo [1..y]) x

所以基本上我想传递我的函数列表的每个元素并将每个元素映射到 x 但值 [1..y] 需要在函数的左侧。请注意,foo需要两个 Int 作为参数。我相信haskell在它的存储库中有一些技巧,你能帮我吗:)?

4

2 回答 2

1

考虑以下示例:

λ> map (flip (-) 3) [1..10]
[-2,-1,0,1,2,3,4,5,6,7]

flip接受一个类型的函数a -> b -> c和两个参数ba(按此顺序)并将该函数以翻转顺序应用于参数。

想到的另一种方法是使用zip无限列表x(在此示例中为 3)来创建您希望函数应用于的参数对。

于 2021-11-25T00:49:13.507 回答
0

从前奏中“翻转”的功能对我有用:)

map (flip foo x) [1..y]
于 2021-11-25T00:49:12.593 回答