Loops/Increment loop index within loop body: Difference between revisions
Content added Content deleted
(Add Racket) |
|||
Line 2,380: | Line 2,380: | ||
n = 41 49,752,014,150,467 |
n = 41 49,752,014,150,467 |
||
n = 42 99,504,028,301,131</pre> |
n = 42 99,504,028,301,131</pre> |
||
=={{header|Racket}}== |
|||
Racket's <code>for</code> doesn't allow modification of index on the fly. The usual idiom for writing this kind of loop is to use named let, as shown here. |
|||
<lang racket>#lang racket |
|||
(require math/number-theory) |
|||
(define (comma x) |
|||
(string-join |
|||
(reverse |
|||
(for/list ([digit (in-list (reverse (string->list (~a x))))] [i (in-naturals)]) |
|||
(cond |
|||
[(and (= 0 (modulo i 3)) (> i 0)) (string digit #\,)] |
|||
[else (string digit)]))) |
|||
"")) |
|||
(let loop ([x 42] [cnt 0]) |
|||
(cond |
|||
[(= cnt 42) (void)] |
|||
[(prime? x) (printf "~a: ~a\n" (add1 cnt) (comma x)) |
|||
(loop (* 2 x) (add1 cnt))] |
|||
[else (loop (add1 x) cnt)]))</lang> |
|||
{{out}} |
|||
<pre> |
|||
1: 43 |
|||
2: 89 |
|||
3: 179 |
|||
4: 359 |
|||
5: 719 |
|||
6: 1,439 |
|||
7: 2,879 |
|||
8: 5,779 |
|||
9: 11,579 |
|||
10: 23,159 |
|||
11: 46,327 |
|||
12: 92,657 |
|||
13: 185,323 |
|||
14: 370,661 |
|||
15: 741,337 |
|||
16: 1,482,707 |
|||
17: 2,965,421 |
|||
18: 5,930,887 |
|||
19: 11,861,791 |
|||
20: 23,723,597 |
|||
21: 47,447,201 |
|||
22: 94,894,427 |
|||
23: 189,788,857 |
|||
24: 379,577,741 |
|||
25: 759,155,483 |
|||
26: 1,518,310,967 |
|||
27: 3,036,621,941 |
|||
28: 6,073,243,889 |
|||
29: 12,146,487,779 |
|||
30: 24,292,975,649 |
|||
31: 48,585,951,311 |
|||
32: 97,171,902,629 |
|||
33: 194,343,805,267 |
|||
34: 388,687,610,539 |
|||
35: 777,375,221,081 |
|||
36: 1,554,750,442,183 |
|||
37: 3,109,500,884,389 |
|||
38: 6,219,001,768,781 |
|||
39: 12,438,003,537,571 |
|||
40: 24,876,007,075,181 |
|||
41: 49,752,014,150,467 |
|||
42: 99,504,028,301,131 |
|||
</pre> |
|||
=={{header|REXX}}== |
=={{header|REXX}}== |