0
我已经写在OCaml的一些代码,执行类似于以下OCaml的递归打印到顶层
let rec main() =
DO STUFF...
let print_time() =
let time = Unix.localtime (Unix.time()) in
let hour = string_of_int (time.Unix.tm_hour) in
let minute = string_of_int (time.Unix.tim_min) in
print_string ("\n Time -- "^hour^":"^minute)
in
Lwt.bind(Lwt_unix.sleep 30.)
(fun() -> (print_time(); main();)
;;
main();;
此代码完全运行在顶层动作,但是似乎该时间已经被印刷到缓冲器而不是立即打印到屏幕上。当我向顶层提供另一个命令时,缓冲区中的所有时间立即打印到屏幕上。
我该如何纠正这个问题,以便在每次调用print_time()
时将时间打印到顶层,而不是当我给顶层命令时?
示例:如果我运行该程序,然后等待2分钟,然后在顶级输入内容之前输入以下内容。如果我没有在顶层输入任何东西,那么我只收到第一次的消息。
# #use "this_program";;
Time -- 12:03
# let x = 1;;
time -- 12:03
time -- 12:04
time -- 12:04
time -- 12:05
time -- 12:05
val x : int = 1
#
而且,这种“循环”只能使用一次(main()
不会递归调用本身)在本地编译的代码,我不知道如何纠正。