关于OCaml模式匹配语法

时间:2016-04-01 17:16:27

标签: functional-programming ocaml

我正在关注this OCaml教程。

他们提供了以下两个功能,并表示它们是等效的。

let string_of_int x = match x with
   | 0 -> "zero"
   | 1 -> "one"
   | 2 -> "two"
   | _ -> "many"

let string_of_int2 = function
    | 0 -> "zero"
    | 1 -> "one"
    | 2 -> "two"
    | _ -> "many"

我的查询是关于上述函数的语法。

  1. 我写了相同的函数,但我只是| 0 ->而不是0 ->,函数仍然以相同的方式工作。教程是否有任何特殊原因在其功能中添加了额外的|

  2. 在第二个函数中,function关键字的用途是什么?为什么第一个函数中没有此关键字?

1 个答案:

答案 0 :(得分:3)

  1. 有些人认为它看起来更漂亮,更有条理,它允许您使用cut& amp;更改案例的顺序。粘贴而不必担心哪一个没有|

  2. function语法是缩写:function [CASES]fun x -> match x with [CASES]相同。有一个微妙的区别,即function,不可能通过参数的名称遮蔽另一个变量。

    let string_of_int x = [EXP]本身就是let string_of_int = fun x -> [EXP]的缩写。

    所以,近似地,"规范"语法使用funmatch,其他一切都是糖。如果将这两个扩展应用于函数的两个版本,您将看到相同的代码结果(模数字等效,当然:))。