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 - BoneFlute

Stran: 1 ... 97 98 [99] 100 101 ... 133
1471
Vývoj / Curryfikované funkce v Haskellu
« kdy: 01. 05. 2018, 00:44:27 »
Zdravím.

Už u několika tutoriálů k minimálně dvoum jazykům se mi stalo, že tam autor zdůrazňoval skutečnost, že funkce
Kód: [Vybrat]
multThree 3 5 9
se převede na
Kód: [Vybrat]
((multThree 3) 5) 9
.

Jako já s tím nemám problém. Curryfikování je fajn věc, a umím to použít. Ale proč je to zdůrazňováno, že "Každá funkce v Haskellu bere oficiálně pouze jeden parametr."? Bych to bral jako implementační detail a basta. Škoda slov, ne?

Nebo to má nějaký zajímavý efekt, který mi uniká?

1472
Vývoj / Re:Legacy code
« kdy: 01. 05. 2018, 00:34:12 »
Legacy je normální proces.
Dobrá firma drží rovnováhu mezi tím, aby se legacy zbavovalo, a mezi tím, aby se přidávali nové feature. Extrém ani na jednu stranu není dobře.

1473
Vývoj / Re:OSGI vs Servletové kontejnery
« kdy: 27. 04. 2018, 18:49:54 »
Řekl bych, že nemá moc smysl to porovnávat - servletové kontejnery jsou na servlety a OSGi je na cokoli. Podívejte se na výklad těch pojmů třeba na wikipedii.
Na wikipedii nemůže mět doplňující otázky.

1474
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 23. 04. 2018, 14:16:33 »
Ono třeba s objektovým programováním to není o moc lepší - jsou o tom tlusté knihy a stejně se tady vedou nekonečný debaty, jestli čtverec má dědit z obdélníka nebo opačně.

Mi připadá, že to už je implementační detail. IMHO neznamená, že když se dva hádají o tomto, že nechápou aspoň obecně OOP.
Mám s nimi své zkušenosti :-)

1475
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 23. 04. 2018, 13:46:06 »
Ono třeba s objektovým programováním to není o moc lepší...
oh, přehlédl jsem...

1476
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 23. 04. 2018, 13:36:49 »
Aniž bych chtěl nějak snižovat význam monád, tak programovací technika

- kterou nikdo neumí vysvětlit
- k jejímu pochopení je potřeba diplom z matfyzu
- když někdo myslí, že jí pochopil, tak mu ostatní začnou říkat, že jí nechápe

je poněkud nepraktická. Tím neříkám, že je nepoužitelná, když ale v praxi ke svému kódu posadíte nového člověka, tak by měl být schopný daný kód pochopit. Takhle to působí, že když kód napíšete pomocí monád, tak můžete spolupracovníky vybírat ze všech dvaceti lidí, kteří je v republice chápou - pokud se zrovna nehádají s Prýmkem, jestli je vlastně chápou.

Naprosto s tebou souhlasím. Jenže úplně, a to myslím opravdu úplně! stejný problém je s OOP. Taky to nikdo nechápe. (Respektive každý, kdo pochopí dědičnost získá betonovou jistotu, že pochopil OOP.) A nějak to zvládáme.

1477
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 22. 04. 2018, 22:08:23 »
... že monáda je objekt v nějaké kategorii s nějakými dvěma morfismy z/do něj, ...
A pak, že to nejste schopni jednoduše vysvětlit :P

1478
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 21. 04. 2018, 01:52:24 »
Jo, tím jsem si už prošel. Já teď spíš potřebuju udělat syntézu.
Psal's tady kdysi, že's trochu zkoušel Elm, ne? Ten je na syntézu podle mě ideální - monáda jako obecnej koncept tam není, jenom ty jednotlivý "instance", takže pokud znáš Haskell a chvilku budeš dělat v Elmu, dost rychle tě trkne, co tam chybí a proč se vlastně musí psát desetkrát to samý :)
OK, díky za tip.

1479
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 21. 04. 2018, 01:45:12 »
BTW, moc hezkej mi přijde tenhle: http://funkcionalne.cz/2014/08/types-will-carry-you-over-the-monads/ - popisuje jenom jeden aspekt věci, ale myslím, že má velkej potenciál vytvořit aha zážitek :)
Jo, tím jsem si už prošel. Já teď spíš potřebuju udělat syntézu.

