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:
Ekkor a kiértékelés sorrendje a következõ lesz (a t-vel jelölt változók csak átmenetiek):
É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
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õ:
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:
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