> O osudu lambda se diskutovalo na comp.lang.python. Osobně jsem > lambda nikdy nepotřeboval. Jakékoliv jeho použití v Pythonu > se podle mě dá jednoduše přepsat bez lambda způsobem, který > je proti lambda přehlednější a srozumitelnější.
Jako bych slyšel Javisty :-) Já jsem naopak člověk, který miluje syntakticky bohaté jazyky a logicky vystavěné jazyky (samozřejmě musí být dobře navržené), proto jsem miloval C++, proto miluju Python, proto jsem omezil Lisp a Javu. Jsem člověk, který má rád volnost a množství výrazových prostředků a dokážu je opravdu využít. Produkuji srozumitelné programy, až moc. To mi bohužel kazí kšefty. Osobně lambda především omezuje zbytečné definice krátkých funkcí, které se použijí jednorázově. To může zpřehlednit maximálním způsobem zdrojový kód. Přepsat se samozřejmě dá všechno, protože je matematicky dokázáno, že jakýkoli algoritmus se dá napsat pouze s podmíněným skokem. Cokoli nad to je navíc, když půjdeme do teorie. Nicméně v teorii bych se nerad pohyboval a v praxi bych nerad připustil jazyk na dolní hranici teoretických vyjadřovacích možností. > Přiřazení jako výraz působí komplikace protože se > v boolovských výrazech může poplést == s =. To je bohužel problém Pythonu, že umožňuje do logických operátorů zavést i jiné, než logické typy. Tohle v jazycích nesnáším, tahle vlastnost je "error prone" a bohužel jí hodně tvůrců jazyka z nějakého, pro mě sadistického důvodu zavádí. Tohle bohužel dobře ošetřila Java, nebo Pascal, že logické operátory musejí mít jako operandy pouze logické typy. Pak rozhodně není žádný problém s = a ==. Takže problém, který popisujete je sekundární. Díky té blbosti, že logické výrazy pracují i s nelogickými typy je Python závislý na kontextu. Tentýž výraz znamená něco jiného v podmínce a něco jiného mimo podmínku. Nechápu proč prostě dovolovat podmínky typu: a = 2 if a: print "je to tam" Já bych si přál jazyk, který striktně přikazuje napsat: a = 2 if a != 0: print "je to tam" Kdybych já byl Rossum a dělat Python s nekompatibilní syntaxí, tak mezi prvními by byl požadavek, že logické výrazy budou pracovat jen s logickým typem a nic jiného, než false a true do logických výrazů se nepovoluje. Tím by se vyloučilo spoustu chyb a přestal by být problém mezi = a ==, což by se mohlo okamžitě zavést, tedy přiřazení by mohlo být výrazem, ne příkazem jako je to teď. > Python je procedurální a nikoliv funkcionální jazyk. > Z funkcionálních zápisů v něm fungují jen ty věci, > které se dají JEDNODUŠE převést na procedurální postup. > Jiné výhody funkcionálních jazyků zde odpadají (například > automatická paralelizace výpočtu). A taky se právě bavíme o tom, že i to, co zde z funkcinálního jazyka být může a je se má vyhodit. Tohle už není o tom, jaký je to jazyk. Jde o hrubé PORUŠENÍ ZPĚTNÉ KOMPATIBILITY jazyka, a pokud vím, zatím žádný jazyk tohle nepřežil ve zdraví. Já si opravdu za svých dvacet let co se v této oblasti pohybuji nepamatuji jediný jazyk, který by hrubě porušil zpětnou kompatibilitu a vzápětí nevymřel. Osobně nemám důvod si myslet, že Python 3000 nebude zároveň jeho R.I.P.. Právě plány s Pythonem 3000 ve mě rozsvěcují varovné světélko a říkají, tak takhle končí jazyk. > Navrhuji rozebrat několik případů, kde se používají > lambda, map, filter, reduce a pohádat se o alternativním > zápisu jinými prostředky jazyka Python ;-) Já se nechci hádat o alternativním zápisu. Mě jsou takovéto hádky ukradené. Prostě lambda, map, filter, reduce tam v Pythonu již jsou a z toho vyplývá, že tam mají zůstat. A nebo tam neměly nikdy být. Tyhle hádky měly skutečný smysl v době návrhu jazyka, teď už jsou pasé. Teď to tam je, a pak by tam podle Zen of Miloslav Ponkrác: 1) Budeš v maximální možné míře dodržovat zpětnou kompatibilitu 2) Jazyk, který kdy v historii hrubě porušil zpětnou kompatibilitu vymřel. Tak podle tohoto Zenu nemá Python vůbec nárok tyto věci z jazyka vyhazovat. A jinak cokoli se dá převést na podmíněný skok. Cokoli jiného je zbytečné, takže puristicky lze vyhodit toho z Pythonu spoustu. Tipuji, že 90% featur z Pythonu se dá zapsat jinými prostředky, záleží jen co si vezmete na paškál. Kdo chce psa bít, hůl si najde. Miloslav Ponkrác _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
