Omezená dědičnost (je něco lepšího než OOP?)

Radek Miček

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #375 kdy: 15. 09. 2015, 11:11:46 »
Podstatou a výhodou funkcionálního programování by mělo být přiřazování (funkce = soubor uspořádaných entic), nikoliv představa, byť vzdálená, nějaké činnosti, výpočtu.
Takže a = b + c není FP? Vždyť je to výpočet.
Citace
if je je rozhodování, tedy výpočet, protože if je hodně obecné a vždy ho můžete nahradit konkrétní funkcí, pracující s přiřazením z konkrétně daných definičních oborů funkce. To je přece hlavní výhoda FP. Předem víte s čím pracujete. Je to dáno použitou funkcí. U obecného if to nevíte.
Mluvím o funkci if typu Bool -> a -> a -> a, která vrací buď druhý nebo třetí parametr. Co je na ní nefunkcionálního?
Není to výpočet, je to výběr z množiny uspořádaných entic {..., [1,1,2], [1,2,3], ...}, myslíte-li funkcionálně a ne imperativně.

To je IMO omezené chápání funkce na teorii množin - v programování se to moc nepoužívá.
Tak ještě toto, v imperativním programování se toto nepoužívá, FP by se mělo, protože to pak vede na možnost strojově upravovat algoritmy napsané v FP jazyku tak, aby byly automaticky paralelizovatelné.

To jde i v imperativních jazycích, podívejte se třeba na jazyk ParaSail.

Jinak v mainstreamových funkcionálních jazycích je to s (explicitní) paralelizací dost slabé. OCaml má GIL, v Haskellu je těžké napsat paralelní algoritmus s dobrým výkonem (např. quicksort), v F# a Scale máte prakticky totéž, co v C# a Javě.


JS

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #376 kdy: 15. 09. 2015, 11:13:53 »
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.
While jo. Ale proč propánajána if? To jako "správně funkcionálně" mám každý if vyhodit ven jako samostatnou funkci? Proč, prokrýlepána?

Už toho trolla, přátelé, fakt nekrmte.

Ktereho?  :D

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #377 kdy: 15. 09. 2015, 11:20:00 »
Podstatou a výhodou funkcionálního programování by mělo být přiřazování (funkce = soubor uspořádaných entic), nikoliv představa, byť vzdálená, nějaké činnosti, výpočtu.
Takže a = b + c není FP? Vždyť je to výpočet.
Citace
if je je rozhodování, tedy výpočet, protože if je hodně obecné a vždy ho můžete nahradit konkrétní funkcí, pracující s přiřazením z konkrétně daných definičních oborů funkce. To je přece hlavní výhoda FP. Předem víte s čím pracujete. Je to dáno použitou funkcí. U obecného if to nevíte.
Mluvím o funkci if typu Bool -> a -> a -> a, která vrací buď druhý nebo třetí parametr. Co je na ní nefunkcionálního?
Není to výpočet, je to výběr z množiny uspořádaných entic {..., [1,1,2], [1,2,3], ...}, myslíte-li funkcionálně a ne imperativně.

To je IMO omezené chápání funkce na teorii množin - v programování se to moc nepoužívá.
Tak ještě toto, v imperativním programování se toto nepoužívá, FP by se mělo, protože to pak vede na možnost strojově upravovat algoritmy napsané v FP jazyku tak, aby byly automaticky paralelizovatelné.

To jde i v imperativních jazycích, podívejte se třeba na jazyk ParaSail.

Jinak v mainstreamových funkcionálních jazycích je to s (explicitní) paralelizací dost slabé. OCaml má GIL, v Haskellu je těžké napsat paralelní algoritmus s dobrým výkonem (např. quicksort), v F# a Scale máte prakticky totéž, co v C# a Javě.
Dobře a jaké jsou tedy výhody funkcionálního přístupu?

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #378 kdy: 15. 09. 2015, 11:24:35 »
Ano, ale to je imperativní programování, díky neznámým závislostem mezi objekty nelze automatizovaně výpočet paralelizovat a dokazovat, což FP by mělo umožňovat. Ten if je samozřejmě extrém, ale na něm se ukáže, zda myslíte funkcionálně, či imperativně. Funkcionální programování vyžaduje oprostit se od pojmu čas, a tedy vás to osvobodí do jisté míry, od nutnosti zabývat se pořadím zpracování, výsledek matematické funkce závisí jen na vstupních hodnotách, nikoliv na pořadí zpracování funkcí ...
A to by mě teda docela zajímalo.

První námitka: Podle mě můžu definovat trojici {a,b,c}, která odpovídá ifu. Takže máme ten kýžený výběr z trojic. Pokud to tak nejde, chtěl bych vidět nějakou pořádnou argumentaci.

Co jsou "neznámé závislosti", nevím. Pořadí vyhodnocení můžu u ifu měnit jako u jakékoliv jiné fce.

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #379 kdy: 15. 09. 2015, 11:36:04 »
Ano, ale to je imperativní programování, díky neznámým závislostem mezi objekty nelze automatizovaně výpočet paralelizovat a dokazovat, což FP by mělo umožňovat. Ten if je samozřejmě extrém, ale na něm se ukáže, zda myslíte funkcionálně, či imperativně. Funkcionální programování vyžaduje oprostit se od pojmu čas, a tedy vás to osvobodí do jisté míry, od nutnosti zabývat se pořadím zpracování, výsledek matematické funkce závisí jen na vstupních hodnotách, nikoliv na pořadí zpracování funkcí ...
A to by mě teda docela zajímalo.

První námitka: Podle mě můžu definovat trojici {a,b,c}, která odpovídá ifu. Takže máme ten kýžený výběr z trojic. Pokud to tak nejde, chtěl bych vidět nějakou pořádnou argumentaci.

