我在此代码中出现语法错误,在"中使用"从第二个"尝试":
let example =
let n = (*Empty_list*) in
while true do
try let i= function (read_line()) in
try let n= execute_inst n i with (*this with*)
|Exception1 s -> print_endline("Exception1 "^s^)
|Exception2 s-> print_endline("Exception2 "^s^)
|Exception3 s -> print_endline("Exception3 "^s^)
|Exception4 -> print_endline("Exception4"); exit 0
with |Exception5 -> print_endline("Exception5")
|Exception6 ->print_endline ("Exception6")
done;;
为什么会这样?
答案 0 :(得分:2)
您的代码包含很多错误,甚至几乎不像OCaml ......
let n = (*Empty_list*) in
在这里你已经注释掉了表达式,结果实际上是let n = in
它不是有效的OCaml。
try let i= function (read_line()) in
function
是一个不能以这种方式使用的关键字
try let n= execute_inst n i with
此问题出在let n= execute_inst n i
,正确的语法为let <value> = <expression-1> in <expression-2>
如果您尝试修改先前绑定的值,则不会以这种方式完成。阅读有关参考文献。
为什么会这样?
因为,您还没有阅读过OCaml手册。
好的,我猜,你试图写这样的东西
exception Exception1 of string
exception Exception2 of string
exception Exception3 of string
exception Exception4
exception Exception5
exception Exception6
let execute_inst insns insn =
(* do something *)
insns
let example f lst =
let n = ref lst in
while true do
try let i = read_line () in
try n := execute_inst !n i with
| Exception1 s -> print_endline ("Exception1 "^s)
| Exception2 s -> print_endline ("Exception2 "^s)
| Exception3 s -> print_endline ("Exception3 "^s)
| Exception4 ->
print_endline "Exception4";
exit 0
with Exception5 -> print_endline "Exception5"
| Exception6 -> print_endline "Exception6"
done
这至少是一段语法正确的OCaml代码。这绝对不是一个应该如何在OCaml中编程的例子。实际上,它恰恰相反。
再一次,我想建议你阅读更多关于OCaml的内容,那里有优秀的书籍,就像Jason Hickey写的一篇优秀的Introduction to OCaml,仅举一例。还有很多材料可以在ocaml.org网站上轻轻地介绍你ocaml。