func binary_search(arr, value, low=0, high=arr.end) { high < low && return -1 var middle = ((high+low) // 2) given (arr[middle]) { |item| case (value < item) { binary_search(arr, value, low, middle-1) } case (value > item) { binary_search(arr, value, middle+1, high) } case (value == item) { middle } } }