代码之家  ›  专栏  ›  技术社区  ›  Chris T

在ocaml中使用fun关键字

  •  0
  • Chris T  · 技术社区  · 6 年前

    fun 声明函数?例如,Ocaml的REPL/解释器毫无怨言地执行以下语句:

    let average a b =
      (a +. b) /. 2.0;;
    

    这是否意味着我可以免除 乐趣 在声明函数时?什么时候需要,或者曾经需要过?

    2 回复  |  直到 6 年前
        1
  •  4
  •   octachron    6 年前

    fun 匿名函数需要。例如,下面的代码将列表中的每个元素加倍 l = [ 1; 2; 3; 4]

    let l = [1; 2; 3; 4]
    let doubled_l = List.map (fun x -> 2 * x) l
    

    let l = [1; 2; 3; 4]
    let double x = 2 * x
    let doubled_l = List.map double l
    

    List.map ( ( * ) 2 ) l )

    相反,平均函数可以重写为

    let average = fun x y -> (x +. y) /. 2.  
    

    let average = fun x -> fun y -> (x +. y) /. 2.  
    

    average x y = ...

        2
  •  2
  •   sepp2k    6 年前

    let average a b = ... 完全等同于 let average = fun a b -> ... -你总是可以用前者胜过后者。只是你喜欢哪一种风格的问题。我的感觉是,大多数程序员使用前一种形式,但是一些介绍性材料使用后一种形式来明确说明函数和其他任何函数一样都是值,可以使用 fun 关键字。

    let f = fun ... 不是唯一的使用方法 乐趣 map List.map (fun x -> x+1) xs ,你不能把 let 乐趣 let add1 x = x+1 in List.map add1 xs 这样做很好,但是更加冗长,并且引入了一个只使用一次的新名称,并且没有添加任何内容。

    所以呢 乐趣 当你想传递一个函数而不给它一个名字时,它是有用的。