#!/usr/bin/ruby

#
## https://rosettacode.org/wiki/Sequence_of_primes_by_Trial_Division
#

func is_prime(a) {
  given (a) {
        case (a == 2)              { true  }
        case (a <= 1 || a.is_even) { false }
        default                    { 3 .. a.sqrt -> any { a %% _ } -> not };
    }
}

func prime_seq(amount, callback) {
    var (counter, number) = (0, 0);
    while (counter < amount) {
        if (is_prime(number)) {
            callback(number);
            counter += 1;
        };
        number += 1;
    };
};
 
prime_seq(10, {|p| say p});     # prints the first 10 primes