1480
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 21. 04. 2018, 01:34:29 »
Zatím si ten obecný koncept představuju jako ten "recepis".
Tak to asi spíš neděláš dobře... (...s těma sirkama, Jaromíre) :)
Už zase? Mirku, Mirku... :-P

Pokud chceš mluvit o monádě jako obecným konceptu, tak si nic nepředstavuj. Obecnej koncept je prostě to, co to je: nějaká struktura, pro kterou platí nějaké zákony. A když něco (cokoliv) tyhle zákony splnít, tak to "je monáda". Úplně stejně jako když něco splní zákony grupy, tak je to grupa :)
Tomu rozumím. Ale nejdřív si ty zákony potřebuju nahrát do hlavy, a to není jen tak. Proto se mi líbil ten článek http://funkcionalne.cz/2017/05/monoid/ .

1481
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 21. 04. 2018, 01:15:37 »
Problém tvého tvrzení vidím v tom, že z Maybe, nebo Either tu hodnotu vybalit můžu. Z IO ne. Není monáda jako monáda :-)
Jasně no, však ta IO monáda je jenom jedna konkrétní "instance" obecnýho konceptu, kterej nijak neříká, že tam nějakou hodnotu z něčeho nesmíš mít možnost získat. Neříká ani, že tam musí být nějaká hodnota :) Říká jenom, že jsou nějaký věci a pro ty jsou definovaný nějaký operace a ty musí splňovat nějaký zákonitosti.

Proto vždycky říkám, že jestli si někdo myslí, že když umí použít IO monádu, tak chápe monády, tak může být taky pěkně na omylu :)
Zatím si ten obecný koncept představuju jako ten "recepis". Mám-li Maybe monádu, tak její smysl je v tom, aby když mi ntá zanořená funkce vrátí Nothing se na nic nečekalo a seskákalo se dolu. Což ale nedělá ta monáda sama ale obsluha kolem. Když mám IO monádu, tak když mi vrátí "chci soubor", tak obsluha musí sehnat soubor. A v tomto případě obsluha tak nějak musí být runtime.

Nejsem si jist, zda tato představa je už konečně ta monáda, nebo jen podmnožina jejího užití.

1482
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 21. 04. 2018, 00:45:45 »
tak čtení by snad na humpoláka šlo
Nešlo, protože to je efekt. Do toho souboru ti třeba paralelně někdo jinej zapisuje, ty bys pokaždé přečetl jiný číslo a vrátil ho. Tím by se ti ta celá čistota a lazyness rozbila :)
Ano, to je mi samozřejmě jasné. Však to tak i píšu.

, ale zápis už ne). Takže nemůžu použít normální pure funkci. Uvožováním ala Promise to celé obrátím a řeknu: "hele, sežeň mi soubor já si z něho načtu hodnotu, něco spočtu, a pak do něj zase zapíšu." - toto je funkce f1. A to celé třikrát. Následně se celý tento recepis vezme, a nějaký interpret to přečte a musí sehnat ten soubor, a musí provést skutečné zápisy mezi funkcí f1, a f2 a f3.

A celé se to vymejšlí kůli tomu, aby se ověřilo, že: za předpokladu, že splníme všechny deklarované požadavky (načtení a zápis a synchronizaci souborů), bude to fungovat, protože to lze zaručit. Tedy oddělení zaručitelných (pure) a nezaručitelných věcí.
Mně přijde, že tam hledáš zbytečný složitosti. Je to fakt jednoduchý: když máš Promise, tak to znamená, že tu hodnotu získáš "někdy" - tj. nemůžeš ji z toho Promisu hned dostat, když se ti zamane. Jediný, co můžeš, je dát mu callback, kterej se má spustit, ta hodnota bude k dispozici. A ten callback ti zase vrátí nějakou hodnotu - a bylo by fajn, kdyby ji taky mohl vrátit "až někdy". No takže máš takový řetěz callbacků a nějakým způsobem ("někde jinde") vošéfováváš, kdy se má který spustit. Ale každopádně se spustí ve správném pořadí, protože chca nechca na sebe musí čekat přesně v tom pořadí, v jakém je zřetězíš.
Ano. Takže to chápu dobře. Potvrdil jsi mou představu.

A jestli se alespoň trochu chytám, tak ten lift je ta část, kdy ta funkce předává roli tomu interpretu, tak? Nebo jinak?
No... takhle bych to asi nenapsal, protože mi to přijde trochu zavádějící, ale myslíš to asi dobře. Fígl je v tom, že ten "callback" (neříkejme tomu lift, je to fakt pitomina) vrací jakoby "zabalenou hodnotu", kterou může "rozbalit" a předat do dalšího callbacku jenom runtime - ty to v jazyce udělat nemůžeš.
Však. Proto píšu, že ta monáda je "recepis".

