首页 > 解决方案 > Ocaml 中的匹配

问题描述

我正在为我的班级做作业,我必须将列表中的所有项目加起来。我对如何做到这一点感到困惑,因为有人告诉我你不能像在 Python 中那样访问列表中的单个项目。

我发现大多数人的做法是使用类似以下方法的方法

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

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

标签: listocaml

解决方案


我的问题是, 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

推荐阅读