mathlex-eval 0.1.1

Numerical evaluator for mathlex ASTs with broadcasting support
Documentation
/// Streaming evaluation example.
///
/// Demonstrates lazy consumption via the EvalIterator interface.
///
/// Prerequisites:
///   cargo build --release --features ffi

import MathLexEval

func streamingEvalExample() throws {
    // AST JSON for: x^2 + 1
    let astJson = """
    {"Binary":{"op":"Add","left":{"Binary":{"op":"Pow","left":{"Variable":"x"},"right":{"Integer":2}}},"right":{"Integer":1}}}
    """

    let expr = try MathEvaluator.compile(json: astJson)

    // Create handle with array input
    let handle = try MathEvaluator.createHandle(
        expr,
        args: ["x": .array([1, 2, 3, 4, 5])]
    )

    print("x^2 + 1 for x = 1..5:")

    // Consume lazily via iterator — conforms to Sequence
    for (i, result) in handle.makeIterator().enumerated() {
        let x = i + 1
        switch result {
        case .success(let val):
            print("  f(\(x)) = \(val)")
        case .failure(let err):
            print("  f(\(x)) = ERROR: \(err)")
        }
    }
}