代码之家  ›  专栏  ›  技术社区  ›  brianegge

可以用F写默认函数吗#

  •  4
  • brianegge  · 技术社区  · 16 年前

    Tacit or point-free style programming

    2 回复  |  直到 16 年前
        1
  •  6
  •   Gabriel    16 年前

    只是为了配合Chuck的回答&克里斯·史密斯的评论,你可以写

    let digits = string_of_int >> String.length
    digits 9000;; // 4
    [1; 10; 100] |> List.map digits;; // [1;2;3]
    

    let prodSqrtAbs = Seq.map (abs>>sqrt) >> Seq.reduce (*)
    prodSqrtAbs [| -9.0; 4.0 |];;  // 6.0
    

    编辑 lift (使用显式参数)

    let lift op a b x = op (a x) (b x)
    

    然后显式地应用它

    let avg = lift (/) List.sum List.length
    

    the J example

        2
  •  3
  •   Chuck    16 年前

    当然您所需要的只是函数组合和咖喱,这两种都可以在F#中实现。

    let compose f1 f2 = fun x -> f1 (f2 x);;
    let digits = compose String.length string_of_int;;
    digits 9000;; // 4