元组的Ocaml打印列表

时间:2019-05-12 14:01:18

标签: ocaml

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

[(3, "toto");(1, "a")]

或此列表

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

我该怎么做?

2 个答案:

答案 0 :(得分:3)

不存在对打印列表,元组或更一般的任何类型的内置支持。您必须明确,而且由于列表可以包含任何类型,而元组可以是任何类型的产品,因此您可以自己对其进行解构并适当地设置其格式。

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

__len__

The documentation for Printf列出了您可以通过这种方式打印的其他类型,以及要使用的占位符。

答案 1 :(得分:2)

使用Fmt(它是Format上的改进api),通过首先为一对intstring定义一个由{分隔的打印机,可以打印元组列表。 {1}}:

comma

下一步,我们可以为打印机创建一个let pair_printer = Fmt.(pair ~sep:comma int string) 元组列表,并用分号分隔:

int * string

最后,我们可以将此打印机用于:

let list_printer = Fmt.(list ~sep:(const pf ";@ ") pair_printer)