将命令行参数传递给SML脚本

将命令行参数传递给SML脚本,sml,smlnj,Sml,Smlnj,如何将命令行参数传递给SML脚本?我知道有一个类型正确的命令行.arguments()函数(unit->string list),但调用解释器的方式如下: $ sml script_name.sml an_argument another_one 没有给我任何东西。指针?试试这个 (* arg.sml *) val args = CommandLine.arguments() fun sum l = foldr op+ 0 (map (valOf o Int.fromString) l) va

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

$ sml script_name.sml an_argument another_one
没有给我任何东西。指针?

试试这个

(* 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,这是一个更麻烦的问题