使用""中的语法错误

时间:2014-12-25 22:48:58

标签: syntax-error ocaml let try-with

我在此代码中出现语法错误,在"中使用"从第二个"尝试":

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;;

为什么会这样?

1 个答案:

答案 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。