在Ocaml中构建循环

在Ocaml中构建循环,ocaml,Ocaml,我是Ocaml新手,在一个简单的循环中遇到了一个问题,下面是我的代码: open Str;; let main () = let quit_loop = ref false in while not !quit_loop do let str = read_line () in if Str.string_match (Str.regexp "create") str 0 then let train_list = Str.split (Str.rege

我是Ocaml新手,在一个简单的循环中遇到了一个问题,下面是我的代码:

    open Str;;

let main () =
let quit_loop = ref false in
  while not !quit_loop do
    let str = read_line () in
    if Str.string_match (Str.regexp "create") str 0
      then let train_list = Str.split (Str.regexp "[ \t]+") str in
      print_string "List created\n";
    if Str.string_match (Str.regexp "delete") str 0
      then let train_list = Str.split (Str.regexp "[ \t]+") str in
      print_string "train deleted\n";
    if Str.string_match (Str.regexp "quit") str 0
      then quit_loop := true

done;;

let _ = main ()
代码可以编译,但似乎只有“创建”起作用。如果你有什么建议可以帮我


谢谢

如果正确缩进,您将获得:

open Str;;

let main () =
  let quit_loop = ref false in
  while not !quit_loop do
    let str = read_line () in
    if Str.string_match (Str.regexp "create") str 0
    then let train_list = Str.split (Str.regexp "[ \t]+") str in
      print_string "List created\n";
      if Str.string_match (Str.regexp "delete") str 0
      then let train_list = Str.split (Str.regexp "[ \t]+") str in
        print_string "train deleted\n";
        if Str.string_match (Str.regexp "quit") str 0
        then quit_loop := true

  done;;

let _ = main ()
如您所见,另一个
if
嵌套在第一个
if
块中。这是由于
let e=。。。在instr1中创建一个包含所有后续内容的块

你应该写(你可以用
(…)
替换
开始…结束
):


我的直觉是,所有后续的
if
s都嵌套在第一个
if
中。如果在
if
语句周围加上括号,会有什么变化吗?谢谢你的帮助!
open Str;;

let main () =
  let quit_loop = ref false in
  while not !quit_loop do
    let str = read_line () in
    if Str.string_match (Str.regexp "create") str 0
    then begin 
      let train_list = Str.split (Str.regexp "[ \t]+") str in
      print_string "List created\n"
    end;
    if Str.string_match (Str.regexp "delete") str 0
    then begin 
      let train_list = Str.split (Str.regexp "[ \t]+") str in
      print_string "train deleted\n"
    end;
    if Str.string_match (Str.regexp "quit") str 0
    then quit_loop := true
  done;;

let _ = main ()