Kézenfekvőnek tűnik tehát a következő gondolatmenet: kezdetben adott az egyelemű lista a kindulási MI szóval, erre alkalmazzuk az összes alkalmazható szabályt, a kapott szavakat a lista végére fűzzük, majd vesszük a lista következő szavát, és így folytatjuk a végtelenségig.
Egyelőre csak az első két szabály (python nyelven megírt) megvalósításával foglalkozva, valamint –időnk végességére való tekintettel– beérve kilenc új szóval:
def rule1(list, i): word= list[i] if word[-1]=='I': list+= [ word+'U' ] def rule2(list, i): word= list[i] list+= [ word+word[1:] ] def rules(list, i): rule1(list, i) rule2(list, i) i+= 1 i= 0 list= [ 'MI' ] while i<10: rules(list, i)
Meglepő vagy nem meglepő, de a program nem áll le. Ennek kézenfekvő oka lehet, hogy az i változó értéke nem növekszik, emiatt végtelen ciklusba kerülünk. Más programozási nyelvekre gondolva hamar felvetődik a kérdés: vajon érték szerint vagy cím szerint kapják meg a függvények a paramétereiket?
Módosítsuk a programot, írassuk ki a változók értékét:
i= 0 list= [ 'MI' ] while i<10: print(i, list) rules(list, i)
A program valóban végtelen ciklusba került; megszakítása után alighanem jobban látszik, hogy az i változó értéke tényleg nem változik, mindvégig 0 marad.
A végtelen ciklust elkerülhetjük, ha nem i értékét, hanem a lista hosszát korlátozzuk:
i= 0 list= [ 'MI' ] while len(list)<11: print(i, list) rules(list, i)
Ez persze csak átmenetileg hoz enyhülést: a program kétségkívül leáll, de mivel i értéke nem változik, mindig a lista élén álló MI szóból kapjuk a lehetséges új szavakat (összesen kétfélét):
0 ['MI'] 0 ['MI', 'MIU', 'MII'] 0 ['MI', 'MIU', 'MII', 'MIU', 'MII'] 0 ['MI', 'MIU', 'MII', 'MIU', 'MII', 'MIU', 'MII'] 0 ['MI', 'MIU', 'MII', 'MIU', 'MII', 'MIU', 'MII', 'MIU', 'MII']
És ami rendkívül zavaró: miközben i értéke nem változik, a lista látványosan hízik. A két paramétert ugyanolyan módon adtuk át a függvényeknek, de mégis másképp viselkednek: a függvények mindkettőnek megváltoztatják az értékét, de a függvényen kívül ez csak a lista esetében érvényesül…