我是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类型是必需的。
答案 0 :(得分:2)
您是否需要在错误消息中打印整个列表? 如果您只需要打印丢失的项目数,您可以这样做:
failwith (Printf.sprintf "The list is %d elements too short" n)
答案 1 :(得分:1)
在OCaml中您有表达式e
的任何地方,您还可以使用表达式s; e
,其中s
是unit
类型的表达式。这是一个只引发异常的函数:
let f () = raise (Failure "")
这是一个执行相同操作的函数,但首先写出一条消息:
let f () = Printf.printf "helpful message"; raise (Failure "")
作为旁注,这不是特别惯用的OCaml。为什么不把有用的消息放在中呢?像这样:
let f () = raise (Failure "helpful message")