Kodumaro :: Mais sobre reiteradores em Moonscript

Publicado em 10 de Fevereiro, 2017
As sombras da programação.
MoonScript

No último artigo vimos três abordagens para fazer reiteração em Moonscript. Neste artigos nos apronfundaremos na persistência de estado entre passos do reiterador padrão, que eu citei como sendo uma dificuldade, porém nem tanto.

Vocês vão se recordar que eu disse que o reiterador padrão era representado pelo gerador, condição de parada ou estado e valor inicial, enquanto o gerador recebe como parâmetros o estado ou condição de parada e o resultado da reiteração anterior.

No exemplo, Conjectura de Collatz, usamos uma condição de parada. Neste artigo daremos um exemplo com estado.

Vamos fazer a Sequência de Fibonacci usando o reiterador padrão. Pra isso manteremos os valores de a e b em uma tabela de estado, bem como a contagem n.

A função a ser passada para o for é:

(n) -> _fib, {a: 0, b: 1, :n}, 0

Que inicia o estado com os valores de a, b e n, e assume o valor inicial como zero.

A função de passo (_fib) deve atualizar os valores de a e b, e decrementar o valor de n, retornando a. Não será preciso lidar com o resultado anterior, já que temos todos os dados no estado:

_fib = =>
    if @n > 0
        @a, @b, @n = @b, @a+@b, @n-1
        @a

Veja que tiramos proveito da sintaxe de fat arrow de Moonscript, que trata self como @.

E este foi um exemplo bem simples de como usar estado no reiterador padrão de Lua.