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.