2015-10-14 57 views
0

如果我打电话给我的游程编码方案与编码[1; 1; 2],我得到OCaml中打印的RLE列表

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

我怎么会得到一个支架()的单打以及所以它会像[多(1,2);单打(1)]?

回答

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)]