package grace
Source file binary_search.ml
1 2 3 4 5 6 7 8 9 10 11let find_last_satisfying t ~pred ~get ~length = let rec loop ~lo ~hi = if lo >= hi then lo - 1 else ( let mid = lo + ((hi - lo) / 2) in if pred (get t mid) then loop ~lo:(mid + 1) ~hi else loop ~lo ~hi:mid) in let idx = loop ~lo:0 ~hi:(length t) in if idx < 0 then None else Some idx ;;