【问题标题】:OCaml recursively print to the toplevelOCaml 递归打印到顶层
【发布时间】:2014-02-09 18:45:44
【问题描述】:

我在 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() 不会递归调用自身),我不知道如何纠正。

【问题讨论】:

    标签: ocaml utop


    【解决方案1】:

    在您致电print_string 后,我会尝试添加flush stdout

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2017-06-22
      • 2012-10-17
      相关资源
      最近更新 更多