我会为((string * string) * 'a)
我尝试过:
(* print a list of ((string * string) * 'a) *)
let rec print_list = function
[] -> Printf.printf "\n empty list \n %!"; ()
| ((s1,s2),a)::l -> Printf.printf "\n(s1,s2)= %s %s \n %!" s1 s2; print_list l;;
但它不会打印任何内容。
至少打印empty list
,对吗?
答案 0 :(得分:1)
在许多语言(C和Ocaml)中,您最好将\n
放在printf
格式控制字符串的 end ,或强制刷新标准输出。输出到标准输出通常是buffered(出于性能原因)。
您应该在使用Ocaml进行编码之前阅读documentation of Ocaml。
您可能还想致电(来自Pervasives)print_newline
;仔细阅读Printf
module的文件;您可以使用printf
%!
格式字符串
以下是使用Ocaml 4.01的一个示例(从您编辑过的问题复制而来):
% ocaml
OCaml version 4.01.0
# (* print a list of ((string * string) * 'a) *)
let rec print_list = function
[] -> Printf.printf "\n empty list \n %!"; ()
| ((s1,s2),a)::l -> Printf.printf "\n(s1,s2)= %s %s \n %!" s1 s2;
print_list l;;
val print_list : ((string * string) * 'a) list -> unit = <fun>
# print_list [];;
empty list
- : unit = ()
#
如您所见,empty list
被打印出来。在上面的代码中,%
是一个shell提示符,#
是一个ocaml toplevel提示符。您的功能是逐字复制的。 print_list [];;
在顶级输入。