Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Mirek Prýmek

Stran: 1 ... 598 599 [600] 601 602 ... 618
8986
Vývoj / Re: Čitelnost
« kdy: 10. 04. 2011, 21:40:58 »
To se mozna prelozi stejne, ale ten funkcionalni bude v nekterych pripadech kratsi a citelnejsi.

http://forum.root.cz/index.php?topic=1978.msg15951#msg15951

Blik?

8987
Vývoj / Re: Čitelnost
« kdy: 10. 04. 2011, 21:07:37 »
Nemuzu vedet, co vite a co ne.

Pokud něco nevíte, tak se na to zeptejte.

Pokud nevíte, jestli něco vím, nepředpokládejte hned, že to nevím a neraďte mi, ať si to nastuduju. Pokud to tak hodláte dělat dál, nemám o takový rozhovor domnělého učitele s domnělým žákem zájem.

Myslím, že byste mohl připustit alespoň teoreticky, že pokud jsem vám v něčem nerozuměl, nemusí to být jenom tím, že jsem idiot.

Nemuzu ani vedet, zda vubec vite, co je currying.

Nejen, že se tady o tom myslím už mluvilo, takže kdybyste diskusi četl pozorně, mohl jste se zřejmě dovtípit, ale taky jsem tady psal, že jsem absolventem školy, kde by se bez něčeho tak základního nedalo přežít.

Jen tak pro představu:
http://is.muni.cz/predmet/fi/podzim2010/IB015
http://is.muni.cz/predmet/fi/jaro2011/IA014 
http://is.muni.cz/predmet/fi/jaro2007/IA011
http://is.muni.cz/predmet/fi/podzim2006/MA007
http://is.muni.cz/predmet/fi/podzim2007/PB006


Pokud se hodlate urazet pokazde, kdyz si nekdo mysli, ze neco nevite, asi bude dost tezke s vami vyjit... (a naopak - neni to tak dlouho, co jste se tu naopak rozciloval, ze predpokladam, ze neco vite)

To je jednoduché - o někom, koho neznáte, nic nepředpokládejte. Pokud o něm něco nevíte, tak se ho zeptejte. Jak snadné. Říká se tomu elementární mezilidská slušnost a bez toho diskuse nemá smysl.

A co se týče toho údajného rozčilování, pouze jsem konstatoval, že je poněkud nevěrohodné, když někdo tvrdí, že dosáhl osvícení, ale zároveň nedokáže ukázat jednoduchý příklad takový, aby ho pochopil i někdo, kdo o dané věci nic neví. Tím spíš, že jsem takový příklad našel na jednom z prvních odkazů Googlu na dané téma.

Me pripada analogie mezi curryingem a pipelinou zrejma, vam asi ne. 

Já jsem pouze upozornil na to, že je věcí názoru, co budu chtít v pipelině vidět (v kontextu této diskuse to není nic jiného než analogie). Můžu si do ní promítat svoje funkcionální vidění světa (analogie částečné aplikace a skládání funkcí, kterou jste uvedl), nebo ji můžu vidět jenom jako způsob předávání dat (tj. analogii proměnné*).

Ta analogie je prostě špatná a nevede k lepšímu dorozumění, ale k ještě většímu zamlžení diskuse.

Navíc to, co ta analogie měla demonstrovat, je úplně mimo mísu (viz níž).

Ano. A pak jste tu zacal tvrdit, ze je to subjektivni nazor, a ze elegance funkcionalniho zapisu nad proceduralnim je subjektivni. Coz bych prave rad kontroval prikladem elegance zapisu rour v shellu; pokud by mela byt subjektivni, rad bych videl lepsi (alespon subjektivne) proceduralni zapis.

Jistě jsou věci, které se ve *skutečně funkcionálním jazyce* dají napsat, zatímco v procedurálním nikoli.

Já jsem ale mluvil o něčem úplně jiném: jestliže v *procedurálním jazyce* můžu nějakou věc napsat "jakože-funkcionálně" nebo "normálně-procedurálně", potom je imho věcí vkusu, který ze zápisu použiju, protože s pravděpodobností hraničící s jistotou překladač oba zápisy přeloží úplně stejně.

Nejen, že se dobýváte do otevřených dveří, ale ještě ze mě při tom děláte vola, což není způsob diskuse, který bych měl potřebu dále provozovat.

Myslim, ze uzaver (closure) je neco jineho, nez co si vy myslite, ze to je. Znovu nezbyva nez doporucit [...]

Tak to byla definitivně poslední kapka...

8988
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 10. 04. 2011, 20:26:05 »
Lenze keby niekto preimplementoval funkciu map() / reduce() v Pythone na nieco efektivnejsie, programy pobezia automaticky rychlejsie, zatialco klasicke for-cykly nie.

Jenže ono to na "něco efektivnějšího" implementovat afaik nejde, protože ten jazyk prostě funkcionální *není* a *nikdy nebude*.

