Raku Books / Using Raku / Numbers / Using numbers

23. Powers of two

Print the first ten powers of two.

The naïve loop for calculating powers of two can be created similar to the solution of the Task 22, Print squares:

say 2 ** $_ for 0..9;

It prints the values 1, 2, 4, etc. up to 512.

There’s another way of generating sequences with the defined rule of calculating its elements:

my @power2 = 1, 2, {$_ * 2} ... *;
.say for @power2[^10];

The rule here is {$_ * 2}, so each next number is twice as big as the previous one. The @power2 array gets the values of the infinite lazy list, and only the first ten elements are used for printing. The ^10 construction at the place of array index creates a range 0..9, and the corresponding slice of @power2 is taken.

Raku also can deduce the rule if you provide the first few elements of the list:

my @power2 = 1, 2, 4 ... *;
.say for @power2[^10];

In the less obvious cases, you’d better prefer an explicit generator for lazy lists.

Course navigation

22. Print squares   |   24. Odd and even numbers