在 OCaml 中打印 RLE 列表
Printing an RLE list in OCaml
如果我用 encode[1;1;2] 调用游程编码程序,我得到
int encode list = [Multiple (1, 2); Singles 1]
我怎样才能得到单打的括号 () 就像 [Multiple (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)]
如果我用 encode[1;1;2] 调用游程编码程序,我得到
int encode list = [Multiple (1, 2); Singles 1]
我怎样才能得到单打的括号 () 就像 [Multiple (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)]