在OCaml中打印RLE列表

时间:2015-10-14 03:24:03

标签: ocaml ocamllex

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

int encode list = [Multiple (1, 2); Singles 1]

我如何获得单曲的支架(),所以它会像[Multiple(1,2);单打(1)]?

1 个答案:

答案 0 :(得分:0)

这就是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)]