5
我該如何處理將命令行參數傳遞給SML腳本的問題?我知道,有正確的類型(unit -> string list
)的CommandLine.arguments()
功能,但調用解釋,像這樣:將命令行參數傳遞給SML腳本
$ sml script_name.sml an_argument another_one
不給我任何東西。指針?
我該如何處理將命令行參數傳遞給SML腳本的問題?我知道,有正確的類型(unit -> string list
)的CommandLine.arguments()
功能,但調用解釋,像這樣:將命令行參數傳遞給SML腳本
$ 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編譯的程序,命令行ARG遊戲簡單:
$ mlton arg.sml
$ ./arg a b c
size: 3
sum: 6
在SML/NJ它更麻煩來create a standalone executable的。