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)代码>