我正在为我的课做作业,我必须在列表中添加所有项目。我对如何做到这一点很困惑,因为我被告知你不能像在Python中那样访问列表中的单个项目。
我发现大多数人这样做的方式是使用类似下面的方法
let rec list_sum lst =
match lst with
| [] -> 0
| hd :: tl -> hd + list_sum tl
我的问题是,hd和tl来自哪里?编写代码的人从来没有预定义这些变量或任何东西,所以你是否可以像这样编写它们?他们怎么知道你在说什么名单?
模式hd :: tl
引入了名称hd
和tl
。从本质上讲,这是模式的目的之一。为匹配值的部分指定名称。
当你说match v with pattern ...
时,模式与值v
匹配。在此代码中,模式与值lst
匹配。
我的问题是,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