在Ocaml中测试例外提升

时间:2015-09-13 22:40:07

标签: ocaml assert

我在OCaml中编写了一个简单的非负数Fibonacci函数,如果传入负数,我会引发异常。

let rec fib (n:int) : int =
  match n with
  | a when a < 0 -> invalid arg ("Positive numbers only")
  | i when i < 2 -> n
  | _ -> fib (n - 1) + fib(n - 2)

  let _ = assert (fib(-1))

该功能非常简陋(它是我的第一个OCaml程序),但我的问题涉及测试在执行fib(-1)时引发异常。

let _ = assert (? = fib(-1))

如何断言此异常?

1 个答案:

答案 0 :(得分:3)

@SteveVinoski的答案非常好,但显然这是一个家庭作业问题而不是一个真正的问题: - )

CRSF ... try语句是处理异常的OCaml片段。这就是您需要用来验证是否引发异常的内容。您可以使用它来编写自己的with版本。