如何打印2D数组

时间:2015-07-24 10:26:37

标签: arrays list printing floating-point ocaml

这里有什么问题?

let elem = function(list)-> (List.map string_of_int list);;
let rec row = function (list)->if elem(List.hd list)::row(List.tl list);;

1 个答案:

答案 0 :(得分:3)

我想就您的代码提供一些建议:

1 - 当括号不明确时,我们不会在括号之间加上参数:

let elem = fun l -> String.concat " " (List.map string_of_float l)

2 - 而不是使用if then else,而是在列表中使用模式匹配。它的效率更高,您的代码更具可读性:

let rec row = function
  | [] ->  []
  | x :: tl -> elem x :: row tl 

这个函数不是尾递归的(改成它可以是一个练习)

我还把你的最后一个功能放在这里:

let print = fun l -> print_string (String.concat "\n" (row l))

let () = 
 (print [[0.2;-0.2;0.2];[0.1;-0.1;0.1];[0.5;-0.5;0.5]])

这是我的版本:

let string_of_float_list l = String.concat " " (List.map string_of_float l)

let float_list_to_string l = String.concat "\n" (List.map string_of_float_list l)

let () = Printf.printf "%s" (float_list_to_string [[1.0;2.0;3.0];[1.0;2.0;3.0];[1.0;2.0;3.0]])

输出:

1. 2. 3.
1. 2. 3.
1. 2. 3.