在 OCaml 中访问 (int * float) 列表中的浮点数

Posted

技术标签:

【中文标题】在 OCaml 中访问 (int * float) 列表中的浮点数【英文标题】:Access float in (int * float) list in OCaml 【发布时间】:2022-01-04 20:15:01 【问题描述】:

我有一个(int * float) list 类型的列表。

所以,据我了解(我是 OCaml/函数式编程的新手) 该列表的结构如下:[(3, 1.0); (4, 2.0); (6, 0.1)]

现在我想访问列表中每个元组的第一个元素。

我很乐意提供示例解决方案和解释。

【问题讨论】:

你用的是什么学习资料? @glennsl 互联网 我会建议您遵循适当的书籍或教程。这是一个很好的解释list access 和tuples。将两者放在一起,您就有了答案。 @glennsl 谢谢你我会去看看 【参考方案1】:

来自 cmets 中 @glennsl 的关于学习资源的建议是正确的。

如果你想要一个获取由每个元组中的第一个元素组成的列表的示例:

List.map (fun (i, _) -> i) [(3, 1.0); (4, 2.0); (6, 0.1)]

List.map 将函数应用于列表中的每个元素并构建结果值的列表。这是一个简单的概念,只需几行代码即可轻松实现。

let rec my_map f lst =
  match lst with
  | [] -> []
  | first::rest -> f first :: my_map f rest

或者更简洁地使用function

let rec my_map f =
  function
  | [] -> []
  | first::rest -> f first :: my_map f rest

如果我们评估 my_map (fun (i, _) -> i) [(3, 1.0); (4, 2.0); (6, 0.1)],它会得出如下结果:

my_map (fun (i, _) -> i) [(3, 1.0); (4, 2.0); (6, 0.1)]
3 :: my_map (fun (i, _) -> i) [(4, 2.0); (6, 0.1)]
3 :: 4 :: my_map (fun (i, _) -> i) [(6, 0.1)]
3 :: 4 :: 6 :: my_map (fun (i, _) -> i) []
3 :: 4 :: 6 :: []
[3; 4; 6]

匿名函数fun (i, _) -> i 是一个接受两个元素的元组并返回第一个元素的函数。第二个对我们来说并不重要,所以我们使用_ 而不是给它一个名字。

【讨论】:

以上是关于在 OCaml 中访问 (int * float) 列表中的浮点数的主要内容,如果未能解决你的问题,请参考以下文章

核心 OCaml 中浮点数的绝对值

Ocaml:在参数类型中使用记录和变体

ocaml如何用具体类型测试模块

可以在 OCaml 中的类型之间编码二进制函数吗?

在处理数据结构中的复杂键(如 int*int*int)时,F# 比 Ocaml 慢得多

Ocaml 类型中的 Int 的 Int