- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在名为 testexc.sml 的文件中有以下 SML 程序:
structure TestExc : sig
val main : (string * string list -> int)
end =
struct
exception OhNoes;
fun main(prog_name, args) = (
raise OhNoes
)
end
我用 smlnj-110.74 像这样构建它:
ml-build sources.cm TestExc.main testimg
其中 sources.cm 包含:
Group is
csx.sml
我这样调用程序(在 Mac OS 10.8 上):
sml @SMLload testimg.x86-darwin
我希望在调用程序时看到东西,但我得到的唯一结果是返回代码 1:
$ sml @SMLload testimg.x86-darwin
$ echo $?
1
什么给了?为什么 SML 会在这个未处理的异常上默默地失败?这种行为正常吗?有没有我可以放在 main 上的一些通用处理程序来打印发生的错误?我意识到我可以匹配异常 OhNoes,但是对于包含我可能不知道的异常的大型程序呢?
最佳答案
答案是处理异常,将其称为 e,并使用系统中可用的几个函数打印数据:
$ sml
Standard ML of New Jersey v110.74 [built: Tue Jan 31 16:23:10 2012]
- exnName;
val it = fn : exn -> string
- exnMessage;
val it = fn : exn -> string
-
现在,我们有了修改后的程序,如果我们将通用处理程序附加到 main() 上:
structure TestExc : sig
val main : (string * string list -> int)
end =
struct
exception OhNoes;
open List;
fun exnToString(e) =
List.foldr (op ^) "" ["[",
exnName e,
" ",
exnMessage e,
"]"]
fun main(prog_name, args) = (
raise OhNoes
)
handle e => (
print("Grasshopper disassemble: " ^ exnToString(e));
42)
end
我使用列表来生成消息,因此要构建此程序,您需要引用 sources.cm 中的基础库:
Group is
$/basis.cm
sources.cm
下面是我们运行它时的样子:
$ sml @SMLload testimg.x86-darwin
Grasshopper disassemble: [OhNoes OhNoes (more info unavailable: ExnInfoHook not initialized)]
$ echo $?
42
我不知道 ExnInfoHook 是什么,但至少我看到了 OhNoes。可惜 SML 编译器没有为我们添加一个基本的处理程序,以便在编译的程序中出现未处理的异常时打印一些东西。我怀疑 ml-build 会负责这项任务。
关于exception - 如何在 SML/NJ 中报告未处理的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20533723/
我开始学习 Standard ML,现在我尝试使用 New Jersey 编译器的 Standard ML。 现在我可以使用交互式循环,但是如何将源文件编译为独立的可执行文件? 例如,在 C 中,你可
我最近看到有人使用 as在他们的 SML/NJ 计划中。我找到的最有用的引用是 "as" keyword in OCaml . 虽然 OCaml 也属于 ML 编程语言家族,但它们是不同的。例如,在上
我是 sml 的新手,并且在内部函数的语法方面遇到了麻烦。我需要做的是获取一个整数列表的列表,对每个列表求平均值,然后返回一个实数列表。这是我到目前为止的伪代码。 fun listAvg [] =
我正在尝试创建一个长度函数,类似于 ML 中已包含的函数。我的限制是它必须在一行上完成并使用map、foldl 或foldr。 现在我的代码行如下所示: val mylength = foldr (
我真的很想在SML中创建一个HashTable,似乎在SML / NJ中已经有一个结构。 问题是,我该如何使用它?我还没有完全理解如何在SML中使用结构,而且我读过的书中一些非常基本的示例给了我什至不
SML/NJ 中是否有类似列表模式匹配的东西,但适用于字符串?我最终想做的是删除字符串的第一个字符(如果它是一个特定的字符),并且首先想到的是这种解决方案,所以如果我可以做到这一点而不会进一步困惑,我
我对 SML 真的很陌生,我不知道如何得到相同的答案; 它类似于:3^4 32 所以我的答案是 4(3 的幂),同样如果我有数字 4 和 63 然后 4^263 所以我的答案是 2(4 的幂)。 我
我正在编写的程序需要它(重复平方计算 x^n)。我似乎找不到它的语法,或者它是否受支持。 最佳答案 它们在 Word8 and Word structures 内可用. let open Word
我正在使用 SML/NJ 110.79,其中包括对 Successor ML 项目定义的新结构的支持。其中, Fn 结构体。 碰巧的是,我已经在 my personal project with ut
我是 Standard ML 的新手,我正在尝试了解 SML/NJ 运行时环境。我想让它适应我的需要。具体来说,我想: 默认使用 IntInf 防止它将字符串和 IntInf 截断为 70 个字符。
是否可以使用动态类型的输入参数编写函数? 我尝试了模式匹配,但显然它不是这样工作的。 我希望做这样的事情: fun firstStr (0,n:string) = n | firstStr (b:
我想编写一个函数来搜索列表并查找该列表中是否有重复值。该函数应该返回一个 bool 值。这是我所在的位置,但这不起作用...... fun myFunc [] = true myFunc(x::xs)
我对 SNL/NJ 很陌生,想知道如何实现以下目标: foo(stuff,counter) { while(counter > 0) { bar(stuff); cou
如何使用 SML/NJ 运行从 STDIN 读取并写入 STDOUT 的脚本?有没有办法摆脱解释器本身的输出? 最佳答案 需要明确的是,SML/NJ 严格来说并不是一个解释器。它是一个恰好有 REPL
我正在尝试使用 SML/NJ,并且我使用 sml int val r = 3628800 : int [autoloading] [library $SMLNJ-BASIS/basis.cm is
我在名为 testexc.sml 的文件中有以下 SML 程序: structure TestExc : sig val main : (string * string
在 SML NJ 中,我想查找一个字符串是否是另一个字符串的子字符串并找到它的索引。谁能帮我解决这个问题? 最佳答案 Substring.position 函数是我在基础库中找到的唯一一个似乎可以进行
有没有办法获得 signature 的列表? s 或 structure s 在 SML/NJ REPL 的顶级环境中可用吗?我正在寻找似乎在 sources.cm 中定义的签名/结构的列表。 sml
Often we are interested in computing f(i) i=m n∑ , the sum of function values f(i) for i = m through
我在使用 SML/NJ 交互系统时遇到了一些问题,即当我尝试使用我的箭头键(向左或向右在我输入的表达式中进行更正,直到重复最后一个表达式)时,我的终端打印代码。 (例如 ^[[A 向上 ^[[D 向左
我是一名优秀的程序员,十分优秀!