2013-10-14 21 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でないためコンパイラ拡張として扱われます。 MLtonでコンパイルされたプログラムで

$ 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 

、コマンドライン引数は簡単です:SML/NJで

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

それはcreate a standalone executableに口論のより多くのです。

関連する問題