我正在为我的课做作业,我必须将列表中的所有项目加起来。我被告知您无法像使用Python那样访问列表中的单个项,对此我感到困惑。
我发现大多数人是如何做到的,就是使用以下方法
let rec list_sum lst =
match lst with
| [] -> 0
| hd :: tl -> hd + list_sum tl
我的问题是,HD和TL来自何处?编写代码的人从来没有预定义这些变量或其他任何东西,那么您是否可以这样编写它们?他们怎么知道您在说什么清单?
答案 0 :(得分:1)
模式hd
引入了名称tl
和match 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