ruchy 4.2.1

A systems scripting language that transpiles to idiomatic Rust with extreme quality engineering
Documentation
// 13_iterators.ruchy - Working with iterators and functional programming

fn main() {
    println("=== Iterators ===\n")

    // Basic iteration
    println("=== Basic Iteration ===")

    let numbers = [1, 2, 3, 4, 5]

    // Simple for loop
    for n in numbers {
        println(f"Number: {n}")
    }

    // Map operation
    println("\n=== Map ===")

    let doubled = numbers.map(x => x * 2)
    println(f"Original: {numbers}")
    println(f"Doubled: {doubled}")

    // Filter operation
    println("\n=== Filter ===")

    let evens = numbers.filter(x => x % 2 == 0)
    println(f"Even numbers: {evens}")

    // Reduce/Fold
    println("\n=== Reduce ===")

    let sum = numbers.reduce(0, (acc, x) => acc + x)
    println(f"Sum: {sum}")

    let product = numbers.reduce(1, (acc, x) => acc * x)
    println(f"Product: {product}")

    // Find operations
    println("\n=== Find Operations ===")

    let first_even = numbers.find(x => x % 2 == 0)
    match first_even {
        Some(n) => println(f"First even: {n}"),
        None => println("No even numbers")
    }

    let has_negative = numbers.any(x => x < 0)
    println(f"Has negative: {has_negative}")

    let all_positive = numbers.all(x => x > 0)
    println(f"All positive: {all_positive}")

    // Take and skip
    println("\n=== Take and Skip ===")

    let first_three = numbers.take(3)
    println(f"First 3: {first_three}")

    let skip_two = numbers.skip(2)
    println(f"After skipping 2: {skip_two}")

    // Zip
    println("\n=== Zip ===")

    let letters = ["a", "b", "c", "d", "e"]
    let pairs = numbers.zip(letters)
    println(f"Zipped pairs: {pairs}")

    // Enumerate
    println("\n=== Enumerate ===")

    let enumerated = numbers.enumerate()
    for pair in enumerated {
        let index = pair.0
        let value = pair.1
        println(f"Index {index}: {value}")
    }

    // Chain using concat
    println("\n=== Chain (using concat) ===")

    let first = [1, 2, 3]
    let second = [4, 5, 6]
    let chained = first.concat(second)
    println(f"Chained: {chained}")

    // Flatten nested arrays
    println("\n=== Flatten ===")

    let nested = [[1, 2], [3, 4], [5, 6]]
    let flattened = nested.flatten()
    println(f"Flattened: {flattened}")

    // Iterator combinators
    println("\n=== Complex Combinations ===")

    let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    let result = data
        .filter(x => x % 2 == 0)        // Keep even
        .map(x => x * x)                 // Square them
        .filter(x => x < 50)             // Keep under 50
        .reduce(0, (a, b) => a + b)      // Sum them

    println(f"Complex result: {result}")

    // Unique elements
    println("\n=== Unique ===")

    let duplicates = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
    let unique = duplicates.unique()
    println(f"Unique elements: {unique}")

    // Sum, min, max
    println("\n=== Aggregations ===")

    let nums = [5, 2, 8, 1, 9, 3]
    println(f"Sum: {nums.sum()}")
    println(f"Min: {nums.min()}")
    println(f"Max: {nums.max()}")
    println(f"Product: {nums.product()}")

    println("\n=== Iterator Examples Complete ===")
}