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

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

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

binary_search = (arr, target) => {
    _bsearch(arr, target, 0, len(arr) - 1)
}

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