如何在Ocaml中打印数据块?
我想在这样的终端中逐个打印一些矩形:如何在Ocaml中打印数据块?,ocaml,printf,Ocaml,Printf,我想在这样的终端中逐个打印一些矩形: 4 5 7 8 2 5 3 : bool 6 : int 它表示,给定一个数组a,来自a([2,3],[4,5])的区域是bool,来自a([5,6],[7,8])的区域是int 因此,关键是将数据块打印成几行,而不是默认的一行。有人知道如何在Ocaml中实现这一点吗 多谢各位 基本上,有两种可能的方法: 累积二维输出,并使用专门的打印功能,以您希望的方式重新排列字符串 打印到具
4 5 7 8
2 5
3 : bool 6 : int
它表示,给定一个数组a
,来自a([2,3],[4,5])
的区域是bool
,来自a([5,6],[7,8])
的区域是int
因此,关键是将数据块打印成几行,而不是默认的一行。有人知道如何在Ocaml中实现这一点吗
多谢各位 基本上,有两种可能的方法:
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
模块中的函数生成的字符串路由 基本上,有两种可能的方法:
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
模块中的函数生成的字符串路由 你的问题一点也不清楚。你能给出你想写的函数的输入和输出的例子吗?你想要什么类型的?你的问题一点也不清楚。你能给出你想写的函数的输入和输出的例子吗?你想要什么类型的?