Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación funcional / Lambdas y clausuras / Clausuras

Quiz — Clausuras

¿Qué imprime el programa siguiente?

sub make-acc {
    my $total = 0;
    return sub ($x) { $total += $x };
}

my &add = make-acc;
add(10);
add(20);
say add(5);
05
030
135
00

La subrutina devuelta se cierra sobre $total, así que las tres llamadas comparten la misma variable. Las dos primeras la llevan a 30; la tercera suma 5 e imprime el total acumulado, 35.

Clausuras   |   Un contador