当我试图测试我的函数时,出现了这个错误,有人知道这个错误是怎么来的吗?
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
. 但你能指望什么呢?x
内涵 e2
? 是否应该是第一次评价的结果?e1
循环中?最后一个?如果因为你迭代的列表是空的,所以循环的主体永远不会被执行呢?我建议退一步,多想想你到底想计算什么。