V pythonu prostě reduce bude vždycky přeložený jenom jako smyčka volající nějakou funkci postupně na jednotlivé prvky. Pokud by to mělo jít nějak optimalizovat, musel by python zavést nějaký speciální typ "funkcionální funkce" (do které by "viděl" a mohl ji optimalizovat), ale tím by vlastně vytvořil sám v sobě paralelní funkcionální jazyk, který by s tím normálním pythonem neměl nic společného...

Napr. v Jave cakam na closures (funkcie ako objekty) ako na spasenie, lebo to dramaticky zefektivni zapis. Skolske priklady su ,,prelez zoznam a s kazdym prvkom urob nejaku transformaciu", pripadne ,,odfiltruj zo zoznamu dane prvky", pricom transforimacia / podmienka filtracie sa specifikuje, ci meni za behu sa pisu nasobne lahsie. (O obsluhe udalosti v GUI ani nehovorim, to, co C# sekaju delegatmi, v Jave este stale nie je).

No ale to pořád bude klasická javovská funkce, akorát bude nepojmenovaná. Syntakticky to možná bude *připomínat* nějakou funkcionální konstrukci, ale vnitřně to bude furt ta stará známá funkce...

8989
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 10. 04. 2011, 19:21:02 »
Neda sa nahodou funkcionalna paradigma ovela lahsie paralelizovat ,,pod kapotou", zatial co napr. for-cyklus nie?

No asi jo, ale python to pokud vím nedělá a domnívám se, že ani dělat nemůže právě proto, že to není skutečný funkcionální jazyk, ale procedurální jazyk s nějakými jakože-funkcionálními prvky.

Přesně proto jsem se Inkvizitora ptal, co ho k používání těch jakože-funkcionálních prvků vede, když mu nepřináší to ovoce skutečně funkcionálního jazyka (např. právě ta optimalizace). Inkvizitor to narozdíl od JS pochopil a odepsal, že to dělá kvůli tomu, že se mu jakože-funkcionální zápis *líbí*.

8990
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 10. 04. 2011, 19:17:43 »
Takze, v jazyce jako C, jak takovou operaci, vyuzivajici "|", elegantne zapises?

A já jsem někde snad tvrdil, že v C lze částečnou aplikaci napsat?

Jinak viz http://forum.root.cz/index.php?topic=1978.msg15980#msg15980

8991
Vývoj / Re: Čitelnost
« kdy: 10. 04. 2011, 19:09:16 »
Da se to tak chapat.

Ale taky nemusí a proto jsem taky chtěl slyšet definici toho, co je a co není dostatečně "funkcionální" v kontextu, který se skutečným funkcionálním programováním nemá nic společného.

Jak uz tady nekdo naznacoval, neskodilo by vam podivat se na lambda kalkul.

Nemám zájem "diskutovat" s někým, kdo mi neustále dává najevo, že jsem idiot. Takže si to užijte s někým jiným. S chutí vám nechávám poslední slovo.



8992
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 10. 04. 2011, 18:54:06 »
Nezlobte se, ale je naprosto zbytečné se překřikovat, když Vám (jak jste sám uvedl) není jasné, co znamená funkcionální programování. Zkuste se podívat na lambda kalkul, třeba Haskell (který se snaží být striktně funkcionální) atp. Nevykřikujte jen proto, že něčemu nerozumíte...

1. s nikým se nepřekřikuju, to by opravdu vypadalo jinak

2. řekněme, že mám nějaké zkušenosti s haskellem a prologem a teď se koukám na erlang, který se mi docela zalíbil. Ani lambda kalkulu se absolvent FI MU nevyhne.

3. do téměř jakéhokoli jazyka můžu zavést "funkcionální prvky", které funkcionální programování nějakým způsobem *připomínají*. I do céčka můžu zavést funkci map, která bude fungovat s callbacky. Takovou věc pak můžu používat tak, že to někomu bude *připomínat* funkcionální programování, zatímco někdo jiný  řekne, že to žádné funkcionální programování není. Jak mám vědět, co JS bude považovat za dostatečně *podobné* funkcionálnímu programování, bavíme-li se *procedurálním* jazyku? (s Inkvizitorem byla řeč o pythonu)

--------------

Ale k věci - ptal jsem se Inkvizitora, jaké "funkcionální prvky" v pythonu používá a co mu to přineslo (protože já prostě nemám potřebu takové prvky v pythonu používat).

Například můžu napsat "funkcionálně":
Kód: [Vybrat]
result = reduce(lambda x, y: x+" "+y, ["a", "b", "c", "d", "e"])

nebo "procedurálně" něco ve stylu:
Kód: [Vybrat]
l = ["a", "b", "c", "d", "e"]
result = ""
for s in l[:-1]:
  result += s+" "
result += l[-1]
(ošetření zvláštních případů pro stručnost vypouštím)

...přičemž oboje s velkou pravděpodobností překladač přeloží na úplně stejný nebo aspoň hodně podobný výsledný kód.

O tom, co je "elegantnější kód" se hádat rozhodně nebudu, protože to je věcí názoru.

 Protože Inkvizitor je normální a dá se s ním mluvit, tak jsem se ho prostě ZEPTAL, jaký má důvod používat něco, co já nemám moc potřebu používat a Guido von Rossum zjevně taky ne. To je celé - žádná hádka.

8993
Vývoj / Re: Čitelnost
« kdy: 10. 04. 2011, 18:15:42 »
V tomhle pripade se "funkcionalni" tyka moznosti mit funkce, ktere pracuji s funkcemi.

A roura pracuje s funkcemi?

8994
Vývoj / Re: Čitelnost
« kdy: 10. 04. 2011, 17:20:55 »
No, co je na tom provokativniho - ze by me opravdu ten elegantni zapis Unixovych pipes proceduralne zajimal, bude se hodit, az budu zase pouzivat modul subprocess. Ja elegantnejsi zapis neznam [...] Takze bud takovy zapis znate, a pak se ho rad dozvim, a nebo takovy zapis neznate, a pak mate priklad k vasemu tvrzeni, ze jde vzdy o subjektivni zalezitost.

Těžko říct, jestli takový zápis znám. Nevím totiž, čemu říkáte "funkcionální" a "procedurální".

Když třeba v céčku napíšu int x = f(g(y)), tak to je "funkcionální", protože "definuji novou funkci jako slozeni existujicich pomoci aplikace funkce"?

Napište mi přesnou definici, jaké řešení je "funkcionální" a jaké "procedurální" a můžeme se o tom pobavit. (i když popravdě řečeno nevidím důvod takového rozhovoru...)

Ne nadarmo jsem v posledních příspěvcích slovo "funkcionální" dával do uvozovek, aby bylo jasné, že není úplně zřejmé, o čem vlastně mluvíme.

8995
Vývoj / Re: Čitelnost
« kdy: 10. 04. 2011, 16:36:19 »
Vidim, ze jsem po tydnu pozapomnel, jak je s vami tezka domluva.

Nevím, co je tak provokativního na konstatování zjevného faktu, že někomu se víc líbí řešení A, někomu
řešení B - a dokonce i když řešení bude stejné, někomu se vícd líbí napsat ho stylem X, někomu stylem Y.


 Samozrejme, mozna ze by to Prymek napsal Inkvizitorovi lepe

Nic takového jsem nechtěl říct a neřekl. Nevkládejte mi to prosím do úst. Děkuji.

8996
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 10. 04. 2011, 15:47:43 »
Funkcionální přístup (konkrétně třeba i ty pipelines, které zmiňuje JS) má i další výhody. Konkrétně doporučuji prostudovat si tuto kapitolku. Procedurální kód je obecně špatně paralelizovatelný, zatímco čistě funkcionální přístup je přirozeně přístupný paralelizaci.

Asi se nemusíme bavit o tom, že opravdu funcionální jazyky mají zajímavé vlastnosti, které procedurální jazyky nemají (třeba typu referenční transparentnosti apod. - a z toho vyplývající paralelizovatelnost, převod na distribuovaný model, lepší možnost automatické optimalizace a jánevímco).

Otázka je, jestli používání "funkcionálních" obratů třeba konkrétně v tom Pythonu nějaký takový efekt má. Já se obávám, že ne - že je to prostě jenom jiný zápis téhož (kdybych použil třeba normální for nad polem callbacků, nedostanu méně paralelizovatelný, robustní, ... kód - dostanu prostě víceméně to samé, jenom jinak zapsané).

Tím nechci nikomu tenhle způsob psaní brát nebo hanět, ale neviděl bych za tím (v Pythonu) nic víc, než otázku subjektivního pocitu větší čitelnosti/čistoty/elegance kódu.

8997
Vývoj / Re: Čitelnost
« kdy: 10. 04. 2011, 15:24:30 »
Myslim, ze z kontextu je jasne, ze ten problem elegantneji proceduralne zapsat neslo

Elegance kódu je subjektivní záležitost.

8998
Vývoj / Re: Čitelnost
« kdy: 10. 04. 2011, 14:00:15 »
Tak teď se musím ozvat. Čitelnost kódu je vždy na 1. místě. I špatný a neefektivní kód, když není zprasený, může někdo programátorsky zdatnější dát dohromady. Nečitelný kód nikdy. Tvrzení, že čitelnost a přehlednost kódu není důležitá, je jako tvrzení, že při programování není potřeba mozek, však to stejně píší ruce, ne?

O tom ale vůbec není řeč. Šlo o to, že buď mám kód napsaný normálně hezky a čitelně "procedurálně", nebo normálně hezky a čitelně "funkcionálně".

8999
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 10. 04. 2011, 13:09:05 »
Tak nějak. Podle mě to ale není málo.

Někdy to může být hodně, někdy je to celkem zbytečná námaha. Občas se asi nám všem stává, že zbytečně píšeme kód nějak kvůli své představě, jak by měl vypadat, aniž by to mělo nějaký znatelný efekt pro zákazníka :)

(tím ti tohle vůbec nepodsouvám, mluvím spíš o své zkušenosti :)

9000
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 10. 04. 2011, 12:26:19 »
@Inkvizitor: Takže šlo vlastně jenom o to, aby byl kód pěkný a přehledný?

Stran: 1 ... 598 599 [600] 601 602 ... 618