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

问题描述 投票:0回答:1

我有一个类型为

(int * float) list
的列表。

所以,据我了解(我是 OCaml/函数式编程的新手) 该列表的结构如下:

[(3, 1.0); (4, 2.0); (6, 0.1)]

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

我很高兴获得示例解决方案和解释。

list functional-programming ocaml
1个回答
5
投票

@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
接受两个项目的元组并返回第一个。第二个对我们来说不重要,所以我们使用
_
而不是给它命名。

请注意,该函数已在标准库中定义。

# Stdlib.fst;;
- : 'a * 'b -> 'a = <fun>
© www.soinside.com 2019 - 2024. All rights reserved.