在 OCaml 中访问 (int * float) 列表中的浮点数
Access float in (int * float) list in OCaml
我有一个类型为 (int * float) list
的列表。
因此,据我了解(我是 OCaml/Functional 编程新手)
该列表的结构如下:[(3, 1.0); (4, 2.0); (6, 0.1)]
.
现在我想访问列表中每个元组的第一个元素。
我很乐意提供示例解决方案和解释。
@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
是一个接受两个项目的元组和 returns 第一个的函数。第二个对我们来说不重要,所以我们使用 _
而不是给它起名字。
我有一个类型为 (int * float) list
的列表。
因此,据我了解(我是 OCaml/Functional 编程新手)
该列表的结构如下:[(3, 1.0); (4, 2.0); (6, 0.1)]
.
现在我想访问列表中每个元组的第一个元素。
我很乐意提供示例解决方案和解释。
@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
是一个接受两个项目的元组和 returns 第一个的函数。第二个对我们来说不重要,所以我们使用 _
而不是给它起名字。