Ocaml打印元组列表

Ocaml打印元组列表,ocaml,Ocaml,我想打印类型为(int*'a)list的元组列表。例如,用于打印此元组列表 [(3, "toto");(1, "a")] 还是这个名单 [(3, 4);(1, 7)] 我如何才能做到这一点?没有内置的对打印列表、元组或任何更一般的类型的支持。您必须是特定的,因为列表可以包含任何类型,元组可以是任何类型的产品,所以您必须自己解构它并适当地格式化它 下面是一个函数的示例,该函数遍历列表,解构每个元组,并使用逗号分隔元组中的项,分号分隔元组本身来格式化它们: let rec print_tuple

我想打印类型为
(int*'a)list
的元组列表。例如,用于打印此元组列表

[(3, "toto");(1, "a")]
还是这个名单

[(3, 4);(1, 7)]

我如何才能做到这一点?

没有内置的对打印列表、元组或任何更一般的类型的支持。您必须是特定的,因为列表可以包含任何类型,元组可以是任何类型的产品,所以您必须自己解构它并适当地格式化它

下面是一个函数的示例,该函数遍历列表,解构每个元组,并使用逗号分隔元组中的项,分号分隔元组本身来格式化它们:

let rec print_tuples =
  function
  | [] -> ()
  | (a, b) :: rest ->
    Printf.printf "%i, %s; " a b;
    print_tuples rest

let () =
  print_tuples [(3, "toto");(1, "a")]
列出可以以这种方式打印的其他类型以及要使用的占位符。

使用
Fmt
(这是一种改进的api格式)打印元组列表可以通过首先为一对
int
字符串定义一个打印机来完成:

let pair_printer = Fmt.(pair ~sep:comma int string)
下一步,我们可以为那些
int*string
元组的列表定义一个打印机,用分号分隔:

let list_printer = Fmt.(list ~sep:(const pf ";@ ") pair_printer)
最后,我们可以将此打印机用于:

Fmt.pr "[%a]@." list_printer [1, "one"; 2, "two" ]

同时使用
List.iter
让print\u ltuples l=List.iter(fun(a,b)->Printf.Printf“%d,%s”a b)