我想在一个终端中逐个打印一些矩形:
4 5 7 8
2 5
3 : bool 6 : int
代表这一点,给定一个数组a
,来自a([2,3], [4,5])
的区域为bool
,而来自a([5,6], [7,8])
的区域为int
。
所以关键是要打印多行数据块,而不是默认打印1行。有谁知道如何在Ocaml中实现这一点?
非常感谢!
答案 0 :(得分:1)
基本上,有两种可能的方法:
第一种方法更具普遍性,并在精神上保持功能。例如:
let item1 =
[" 4 5 "
;"2 "
;"3 : bool "
]
let item2 =
[" 7 8 "
;"5 "
;"6 : int "
]
let transpose ll =
let rec pick_one ll =
match ll with
| [] -> []
| [] :: _ -> []
| _ ->
let tear (reaped, rest) l =
match l with
| [] -> assert false
| hd :: tl -> (hd :: reaped, tl :: rest)
in
let (reaped, rest) = List.fold_left tear ([], []) ll in
(reaped :: (pick_one rest))
in
pick_one ll
let multiline_print items =
let by_lines = transpose items in
let show_line line = List.iter print_string line; print_endline "" in
List.iter show_line by_lines
let _ = multiline_print [item1; item2]
根据您的需要,您可以构建printf
- 类似于此功能。
您需要通过“布局引擎”路由新Printf
模块中的函数生成的字符串。