Icon

Generátorok



A legnagyobb különbség az Icon és más programozási nyelvek közt, hogy a kifejezések generátorok, azaz értékek sorozatát szolgáltatják. Természetesen a konstansok és a változók egy értéket adnak vissza, de vannak olyan nyelvi konstrukciók, amik egynél többet generálnak illetve olyanok is, amik nem adnak vissza semmit.

Az értékek generálása a visszalépéses keresés alapján történik. Általánosan azt mondhatjuk, hogy a kiértékelés balról jobbra, illetve lentrõl felfelé halad.

Például tekintsük a következõ kifejezést:

( a - b ) + ( c - d ) * ( e - f )

Ekkor a kiértékelés sorrendje a következõ lesz (a t-vel jelölt változók csak átmenetiek):

1. t1 := a - b 2. t2 := c - d 3. t3 := e - f 4. t4 := t2 * t3 5. t5 := t1 + t4

És itt mutatkozik meg a különbség a többi nyelvhez képest, mert

Ha valahol a programban egy kifejezés több értékére is szükségünk van, akkor azokat az every utasítással generálhatjuk. Például az

every e1

az e1 kifejezés összes értékét generálja.

Értékek sorozatát is generálhatjuk, erre szolgál a to-by operátor. Általános alakja a következõ:

e1 to e2 by e3

Ez az e1-tõl e2-ig generálja a számokat e3-as lépésközzel. (Fontos megjegyezni, hogy large integerrel nem működik.) Egy példa a használatára:

every writes( " ", 1 to 5 )

Ez a sor egytõl ötig kiírja a számokat szóközzel elválasztva.

Lehetõségünk van egy adatobjektum értékeinek generálására a !x operátorral, ahol