Rebol3 Code Examplex
Increment loop index within loop body
Modify a loop counter from inside the loop.
Rebol [
title: "Rosetta code: Increment loop index within loop body"
file: %Increment_loop_index_within_loop_body.r3
url: https://rosettacode.org/wiki/Increment_loop_index_within_loop_body
needs: 3.0.0
]
;; prime? native function is available since 3.19.5
if unset? 'prime? [
;; Naive Rebol implementation
prime?: function [n [integer!]] [
if n < 2 [return false]
if zero? n % 2 [return n == 2]
if zero? n % 3 [return n == 3]
d: 5
while [d * d <= n][
if zero? n % d [return false]
d: d + 2
if zero? n % d [return false]
d: d + 4
]
true
]
]
;; Helper to format number with commas
format-commas: function [num [integer!]] [
str: reverse form num
while [not tail? str: skip str 3][
str: insert str ","
]
reverse head str
]
;; Main logic
index: 42 ;; start index at 42 (before first increment)
count-primes: 0 ;; count of primes found
while [count-primes < 42] [
index: index + 1 ;; increment index by 1 at iteration start
if prime? index [
count-primes: count-primes + 1
print rejoin [
pad count-primes -2
": prime = "
pad format-commas index -18
]
;; increment index by the prime itself (old index + prime)
index: index + index
] ()
]Output:
1: prime = 43
2: prime = 89
3: prime = 179
4: prime = 359
5: prime = 719
6: prime = 1,439
7: prime = 2,879
8: prime = 5,779
9: prime = 11,579
10: prime = 23,159
11: prime = 46,327
12: prime = 92,657
13: prime = 185,323
14: prime = 370,661
15: prime = 741,337
16: prime = 1,482,707
17: prime = 2,965,421
18: prime = 5,930,887
19: prime = 11,861,791
20: prime = 23,723,597
21: prime = 47,447,201
22: prime = 94,894,427
23: prime = 189,788,857
24: prime = 379,577,741
25: prime = 759,155,483
26: prime = 1,518,310,967
27: prime = 3,036,621,941
28: prime = 6,073,243,889
29: prime = 12,146,487,779
30: prime = 24,292,975,649
31: prime = 48,585,951,311
32: prime = 97,171,902,629
33: prime = 194,343,805,267
34: prime = 388,687,610,539
35: prime = 777,375,221,081
36: prime = 1,554,750,442,183
37: prime = 3,109,500,884,389
38: prime = 6,219,001,768,781
39: prime = 12,438,003,537,571
40: prime = 24,876,007,075,181
41: prime = 49,752,014,150,467
42: prime = 99,504,028,301,131