语法错误:操作符预期(不处理括号)。

问题描述 投票:0回答:1

当我试图测试我的函数时,出现了这个错误,有人知道这个错误是怎么来的吗?

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

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

ocaml
1个回答
1
投票

在这里,我想说的是,在我测试函数的时候,出现了这个错误,有谁知道这个错误是怎么来的?let x = e1 in e2 构造评价 e1,然后将其结果以 e2. 在你的情况下,你没有 in e2所以,要有 let x =.

你写的是 List.iter (fun -> ... let x = e1) in e2. 但你能指望什么呢?x 内涵 e2? 是否应该是第一次评价的结果?e1 循环中?最后一个?如果因为你迭代的列表是空的,所以循环的主体永远不会被执行呢?我建议退一步,多想想你到底想计算什么。

© www.soinside.com 2019 - 2024. All rights reserved.