0

我是 OCaml 的新手,正在用 OCaml 编写一个递归程序,它返回列表的第 n 个元素。但是,当列表太短时,我需要显示一条信息性错误消息,显示一个列表,例如“( abc )没有 5 个元素”。这是我的代码

    let rec nth_element n list =
       match list with
       | [] -> raise(Failure "")
       | a :: l -> match n with
              0 -> a
              n -> nth_element (n-1) l

我想用所需的错误消息替换 'raise(Failure "")' 部分。为它编写一个函数并没有帮助,因为它返回了单位类型,而 int 类型是必需的。

4

2 回答 2

2

您是否需要在错误消息中打印整个列表?如果您只需要打印丢失的项目计数,您可以这样做:

failwith (Printf.sprintf "The list is %d elements too short" n)
于 2013-06-02T08:13:28.333 回答
1

e在 OCaml 中有表达式的任何地方,也可以有一个表达式wheres; estype 的表达式unit。这是一个引发异常的函数:

let f () = raise (Failure "")

这是一个功能相同的函数,但首先写出一条消息:

let f () = Printf.printf "helpful message"; raise (Failure "")

作为旁注,这并不是特别惯用的 OCaml。为什么不将有用的消息放在异常中?像这样:

let f () = raise (Failure "helpful message")
于 2013-06-02T05:44:51.337 回答