【问题标题】:Passing command-line arguments to an SML script将命令行参数传递给 SML 脚本
【发布时间】:2013-10-22 04:48:29
【问题描述】:

如何将命令行参数传递给 SML 脚本?我知道有一个正确类型的 CommandLine.arguments() 函数 (unit -> string list),但是像这样调用解释器:

$ sml script_name.sml an_argument another_one

没有给我任何东西。指针?

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    试试这个。

    (* arg.sml *)
    val args = CommandLine.arguments()
    fun sum l = foldr op+ 0 (map (valOf o Int.fromString) l)
    val _ = print ("size: " ^ Int.toString (length args) ^ "\n")
    val _ = print ("sum: " ^ Int.toString (sum args) ^ "\n")
    val _ = OS.Process.exit(OS.Process.success)
    

    出口很重要,否则您会收到一堆将参数视为扩展的警告。也就是说,它会尝试将剩余的参数解析为文件,但由于它们没有 sml 扩展名,因此它们被视为编译器扩展名。

    $ sml arg.sml 1 2 3
    Standard ML of New Jersey v110.74 [built: Thu Jan 10 18:06:35 2013]
    [opening arg.sml]
    [autoloading]
    [library $SMLNJ-BASIS/basis.cm is stable]
    [autoloading done]
    size: 3
    sum: 6
    val args = ["1","2","3"] : string list
    val sum = fn : string list -> int
    

    在使用 MLton 编译的程序中,命令行参数很简单:

    $ mlton arg.sml
    $ ./arg a b c
    size: 3
    sum: 6
    

    在 SML/NJ 中,create a standalone executable 更麻烦。

    【讨论】:

      猜你喜欢
      • 2014-03-08
      • 2016-12-19
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      相关资源
      最近更新 更多