Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let findi x l =
- let rec loop i n l =
- match l with
- | y::tl -> loop (i+1) (if y = x then i else n) tl
- | [] -> n
- in
- loop 0 (-1) l;;
- let rindex elem =
- let rec find_index i max_found = function
- | (x::xs) when x = elem -> find_index (i+1) i xs
- | (_::xs) -> find_index (i+1) max_found xs
- | [] -> max_found
- in find_index 0 (-1);;
- let rindex elem ls =
- let find_index (i, max) elem' = (i+1, if elem' = elem then i else max)
- in snd (fold_left find_index (0, -1) ls);;
- let find_index elt lst =
- (* Wrap inner function that accepts an accumulator to keep the interface clean *)
- let rec find_it elt acc = function
- | hd :: tl when elt = hd -> acc (* match *)
- | hd :: tl -> find_it elt (acc + 1) tl (* non-match *)
- | _ -> raise Not_found (* end of list *)
- in find_it elt 0 lst (* call inner function with accumulator starting at 0 *)
- ;;
Add Comment
Please, Sign In to add comment