sml - 将命令行参数传递给 SML 脚本

标签 sml smlnj

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

$ 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 编译的程序中,命令行参数很简单:
$ mlton arg.sml
$ ./arg a b c
size: 3
sum: 6

在 SML/NJ 更麻烦的是 create a standalone executable .

关于sml - 将命令行参数传递给 SML 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19363314/

相关文章:

sml Foldl 解释/跟踪

functional-programming - SML/NJ - 模式匹配动态打字

queue - 我如何在 SML/NJ 中使用 Queue 库

tuples - number_in_month 练习(SML 函数从元组列表构建整数列表时出错)

sml - 如何在sml中打印变量?

list - 在 SML 中查找列表中的最大元素

operators - 有没有办法在 SML/NJ 中获得二元运算符的柯里化(Currying)形式?

SML [圆度] 错误

posix - 在 SML 中捕获命令的标准输出