我想知道在OCAML中是否有一种方法来返回字符串列表中字符串元素的长度和元素本身的长度,我想做这样的事情。
let (length_of_element,element) = List.map String.length ["Hello"; "World!"] in .....
我想做这样的事情: 在 关键字传递到代码的下一部分,即 length_of_element
这是元素 "Hello "的长度(如果我们在循环0处)和元素本身,这是 "Hello"(如果我们在循环0处)。
更新
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);;
在我使用这个函数的情况下。check_if_file(List.nth args_list 0 )
是我的清单。
我试图实现 Guillaume Melquiond 在他的回答中告诉我,但我得到这个错误。
错误: 语法错误:操作符预期。
(错误指向这一行 。
let int_ls = search (to_list_ch element) text length_of_element) check_if_file(List.nth args_list 0 ) in
有谁会是这个错误从何而来?
任何帮助将被感激。
我能想象的最简单的方法是这样的。
List.map (fun s -> String.length s, s) ["Hello"; "Everyone"]
这将返回 :
- : (int * string) list = [(5, "Hello"); (8, "Everyone")]
至于你的编辑,这个:
let int_ls = search (to_list_ch element) text length_of_element) check_if_file(List.nth args_list 0 )
是不平衡的:在 length_of_element 后面没有与之匹配的括号。
在OCaml中执行外部迭代是相当复杂的。在OCaml中执行外部迭代是相当复杂的,而在内部迭代则简单得多。这意味着你的代码主体需要被传递给 List.map
而不是相反。
List.map (fun element ->
let length_of_lement = String.length element in
... (* use element and length_of_element here *)
) ["Hello"; "World!"]
如果你不在乎生成一个列表,只需使用 List.iter
而不是 List.map
.
第二个问题。
(你最好在每个StackOverflow帖子中提出一个问题。)
您提取的文本有3个右括号,只有一个左括号。这可能与您的语法错误有关。