取第二元素的列表子列表。

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

假设我有下面的元组列表。[("a", "b"); ("c", "d"); ("e", "f"); ("g", "h"); ("i", "j")]. 我想通过取该列表中每个元组的第二个元素来创建一个子列表。换句话说,我想得到 ["a"; "d"; "f", "h"].

我试过 iter (fun (x,y) -> liste@[y]) old_list;; 但我得到了

Error: This expression has type (string * string) list
       but an expression was expected of type unit

我必须使用递归函数吗?有什么变通办法吗?

list tuples ocaml
1个回答
0
投票

的类型 List.iter('a -> unit) -> 'a list -> unit. 换句话说,它返回单元,这在OCaml中是什么也不返回的方式(或者说没有什么有趣的东西)。

由于你希望你的函数返回一个结果,你不能使用 List.iter. 相反,你想以某种方式转换列表中的每个元素。这样做的函数是 List.map.

这里有一个函数,根据每个int是奇数还是偶数,将一个ints列表变成一个bool列表。

let is_even list = List.map (fun x -> x mod 2 = 0) list

它的工作原理是这样的:

# is_even [3;4;5;6;7];;
- : bool list = [false; true; false; true; false]

你想用不同的 fun 的表达式。

顺便说一下,你的结果并不是通常所说的原始列表的子列表。子列表是包含旧列表中一些元素的新列表。我想你可以称之为投影更准确。

© www.soinside.com 2019 - 2024. All rights reserved.