F#教程: 定义高阶函数


目前为止我们已经尝试写了些高阶函数代码。这回我们学着定义如下高阶函数:

  f(g,a) = g(g(a))

  该函数在得到函数g和传入g的参数a后计算g(a),并将结果作为再次调用函数g的参数。语言描述确实很复杂。

  F#表示如下:

  let f g a = g (g a)

  使用Pipeline就可以改写成:

  let f g a = g a |> g

  C#的话可能会像这样:

public T f<T>(Func<T,T> g, T a) {
        return g(g(a));
}

  F#就很简洁了。使用方法如下:

let add2 a = a + 2
printfn "%A" (f add2 5)
printfn "%A" (f (fun n -> n + 2) 5)

  第二个printf传入了lambda表达式,两个运行的结果都是显示9。

  我们再试着写一个高阶函数:一个和List.map有相同功能的map函数。

let map f lst = [ for n in lst -> f n ]
let nums = [1;2;3;4;5]
let triple n = n * 3
printfn "%A" (map triple nums)
printfn "%A" (List.map triple nums)

  map的第一个参数是函数,并将该函数作用于第二个参数传入的list的各个元素上,然后生成一个新的list。

  运行结果和 List.map相同,显示:

  [3; 6; 9; 12; 15]

 


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3