Zdravím,
mám taký trochu algoritmický problém! Na adrese http://code.activestate.com/recipes/576961/ [1] som sa dopátral k pre mňa dosť záhadnej algoritmickej konštrukcii, ktorú tam autor nazýva zhruba ako deferred output. Ide o tento algoritmus: def fibonacci(): """ Funkcia na počítanie Fibonachiho čísiel """ def deferred_output(): for i in output: yield i result, c1, c2 = tee(deferred_output(), 3) paired = map(add, c1, islice(c2, 1, None)) output = chain([0, 1], paired) return result #príklad použitia funkcie: print(list(islice(fibonacci(), 50))) Sú mi jasné metódy ako list, islice, chain a myslím, že aj map, tee a využitie generátora. 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ť :-) A vôbec ako je to tam celé prepojené dokopy, z toho som asi totálny magor... 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... Matúš 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(). Links: ------ [1] http://code.activestate.com/recipes/576961/
_______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