Problém tvého tvrzení vidím v tom, že z Maybe, nebo Either tu hodnotu vybalit můžu. Z IO ne. Není monáda jako monáda :-)

1483
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 21. 04. 2018, 00:20:45 »
Tak just for record (kdyby to tady náhodou taky četl ještě někdo jiný, koho by zajímalo to původní téma):
A to já si to počtu rád, je-li co.

Hlavní fígl monády oproti normálnímu řetězení normálních funkcí je, že se dají řetězit funkce, které přijímají parametr z "normálního světa" ("normálních hodnot"), ale vrací hodnotu "z jiného světa". Problém toho příkladu v PHP, u kterého Smutný příběh začal, je, že parametr i výsledná hodnota jsou "z normálního světa". To mě hnedka trklo a nezdálo se mi to. Ten příklad prostě podle mě nevystihuje to hlavní, o co v tom všem jde. Každá z těch zřetězených funkcí totiž musí "skákat nahoru", do toho jiného ("vyššího") světa, takže to zřetězení pak vlastně "skáče nahoru a dolů", přimž je zajímavé, že uvnitř jazyka jde skočit jenom nahoru. Skokem dolů se totiž realizuje ten "nečistý" efekt, který v jazyce jako takovém nechceme. Zajímavé a elegantní. Snadno pochopitelné na příkladě Promise z JS, který dělá přesně to samé.
Hezký.

Bezpečně chápu Promise a Maybe, hůř jsem na tom s IO. Takže to všechno prohodím, a budu uvažovat:

Mám funkci, která načte číslo ze souboru, pokud je sudé tak něco s tím spočte, pokud liché, něco jiného, a pak tu hodnotu zapíše zpět do souboru. A to celé třikrát, ať to pěkně vynikne.
Jsem v té funkci. Jeden kontext. Když chci načítat ze souboru, tak to nejde, protože soubor nepatří do mého "světa", nejde předat argumentem (tak čtení by snad na humpoláka šlo, ale zápis už ne). Takže nemůžu použít normální pure funkci. Uvožováním ala Promise to celé obrátím a řeknu: "hele, sežeň mi soubor já si z něho načtu hodnotu, něco spočtu, a pak do něj zase zapíšu." - toto je funkce f1. A to celé třikrát. Následně se celý tento recepis vezme, a nějaký interpret to přečte a musí sehnat ten soubor, a musí provést skutečné zápisy mezi funkcí f1, a f2 a f3.

A celé se to vymejšlí kůli tomu, aby se ověřilo, že: za předpokladu, že splníme všechny deklarované požadavky (načtení a zápis a synchronizaci souborů), bude to fungovat, protože to lze zaručit. Tedy oddělení zaručitelných (pure) a nezaručitelných věcí.

A jestli se alespoň trochu chytám, tak ten lift je ta část, kdy ta funkce předává roli tomu interpretu, tak? Nebo jinak?

1484
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 20. 04. 2018, 23:40:30 »
endofunktor je nóbl výraz pro funkce
Není.
To mi vůbec neva.

1485
Vývoj / Re:Nový objev ve funkcionálním programování
« kdy: 20. 04. 2018, 23:20:49 »
Prosím tě, zkrať to. Prostě řekni, co se ti na tom nelíbí, ať neplejtváme bajty.
Sorry, mě to taky nebaví, ale holt musím zjistit, jestli je "v" ochoten aspoň k normální komunikaci, tj. aspoň k odpovídání na nekomplikované otázky. Pokud není a tímpádem k žádné rozumné diskusi není prostor, tak já si tady honit triko nepotřebuju.
No, posledních sedum stránek neděláte nic jiného.

Mě by se líbilo, když byste každý napsal svou definici, nějak to popsal, a dohadovat se o tom, kdo má pravdu se můžete potom.

Mě třeba baví dumat nad tím, že Maybe je monáda, Promise je monáda, endofunktor je nóbl výraz pro funkce. A teď to nějak spolu souvisí. Taky se mi líbilo "lift je operace která umožňuje aplikovat původní funkci v novém prostředí". To je inspirativní.

Češi jsou strašně hádavej národ.

Stran: 1 ... 97 98 [99] 100 101 ... 133