在ocaml异常中打印列表

时间:2013-06-02 05:18:37

标签: ocaml

我是Ocaml的新手,我正在ocaml中编写一个递归程序,它返回列表中的第n个元素。但是,当列表太短时,我需要显示一条信息性错误消息,显示列表,例如“(a b c)没有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类型是必需的。

2 个答案:

答案 0 :(得分:2)

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

failwith (Printf.sprintf "The list is %d elements too short" n)

答案 1 :(得分:1)

在OCaml中您有表达式e的任何地方,您还可以使用表达式s; e,其中sunit类型的表达式。这是一个只引发异常的函数:

let f () = raise (Failure "")

这是一个执行相同操作的函数,但首先写出一条消息:

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

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

let f () = raise (Failure "helpful message")