examples/advanced/07_binary_search.cat
# Binary search (recursive)
# Shows boundary handling, recursion, multiple conditions, and is well-suited for tail-call optimization.

binary_search = (arr, target, left=0, right=None) => {
    if right == None { right = len(arr) - 1 }

    if left > right {
        -1
    } else {
        mid = (left + right) // 2
        value = arr[mid]

        if value == target {
            mid
        } elif value < target {
            binary_search(arr, target, mid + 1, right)
        } else {
            binary_search(arr, target, left, mid - 1)
        }
    }
}

values = list(1, 3, 5, 7, 9, 11, 13, 15)
print("index of 7 =", binary_search(values, 7))  # 3