我想做一件简单的事情:
打印列表.
let a = [1;2;3;4;5]
Run Code Online (Sandbox Code Playgroud)
如何将此列表打印到标准输出?
Ash*_*wal 54
您应该熟悉List.iter和List.map函数.它们对于OCaml中的编程至关重要.如果您对Printf模块感到满意,那么您可以写:
open Printf
let a = [1;2;3;4;5]
let () = List.iter (printf "%d ") a
Run Code Online (Sandbox Code Playgroud)
我在我的大多数代码中都打开了Printf,因为我经常使用它中的函数.没有它,你将不得不写Printf.printf
在最后一行.此外,如果您在toploop中工作,请不要忘记以双分号结束上述语句.
Ack*_*kar 36
您可以通过简单的递归来完成此操作:
let rec print_list = function
[] -> ()
| e::l -> print_int e ; print_string " " ; print_list l
Run Code Online (Sandbox Code Playgroud)
打印列表的头部,然后在列表的尾部进行递归调用.
Fab*_*ant 27
print_string (String.concat " " (List.map string_of_int list))
Run Code Online (Sandbox Code Playgroud)
如果问题是找到最快速的方法来实现它,例如在调试时,我们可以说:
扩展标准库(例如电池)通常具有一些附加功能:
List.print
~first:"[" ~sep:";" ~last:"]" (fun c x -> Printf.fprintf c "%d" x) stdout a
Run Code Online (Sandbox Code Playgroud)我前段时间写的这个微小的语法扩展允许你写:
<:print<[$!i <- a${$d:i$}{;}]>>
Run Code Online (Sandbox Code Playgroud)我很晚才回答,但这是另一种方式:
let print_list f lst =
let rec print_elements = function
| [] -> ()
| h::t -> f h; print_string ";"; print_elements t
in
print_string "[";
print_elements lst;
print_string "]";;
Run Code Online (Sandbox Code Playgroud)
要打印一个int列表,我们可以写:
print_list print_int [3;6;78;5;2;34;7];;
Run Code Online (Sandbox Code Playgroud)
但是如果我们要做很多事情,那么使用部分应用程序可以节省专门的功能:
let print_int_list = print_list print_int;;
Run Code Online (Sandbox Code Playgroud)
我们现在可以这样使用:
print_int_list [3;6;78;5;2;34;7];;
Run Code Online (Sandbox Code Playgroud)
如果我们想做一些非常复杂的事情,比如打印一个int列表,该怎么办?使用此功能,很容易:
(* Option 1 *)
print_list (print_list print_int) [[3;6;78];[];[5];[2;34;7]];;
(* Option 2 *)
let print_int_list_list = print_list (print_list print_int);;
print_int_list_list [[3;6;78];[];[5];[2;34;7]];;
(* Option 3 *)
let print_int_list_list = print_list print_int_list;;
print_int_list_list [[3;6;78];[];[5];[2;34;7]];;
Run Code Online (Sandbox Code Playgroud)
打印(int*string)列表(即整数和字符串对的列表):
(* Option 1 *)
print_list (fun (a, b) -> print_string "("; print_int a; print_string ", "; print_string b; print_string ")") [(1, "one"); (2, "two"); (3, "three")];;
(* Option 2 *)
let print_pair f g (a, b) =
print_string "(";
f a;
print_string ", ";
g b;
print_string ")";;
print_list (print_pair print_int print_string) [(1, "one"); (2, "two"); (3, "three")];;
(* Option 3 *)
let print_pair f g (a, b) =
print_string "(";
f a;
print_string ", ";
g b;
print_string ")";;
let print_int_string_pair = print_pair print_int print_string;;
print_list print_int_string_pair [(1, "one"); (2, "two"); (3, "three")];;
(* Option 4 *)
let print_pair f g (a, b) =
print_string "(";
f a;
print_string ", ";
g b;
print_string ")";;
let print_int_string_pair = print_pair print_int print_string;;
let print_int_string_pair_list = print_list print_int_string_pair;;
print_int_string_pair_list [(1, "one"); (2, "two"); (3, "three")];;
Run Code Online (Sandbox Code Playgroud)