【发布时间】:2018-07-06 06:28:36
【问题描述】:
尽管我已经检查了有关如何打印数组的先前答案,但我在打印数组数组时遇到了困难。我无法理解在 OCaml 中执行此操作的功能性方式。
Ocaml: printing out elements in an array of int lists
假设我有一个数组数组。我如何简单地打印这个数组?
mutable ch : t array array;
【问题讨论】:
尽管我已经检查了有关如何打印数组的先前答案,但我在打印数组数组时遇到了困难。我无法理解在 OCaml 中执行此操作的功能性方式。
Ocaml: printing out elements in an array of int lists
假设我有一个数组数组。我如何简单地打印这个数组?
mutable ch : t array array;
【问题讨论】:
let ch = [| [|"a"; "b"|]; [|"c"|] |]
let () = ch |> Array.iter (Array.iter print_endline)
这使用部分函数应用程序来保持简短。如果我们稍微打开它:
let () = ch |> Array.iter (fun xs -> xs |> Array.iter (fun x -> print_endline x))
【讨论】:
另一种打印数组的方法是使用与Fmt 库耦合的 Format 模块进行漂亮的打印,该库提供用于定义打印函数的组合器:
例如,如果你有一个整数数组:
let a = [| [|1; 2|]; [|3;4|] |]
我们可以为这些值定义一个打印机
let int_array_array_printer = let open Fmt in
array (array int)
然后我们可以使用 Format 模块打印数组:
;; Format.printf "@[<v>%a@]@."
int_array_array_printer a
在格式字符串@[<v>%a@]@.中,可以将不同的元素分解成
@[<v> 打开一个垂直框,从而在每个元素之间打印一个换行符%a: 下一个元素将使用自己的漂亮打印功能@]关闭竖框@. 刷新缓冲区并添加新行。【讨论】: