匹配在Ocaml

时间:2018-09-10 02:44:56

标签: list ocaml

我正在为我的课做作业,我必须将列表中的所有项目加起来。我被告知您无法像使用Python那样访问列表中的单个项,对此我感到困惑。

我发现大多数人是如何做到的,就是使用以下方法

let rec list_sum lst =
    match lst with
    | [] -> 0
    | hd :: tl -> hd + list_sum tl

我的问题是,HD和TL来自何处?编写代码的人从来没有预定义这些变量或其他任何东西,那么您是否可以这样编写它们?他们怎么知道您在说什么清单?

2 个答案:

答案 0 :(得分:1)

模式hd引入了名称tlmatch v with pattern ...。从本质上讲,这就是模式的目的之一。为匹配的值的部分命名。

您说v时,模式将与值lst相匹配。在这段代码中,模式与值.find({}, {_id:0})相匹配。

答案 1 :(得分:1)

  

我的问题是,HD和TL来自何处?编写代码的人从来没有预定义这些变量或任何变量,所以您可以这样写吗?

通过在模式中使用变量来声明变量。该代码本来应该是

let rec list_sum lst =
    match lst with
    | [] -> 0
    | fred :: ethel -> fred + list_sum ethel
  

他们怎么知道您在说什么列表?

代码声明了一个名为list_sum的函数,该函数带有一个名为lst的参数。使用该函数时,请为该参数提供一个参数,并指出您正在“谈论”哪个列表,如下所示:

let some_numbers = [ 2; 3; 4; 5 ]
let the_sum = list_sum some_numbers