A.13 Bukloj

XLOGO havas kvin primitivojn ebligantajn efektivigi buklojn: ripetu, ripetupor kaj dum, por_ĉiu, ĉiam_ripetu.

A.13.1 Buklo kun ripetu

ripetu n listo_de_instrukcioj



n estas entjero kaj listo_de_instrukcioj estas listo enhavanta instrukciojn rulotajn. L’ interpretilo LOGO efektivigos je n fojoj la komandojn enhavatajn en la listo: tio ŝparas reskribi n fojojn la saman instrukcioj!

Ekz:

 ripetu   4 [antaŭen 100 maldekstren 90]    # Kvadrato kun latero 100
 ripetu   6 [antaŭen 100 maldekstren 60]    # Seslatero kun latero 100
 ripetu 360 [antaŭen   2 maldekstren  1]    # Ee... 360-latero kun latero 2
                                            # Resume, preskaŭ cirklo!

nombrilon



En buklo repete, estas difinita interna variablo nombrilon. Tiu enhavas la numero de l’ iteracio kuranta (la unua iteracio havas numeron 1).

 ripetu 3 [s nombrilon]
 1
 2
 3

A.13.2 Buklo kun ripetupor

ripetupor ludas la rolon de la bukloj for en aliaj programlingvoj.

ripetupor listo1 listo2



Tiu buklo konsistas el doni al variablon kelkajn valorojn en iu intervalo laŭ iu kreskokvanto.

listo1 enhavas tri parametrojn: la nomon de la variablo, la komencan limon, la finan limon. Oni povas aldoni kvaran argumenton nenepran indikantan la kreskokvanton (la paŝon laŭ kiu la variablo marŝas); se ĝi forestas, apriore valoras 1. Jen kelkaj uzadaj ekzemploj:

 ripetupor [i 1 4] [s :i*2]
 2
 4
 6
 8
 
 # Nun oni variigas i inter 7 kaj 2 malkreskante je 1.5 je ĉiu fojo
 # Rimarku la negativan kreskokvanton
 # Oni skribas post i ĝian kvadraton
 
 ripetupor [i 7 2 -1.5] [s listo :i potencon :i 2]
 7 49
 5.5 30.25
 4 16
 2.5 6.25

A.13.3 Buklo kun dum

dum listo_testota listo_de_instrukcioj



listo_testota estas listo enhavanta instrukciojn redonantajn bulean.

listo_de_instrukcioj estas listo enhavanta rulotajn instrukciojn. L’ interpretilo LOGO rulos refoje listo_do_instrukcioj dum listo_testota redonos “vera”.

Ekz:

 dum ["vera] [dn 1]                    # Testudo turnu sin
 
 # Ekzemplo por skribi renversitan alfabeton
 
 provizu "listo "abcĉdefgĝhĥijĵklmnoprsŝtuŭvz
 dum [ne malplena? :listo] [s lastan :listo provizu "listo senlastan :listo]

A.13.4 Buklo kun por_ĉiu

por_ĉiu nomon_variablan listo_aŭ_vorto komando



Tiu primitivo ebligas priskribi ĉiun eron el listo aŭ ĉiun signon el vorto, poste rulas je ĉiu fojo la enhavon de la komandolisto.

 por_ĉiu "i "XLOGO [skribu :i]
 X
 L
 O
 G
 O
 por_ĉiu "i [a b c] [skribu :i]
 a
 b
 c

A.13.5 Buklo kun ĉiam_ripetu

ĉiam_ripetu instrukcilisto



Ripetu sen fino instrukciliston.

 ĉiam_ripetu [an 1 dn 1]

Atentu: uzu tiun primitivon prudente pro la senfina buklo!