Usaremos NONE para marcar o fim da reiteração. Precisamos também deum closure para armazenar o próximo retorno do gerador (já que geradores não são idempotentes). Usaremos um int ref para o closure.
Para criar a função range, criaremos uma função que receba um gerador e retorne uma lista de todos os valores gerados.
Esta função precisa de um acumulador: uma lista que começa vazia (nil) e vai sendo preenchida conforme o gerador é reiterado. Então ela precisa validar o gerador (passando a unidade como parâmetro) e tratar o resultado: