从OCaml中的列表列表中提取值

时间:2015-05-16 04:49:38

标签: ocaml

让我说我有一个列表包含和int *列表列表我如何能够从这种类型的列表中提取int的值?您可以对列表的头部或尾部进行模式匹配,但是如何提取int?

3 个答案:

答案 0 :(得分:4)

你总是可以连续制作两个模式匹配

match [[1;2]; [3;4]] with
  | (firstrow::_) -> (
      match firstrow with ->
        | (x :: _) -> x
        | []       -> 0 )
  | _ -> 42

也可以用多个级别编写模式匹配。

match [[1;2]; [3;4]] with
   | (x::_)::_  -> x
   | ([]::_)    -> 0
   |  _         -> 42

也就是说,您不一定需要使用模式匹配来访问列表元素。您还可以使用List.map或许多其他列表操作函数之一,具体取决于您实际尝试的操作。

答案 1 :(得分:2)

我不明白你想要精确提取哪个值,假设你想要提取int list list中的所有整数并且不想用多个级别编写模式匹配,你可以先使用List.flatten函数获取int list然后执行您想要执行的操作:

let l = List.flatten [[1; 2]; [3; 4]] in    (* l = [1; 2; 3; 4] *)
List.iter print_int l                       (* iter, map or any other function *)

答案 2 :(得分:0)

如果您将列表列表视为矩阵,并且您拥有所需的行列

List.nth col (List.nth ln matrix)

List.nth很高兴在这种情况下使用,你得到的信息我觉得这就是你想要的