在OCaml中打印RLE列表

在OCaml中打印RLE列表,ocaml,ocamllex,Ocaml,Ocamllex,如果我用encode[1;1;2]调用我的runlength encode程序,我得到 int-encode-list=[多(1,2);单(1)] 我怎样才能为单体得到一个括号(),就像[多(1,2);单体(1)]?这就是OCaml顶级打印值的方式。如果一个数据构造函数只有一个参数,那么它将不带括号地写入 如果希望输出看起来不同,则必须编写自己的代码来进行打印 下面是一个演示如何使用#install_printer执行此操作的会话: $ ocaml OCaml version 4

如果我用encode[1;1;2]调用我的runlength encode程序,我得到

int-encode-list=[多(1,2);单(1)]


我怎样才能为单体得到一个括号(),就像[多(1,2);单体(1)]?

这就是OCaml顶级打印值的方式。如果一个数据构造函数只有一个参数,那么它将不带括号地写入

如果希望输出看起来不同,则必须编写自己的代码来进行打印

下面是一个演示如何使用
#install_printer
执行此操作的会话:

$ ocaml
        OCaml version 4.02.1

# type r = Singles of int | Multiple of int * int;;
type r = Singles of int | Multiple of int * int
# let printr f = function
  | Singles x -> Format.fprintf f "Singles (%d)" x
  | Multiple (x, y) -> Format.fprintf f "Multiple (%d, %d)" x y
  ;;
val printr : Format.formatter -> r -> unit = <fun>
# #install_printer printr;;
# Singles (3);;
- : r = Singles (3)
# Multiple (3, 5);;
- : r = Multiple (3, 5)
# [ Singles(1); Multiple(3, 5)];;
- : r list = [Singles (1); Multiple (3, 5)]
$ocaml
OCaml版本4.02.1
#r型=整数的单数|整数*整数的倍数;;
r型=整数的单数|整数*整数的倍数
#设printr f=函数
|单件x->Format.fprintf f“单件(%d)”x
|多个(x,y)->Format.fprintf f“多个(%d,%d)”x y
;;
val printr:Format.formatter->r->unit=
#安装打印机打印机;;
#单打(三);;;
-:r=单打(3)
#多(3,5);;
-:r=多(3,5)
#[单打(1);多打(3,5)];;
-:r list=[单个(1);多个(3,5)]