Functional programming 如何在OCaml中查找数组元素的索引

Functional programming 如何在OCaml中查找数组元素的索引,functional-programming,ocaml,ocaml-batteries,Functional Programming,Ocaml,Ocaml Batteries,我试图在ocaml中找到整数数组元素的索引。如何递归地执行此操作。 示例代码:let a=[2;3;10] 假设我想返回数组a中的索引3。谢谢你的帮助。我是OCaml编程新手您可以使用索引递归地检查每个元素 let rec find a x n = if a.(n) = x then n else find a x (n+1);; find a x 0;; 如果元素不是数组的一部分,则会引发异常(当n大于数组的长度时) let f xs x = let i = ref (-1) in

我试图在ocaml中找到整数数组元素的索引。如何递归地执行此操作。 示例代码:
let a=[2;3;10]

假设我想返回数组a中的索引3。谢谢你的帮助。我是OCaml编程新手

您可以使用索引递归地检查每个元素

let rec find a x n =
if a.(n) = x then n 
else find a x (n+1);;

find a x 0;;
如果元素不是数组的一部分,则会引发异常(当n大于数组的长度时)

let f xs x =
  let i = ref (-1) in
  let () = Array.iteri (fun n elt -> if x = elt then i := n else ()) xs in
  !i
如果元素不在列表中,则返回值将为
-1

type opt = Some of int | None;;

let find a i =
  let rec find a i n =
    if a.(n)=i then Some n
    else find a i (n+1)
  in
  try 
    find a i 0
   with _ -> None
;;
试验


我更好地理解这个答案。也许其他答案更好,但我仍然需要学习更多来理解它们。我认为可以通过检查if n>(Array.length a-1)然后将“指示未找到的某个整数值”作为find函数中的第一个表达式来避免引发异常。
# find a 3;;
- : int option = Some 1
# find [||] 3;;
- : int option = None
# find a 12;;
- : int option = None