以ocaml打印列表

时间:2014-11-04 11:14:17

标签: list ocaml

我会为((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,对吗?

1 个答案:

答案 0 :(得分:1)

在许多语言(C和Ocaml)中,您最好将\n放在printf格式控制字符串的 end ,或强制刷新标准输出。输出到标准输出通常是buffered(出于性能原因)。

您应该在使用Ocaml进行编码之前阅读documentation of Ocaml

您可能还想致电(来自Pervasivesprint_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 [];;在顶级输入。