【问题标题】:Map a list to a value with non commutative function in haskell [duplicate]将列表映射到haskell中具有非交换函数的值[重复]
【发布时间】:2021-11-25 08:49:13
【问题描述】:

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

map (foo x) [1..y]

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

map (foo [1..y]) x

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

【问题讨论】:

    标签: function haskell commutativity


    【解决方案1】:

    考虑以下示例:

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

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

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

    【讨论】:

      【解决方案2】:

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

      map (flip foo x) [1..y]
      

      【讨论】:

      • 您还可以使用运算符切片,例如map (`foo` x) [1 .. y]
      猜你喜欢
      • 2012-09-27
      • 1970-01-01
      • 2019-10-12
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多