Я пытаюсь найти индекс элемента целочисленного массива в ocaml. Как это сделать рекурсивно. Пример кода: let a = [|2; 3; 10|];;
Предположим, я хочу вернуть индекс 3 в массив a. Любая помощь оценивается. Я новичок в программировании OCamlКак найти индекс элемента Array в OCaml
2
A
ответ
2
Вы проверяете каждый из элементов рекурсивно с использованием индекса
let rec find a x n =
if a.(n) = x then n
else find a x (n+1);;
find a x 0;;
, что вызовет исключение (при п больше, чем длина массива) в случае, если элемент не часть массива.
1
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
, если элемент не находится в списке.
2
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
;;
Тест
# find a 3;;
- : int option = Some 1
# find [||] 3;;
- : int option = None
# find a 12;;
- : int option = None
Я лучше понять этот ответ. Может быть, другие ответы лучше, но мне все еще нужно больше узнать, чтобы понять их. И я думаю, что исключения исключений можно было бы избежать, проверив, если n> (Array.length a -1), а затем «некоторое целочисленное значение, чтобы указать не найденное», как первое выражение в функции find. –