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…