2013-10-14 14 views
5

Come posso passare gli argomenti della riga di comando a uno script SML? Sono consapevole che c'è una funzione CommandLine.arguments() del tipo giusto (unit -> string list), ma invocando l'interprete in questo modo:Passaggio degli argomenti della riga di comando a uno script SML

$ sml script_name.sml an_argument another_one 

non mi dà niente. Puntatori?

risposta

8

Prova questo.

(* 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) 

L'uscita è importante, altrimenti si ottiene un sacco di avvertimenti trattare argomenti come estensioni. Cioè, cerca di analizzare gli argomenti rimanenti come file, ma poiché non hanno un'estensione sml, vengono trattati come estensioni del compilatore.

$ 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 

In programmi compilati con MLton, args riga di comando sono semplici:

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

In SML/NJ è più di una seccatura per create a standalone executable.

Problemi correlati