在Ocaml中匹配

问题描述 投票:-3回答:2

我正在为我的课做作业,我必须在列表中添加所有项目。我对如何做到这一点很困惑,因为我被告知你不能像在Python中那样访问列表中的单个项目。

我发现大多数人这样做的方式是使用类似下面的方法

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

我的问题是,hd和tl来自哪里?编写代码的人从来没有预定义这些变量或任何东西,所以你是否可以像这样编写它们?他们怎么知道你在说什么名单?

list ocaml
2个回答
1
投票

模式hd :: tl引入了名称hdtl。从本质上讲,这是模式的目的之一。为匹配值的部分指定名称。

当你说match v with pattern ...时,模式与值v匹配。在此代码中,模式与值lst匹配。


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
© www.soinside.com 2019 - 2024. All rights reserved.