RosettaCodeData/Task/First-class-environments/Perl-6/first-class-environments.pl6

22 lines
547 B
Raku

my $calculator = sub ($n is rw) {
return ($n == 1) ?? 1 !! $n %% 2 ?? $n div 2 !! $n * 3 + 1
};
sub next (%this, &get_next) {
return %this if %this.<value> == 1;
%this.<value>.=&get_next;
%this.<count>++;
return %this;
};
my @hailstones = map { %(value => $_, count => 0) }, 1 .. 12;
while not all( map { $_.<value> }, @hailstones ) == 1 {
say [~] map { $_.<value>.fmt("%4s") }, @hailstones;
@hailstones[$_].=&next($calculator) for ^@hailstones;
}
say 'Counts';
say [~] map { $_.<count>.fmt("%4s") }, @hailstones;