Co jsou "neznámé závislosti", nevím. Pořadí vyhodnocení můžu u ifu měnit jako u jakékoliv jiné fce.
No ten if byl extrém. Jak si ho vizualizujete, když programujete? Jako porovnání konkrétních hodnot, předpokládám, tedy imperativním způsobem myšlení.


Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #380 kdy: 15. 09. 2015, 11:40:39 »
Ano, ale to je imperativní programování, díky neznámým závislostem mezi objekty nelze automatizovaně výpočet paralelizovat a dokazovat, což FP by mělo umožňovat. Ten if je samozřejmě extrém, ale na něm se ukáže, zda myslíte funkcionálně, či imperativně. Funkcionální programování vyžaduje oprostit se od pojmu čas, a tedy vás to osvobodí do jisté míry, od nutnosti zabývat se pořadím zpracování, výsledek matematické funkce závisí jen na vstupních hodnotách, nikoliv na pořadí zpracování funkcí ...
A to by mě teda docela zajímalo.

První námitka: Podle mě můžu definovat trojici {a,b,c}, která odpovídá ifu. Takže máme ten kýžený výběr z trojic. Pokud to tak nejde, chtěl bych vidět nějakou pořádnou argumentaci.

Co jsou "neznámé závislosti", nevím. Pořadí vyhodnocení můžu u ifu měnit jako u jakékoliv jiné fce.

Pořadí vyhodnocení u if? No například if (f1() && f2()) v imperativních jazycích znamená, že když f2 má vedlejší efekt, tak dojde k chybě, protože když f1() vrací false, tak f2() se nevolá. A to jsou ty neznámé závislosti.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #381 kdy: 15. 09. 2015, 11:41:07 »
No ten if byl extrém. Jak si ho vizualizujete, když programujete? Jako porovnání konkrétních hodnot, předpokládám, tedy imperativním způsobem myšlení.
To je úplně irelevantní, jak si ho vyzualizuju. Řekněme tedy jako růžového slona. Spíš bych chtěl teda slyšet, proč to nemůže být ta relace.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #382 kdy: 15. 09. 2015, 11:42:07 »
Pořadí vyhodnocení u if? No například if (f1() && f2()) v imperativních jazycích znamená, že když f2 má vedlejší efekt, tak dojde k chybě, protože když f1() vrací false, tak f2() se nevolá. A to jsou ty neznámé závislosti.
Nebavíme se o imperativních jazycích. Bavíme se o FP bez vedlejších efektů. Proč tam teda if nepatří?

JSH

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #383 kdy: 15. 09. 2015, 11:45:42 »
Pořadí vyhodnocení u if? No například if (f1() && f2()) v imperativních jazycích znamená, že když f2 má vedlejší efekt, tak dojde k chybě, protože když f1() vrací false, tak f2() se nevolá. A to jsou ty neznámé závislosti.
Tohle ale není o pořadí vyhodnocení u ifu ale u &&. To samé by se dělo, pokud bych místo ifu výsledek && použil jakkoliv jinak.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #384 kdy: 15. 09. 2015, 12:02:11 »
A FP jazyky ji mají přímo katastrofální.
Tak to určitě...

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #385 kdy: 15. 09. 2015, 15:58:54 »
Ano, ale to je imperativní programování, díky neznámým závislostem mezi objekty nelze automatizovaně výpočet paralelizovat a dokazovat, což FP by mělo umožňovat. Ten if je samozřejmě extrém, ale na něm se ukáže, zda myslíte funkcionálně, či imperativně. Funkcionální programování vyžaduje oprostit se od pojmu čas, a tedy vás to osvobodí do jisté míry, od nutnosti zabývat se pořadím zpracování, výsledek matematické funkce závisí jen na vstupních hodnotách, nikoliv na pořadí zpracování funkcí ...
A to by mě teda docela zajímalo.

První námitka: Podle mě můžu definovat trojici {a,b,c}, která odpovídá ifu. Takže máme ten kýžený výběr z trojic. Pokud to tak nejde, chtěl bych vidět nějakou pořádnou argumentaci.

Co jsou "neznámé závislosti", nevím. Pořadí vyhodnocení můžu u ifu měnit jako u jakékoliv jiné fce.
No ten if byl extrém. Jak si ho vizualizujete, když programujete? Jako porovnání konkrétních hodnot, předpokládám, tedy imperativním způsobem myšlení.

If je normální matematická funkce, nejjednodušším příkladem je třeba |x|.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #386 kdy: 15. 09. 2015, 16:05:35 »
If je normální matematická funkce, nejjednodušším příkladem je třeba |x|.

Taky jsem na to koukal. Vzdyt jedna z moznosti jak formale definovat funkci je tabulkou, kde if lze jednoduse zapsat.

Inkvizitor

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #387 kdy: 15. 09. 2015, 16:39:08 »
If je normální matematická funkce, nejjednodušším příkladem je třeba |x|.

Taky jsem na to koukal. Vzdyt jedna z moznosti jak formale definovat funkci je tabulkou, kde if lze jednoduse zapsat.

Je to troll, fakt.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #388 kdy: 15. 09. 2015, 16:54:26 »
Je to troll, fakt.
Když se někdo splete, tak nemusí být hnedka troll. Spíš mě udivuje, s jakou vehemencí tady lidí tvrdí blbosti a neposlouchají námitky.

Inkvizitor

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #389 kdy: 15. 09. 2015, 20:55:58 »
Je to troll, fakt.
Když se někdo splete, tak nemusí být hnedka troll. Spíš mě udivuje, s jakou vehemencí tady lidí tvrdí blbosti a neposlouchají námitky.

Jenže já ho pozoruju už delší dobu.