2013-10-14 101 views
5

我该如何处理将命令行参数传递给SML脚本的问题?我知道,有正确的类型(unit -> string list)的CommandLine.arguments()功能,但调用解释,像这样:将命令行参数传递给SML脚本

$ sml script_name.sml an_argument another_one 

不给我任何东西。指针?

回答

8

试试这个。

(* 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编译的程序,命令行ARG游戏简单:

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

在SML/NJ它更麻烦来create a standalone executable的。

相关问题