list - Ocaml 中的匹配
问题描述
我正在为我的班级做作业,我必须将列表中的所有项目加起来。我对如何做到这一点感到困惑,因为有人告诉我你不能像在 Python 中那样访问列表中的单个项目。
我发现大多数人的做法是使用类似以下方法的方法
let rec list_sum lst =
match lst with
| [] -> 0
| hd :: tl -> hd + list_sum tl
我的问题是, hd 和 tl 来自哪里?编写代码的人从来没有预定义这些变量或任何东西,所以你可以这样写吗?他们怎么知道你在说什么清单?
解决方案
我的问题是, 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
推荐阅读
- swift - 为什么我在 Xcode 中的 pod init 期间收到加载错误?
- ios - Safari 未能使用 Angular 的 HttpClient 发送有效的 GET 请求
- javascript - 在 React 中传递数据的 Fetch/TemplateLiteral 问题
- flutter - Flutter 中的条子是否可以同时具有“扩展”和“收缩”效果?
- react-native - 如何从我的反应原生应用程序中删除“dropped s far”?
- vue.js - 如何在 nativescript vue 中制作反应数组?
- r - 我在 R 中安装 ConvergenceConcepts 包时遇到问题,它会抛出一条错误消息,指出“ConvergenceConcepts”的退出状态非零
- rust - 如何将所有权转移给调用函数?
- c++ - 如何将 ascii 文本的 char[] 转换为 uint8_t[] 字节
- python - 如何从带有命名空间的 xml 文件中提取值?