<p>
<div class="moz-text-flowed" style="font-family: -moz-fixed; font-size: 13px;" lang="x-central-euro">Zdravím, <br /> <br />mám taký trochu algoritmický problém! <br /> <br />Na adrese <a class="moz-txt-link-freetext" href="http://code.activestate.com/recipes/576961/">http://code.activestate.com/recipes/576961/</a> som sa dopátral k pre mňa dosť záhadnej algoritmickej konštrukcii, ktorú tam autor nazýva zhruba ako deferred output. <br /> <br />Ide o tento algoritmus: <br /> <br />def fibonacci(): <br /> """ Funkcia na počítanie Fibonachiho čísiel """ <br /> def deferred_output(): <br /> for i in output: <br /> yield i <br /> <br /> result, c1, c2 = tee(deferred_output(), 3) <br /> paired = map(add, c1, islice(c2, 1, None)) <br /> output = chain([0, 1], paired) <br /> return result <br /> <br />#príklad použitia funkcie: <br />print(list(islice(fibonacci(), 50))) <br /> <br />Sú mi jasné metódy ako list, islice, chain a myslím, že aj map, tee a využitie generátora. <br /> <br />Ale ako je možné, že v generátore sa využíva premenná, ktoré ešte nebola nikde definovaná? !!! Pravdepodobne sa tam nejako využíva vlastnosť generátora, ktorý premennnú 'output' využije vlastne až keď sa vyvolá next() na generátore a v tej dobe vlastne premenná už asi existuje... ale neviem, jaksik tie myšlienky tam využité neviem definovať a uchopiť <span class="moz-smiley-s1"><span> :-) </span></span> <br /> <br />A vôbec ako je to tam celé prepojené dokopy, z toho som asi totálny magor... <br /> <br />To ako je to urobené, jedná sa o nejaký pattern, idióm alebo proste nejakú techniku, ktorá sa bežne používa? Autor na tej stránke píše, že je to technika, ktorá sa bežne používa v jazyku Haskell. Čiže je to asi prudko funkcionálne, ale aj tak by ma zaujímalo viac, čo je za tým, ak s tým teda máte niekto nejaké skúsenosti... <br /> <br />Matúš <br /> <br />PS. Ten algoritmus by mal bežať na Python 2.6 aj 3, akurát pre 2.6 by sa namiesto map() muselo použiť imap(). <br /> <br /></div>
</p>