2015-11-28 7 views
2

Я пытаюсь найти индекс элемента целочисленного массива в ocaml. Как это сделать рекурсивно. Пример кода: let a = [|2; 3; 10|];; Предположим, я хочу вернуть индекс 3 в массив a. Любая помощь оценивается. Я новичок в программировании OCamlКак найти индекс элемента Array в OCaml

ответ

2

Вы проверяете каждый из элементов рекурсивно с использованием индекса

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

find a x 0;; 

, что вызовет исключение (при п больше, чем длина массива) в случае, если элемент не часть массива.

+0

Я лучше понять этот ответ. Может быть, другие ответы лучше, но мне все еще нужно больше узнать, чтобы понять их. И я думаю, что исключения исключений можно было бы избежать, проверив, если n> (Array.length a -1), а затем «некоторое целочисленное значение, чтобы указать не найденное», как первое выражение в функции find. –

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