Syntax error : operator expected (Closing parenthesis not handling)

Syntax error : operator expected (Closing parenthesis not handling)

我在尝试测试我的功能时出现了这个错误,有人知道这个错误是从哪里来的吗?

   let () =
            let t = Sys.time() in
            let args_n = Array.length Sys.argv - 1 in
            let args_list = Array.to_list (Array.sub Sys.argv 1 args_n) in
            List.iter (fun element ->
            let length_of_element = String.length element in
            let text = check_if_file(List.nth args_list 1) in
            let int_ls = search (to_list_ch element) text length_of_element) (check_if_file(List.nth args_list 0 )) in
            if (List.length int_ls)> 1 then print_string "pattern found at characters "
            else if (List.length int_ls) = 1 then print_string "Pattern found at character "
            else print_string "No patterns found."
            ;
            print_ls int_ls;
            Printf.printf "Execution time: %fs\n" (Sys.time() -. t);;

Ocaml 告诉它它来自 length_of_element 之后的右括号,但问题是如果我删除它,List.iter 行的左括号将没有任何右括号匹配他.

let int_ls = search (to_list_ch element) text length_of_element) (check_if_file(List.nth args_list 0 )) in

在尝试使此函数在字符串列表上迭代之前,它是这样的:

let () =
        let t = Sys.time() in
        let args_n = Array.length Sys.argv - 1 in
        let args_list = Array.to_list (Array.sub Sys.argv 1 args_n) in
        let pattern =check_if_file(List.nth args_list 0 )in
        let lpattern = String.length pattern - 1 in
        let text = check_if_file(List.nth args_list 1) in
        let int_ls = search (to_list_ch pattern) text lpattern in
        if (List.length int_ls)> 1 then print_string "pattern found at characters "
        else if (List.length int_ls) = 1 then print_string "Pattern found at character "
        else print_string "No patterns found."
        ;
        print_ls int_ls;
        Printf.printf "Execution time: %fs\n" (Sys.time() -. t);;

但它只适用于一个字符串而不适用于多个字符串,所以我尝试在列表中迭代以使其不仅适用于一个字符串而且适用于字符串列表

let x = e1 in e2 构造计算 e1,然后在 e2 中提供其结果。在你的情况下,你没有 in e2,所以 let x =.

没有多大意义

你写的是List.iter (fun -> ... let x = e1) in e2。但是您认为 xe2 中意味着什么?应该是循环中第一次求值e1的结果吗?最后一个?如果循环体因为你迭代的列表是空的而没有执行怎么办?我建议退后一步,多考虑一下您实际要计算的内容。