Python - dobré rady a praktiky

Ivan Nový

Re:Python - dobré rady a praktiky
« Odpověď #240 kdy: 31. 03. 2016, 12:47:47 »
Ale dá. Co je podstatou deklarativního programování, nevytváříte postup výpočtu, ale soubor pravidel, kterými se výpočet má řidit, takže musíte být schopen poznat pohledem na ten soubor pravidel, že výsledek po jejich aplikaci, bude odpovídat požadavkům. Přičemž nejste ani schopen predikovat, jak velké změny výsledku vyvolá malá změna pravidel. A pak stojíte před problémem, jak poznat, zda výsledek odpovídá zadání.

U imperativního stylu ten výsledek ověřujete po částech jak konstruujete výpočet. Pouze vylučujete co neodpovídá očekávaní, při přechodu z jednoho stavu do druhého, což můžete snadněji předvídat, dá se určit do kterého kroku je výsledek správně, nemůžete však zaručit, že je to zcela správně za všech okolností. Jisté je, že se časem objeví další chyby.
Učebnicová poučka neodpovídající realitě. O kousek výš jsem použil příklad

Kód: [Vybrat]
toInt rawString `andThen` toValidMonth

což je úplně to samé jako imperativní

Kód: [Vybrat]
toValidMonth(toInt(rawString))

I v natolik "deklarativním" jazyce jako je Prolog, se reálně píše tak, že člověk rozdělí problém na kroky, kterými se má výpočet ubírat. A pokud chce, může si zkontrolovat, že po jednotlivých krocích dostává ten výsledek, který očekává.
Ano, a pak přidá jedno pravidlo a výsledek bude prázdná tabulka. Najít proč, znamená zkoušet různé kombinace všech pravidel a hledat s kterým se nově přidané pravidlo vylučuje. Co prolog, stačí CSS a mnohdy je docela oříšek nalézt pravidlo, které  vám brání v posunutí obrázku na správné místo. Jen pohledem na vyrenderovaný výsledek a porovnámím se zdrojovými soubory nemáte šanci na to vůbec přijít. Musíte si vypsat, jaká pravidla a v jakém pořadí je renderovací jádro použilo.


JSH

Re:Python - dobré rady a praktiky
« Odpověď #241 kdy: 31. 03. 2016, 12:48:46 »
Ale hraje. Protože skrze jazyk vidíte realitu. Eskymáci mají tisíce výrazů pro sníh, pod každým si představí něco jiného, což my si představit nedovedeme.
Přirozené a programovací jazyky jsou dost odlišné kategorie. Míchat je dohromady je hodně nebezpečné.

Re:Python - dobré rady a praktiky
« Odpověď #242 kdy: 31. 03. 2016, 12:51:48 »
Ano, a pak přidá jedno pravidlo a výsledek bude prázdná tabulka.
...úplně stejně jako u imperativního jazyka:

Kód: [Vybrat]
for(int x; x<10;x++) {
  printf("%d\n",x);
}

Hledej, babo, kde jsem přidal blbě pravidlo :)

Re:Python - dobré rady a praktiky
« Odpověď #243 kdy: 31. 03. 2016, 12:54:11 »
... Konkrétní jazyk jsou všechny možné žádoucí výsledky SQL dotazu, tedy to, co chcete a můžete z databáze vybrat, většinou to ani přesně neznáte, ale můžete to popsat nějakou gramatikou. ...
:o
;D

I tenhle se mi moc líbil:
... Dynamický jazyk je světe div se dynamický, a ta dynamičnost byla jednou z motivací, co stála u jeho zrodu a je to jeho výhoda, která odpovídá zvolenému přístupu. Opačně to platí o statických jazycích. ...
;D  ;D  ;D

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Python - dobré rady a praktiky
« Odpověď #244 kdy: 31. 03. 2016, 13:04:52 »
Ale hraje. Protože skrze jazyk vidíte realitu. Eskymáci mají tisíce výrazů pro sníh, pod každým si představí něco jiného, což my si představit nedovedeme.
Přirozené a programovací jazyky jsou dost odlišné kategorie. Míchat je dohromady je hodně nebezpečné.

Montague si to nemyslel.
"There is in my opinion no important theoretical difference between natural languages and the artificial languages of logicians; indeed I consider it possible to comprehend the syntax and semantics of both kinds of languages with a single natural and mathematically precise theory."


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Python - dobré rady a praktiky
« Odpověď #245 kdy: 31. 03. 2016, 13:09:18 »
Vůbec není potřeba do toho míchat "generované jazyky". Stačí říct, že každý program (v libovolném jazyce) dává pro nějaký vstup nějaký výstup a tedy každý program je vlastně jenom (nekonečná) tabulka a je děsivácky složité vymyslet program tak, aby ta skutečná tabulka odpovídala té tabulce, kterou chci dostat.

No jistě, pro složité problémy je to složité, ale pro jednoduché problémy je to jednoduché. A implementační jazyk v tom hraje minimální roli.
Ale hraje. Protože skrze jazyk vidíte realitu. Eskymáci mají tisíce výrazů pro sníh, pod každým si představí něco jiného, což my si představit nedovedeme.
http://www.lel.ed.ac.uk/~gpullum/EskimoHoax.pdf

Ivan Nový

Re:Python - dobré rady a praktiky
« Odpověď #246 kdy: 31. 03. 2016, 13:17:06 »
Ano, a pak přidá jedno pravidlo a výsledek bude prázdná tabulka.
...úplně stejně jako u imperativního jazyka:

Kód: [Vybrat]
for(int x; x<10;x++) {
  printf("%d\n",x);
}

Hledej, babo, kde jsem přidal blbě pravidlo :)
To ale není dobrý příklad, protože existuje jednoznačný postup, jak se k té chybě dostat, aniž byste musel nějak složitě zkoumat logiku algoritmu, jen sledujete co se kde děje.

Když podobně zareaguje 200 řádkový SELECT, tak to tak jednoznačné nebývá :-)

JSH

Re:Python - dobré rady a praktiky
« Odpověď #247 kdy: 31. 03. 2016, 13:19:46 »
Montague si to nemyslel.
"There is in my opinion no important theoretical difference between natural languages and the artificial languages of logicians; indeed I consider it possible to comprehend the syntax and semantics of both kinds of languages with a single natural and mathematically precise theory."
Teoretické rozdíly mezi nimi možná nejsou, ale ty praktické myslím bohatě stačí. Rozdíly v úspěšnosti překladačů přirozených a programovacích jazyků to IMO ilustrují dostatečně. Nemám problém s tím, hledat mezi nimi podobnosti a společnou teorii. Mám problém s tím, když se bezstarostně strkají do jednoho pytle.

Ivan Nový

Re:Python - dobré rady a praktiky
« Odpověď #248 kdy: 31. 03. 2016, 13:22:11 »
Vůbec není potřeba do toho míchat "generované jazyky". Stačí říct, že každý program (v libovolném jazyce) dává pro nějaký vstup nějaký výstup a tedy každý program je vlastně jenom (nekonečná) tabulka a je děsivácky složité vymyslet program tak, aby ta skutečná tabulka odpovídala té tabulce, kterou chci dostat.

No jistě, pro složité problémy je to složité, ale pro jednoduché problémy je to jednoduché. A implementační jazyk v tom hraje minimální roli.
Ale hraje. Protože skrze jazyk vidíte realitu. Eskymáci mají tisíce výrazů pro sníh, pod každým si představí něco jiného, což my si představit nedovedeme.
http://www.lel.ed.ac.uk/~gpullum/EskimoHoax.pdf
Dobře, jiný příklad. Rozdíl ve vnímání vyplývající z rozdílů mezi analytickým(imperitativním) a syntetickým(deklarativním) jazykem. Barvy a rozdíly v jejich vnímání mezi muži a ženami. Muži ve svém projevu tolik barev jako ženy nepoužívají a ani je nerozeznávají, obě skupiny tedy hovoří jinými jazyky, i když si myslí, že hovoří stejným jazykem.


Re:Python - dobré rady a praktiky
« Odpověď #250 kdy: 31. 03. 2016, 13:30:26 »
... Barvy a rozdíly v jejich vnímání mezi muži a ženami. Muži ve svém projevu tolik barev jako ženy nepoužívají a ani je nerozeznávají, obě skupiny tedy hovoří jinými jazyky, i když si myslí, že hovoří stejným jazykem.
;)

JSH

Re:Python - dobré rady a praktiky
« Odpověď #251 kdy: 31. 03. 2016, 13:35:25 »
Dobře, jiný příklad. Rozdíl ve vnímání vyplývající z rozdílů mezi analytickým(imperitativním) a syntetickým(deklarativním) jazykem. Barvy a rozdíly v jejich vnímání mezi muži a ženami. Muži ve svém projevu tolik barev jako ženy nepoužívají a ani je nerozeznávají, obě skupiny tedy hovoří jinými jazyky, i když si myslí, že hovoří stejným jazykem.
Pořád mluvíte o přirozených a ne o programovacích jazycích. Na analytické a syntetické se dělí právě ty přirozené.
A když už dáváte dokupy syntetické a deklarativní jazyky, tak čeština je spíš syntetický než analytický jazyk. Takže ty deklarativní by měly být našemu myšlení bližší, ne? :D

Ivan Nový

Re:Python - dobré rady a praktiky
« Odpověď #252 kdy: 31. 03. 2016, 13:51:28 »
Dobře, jiný příklad. Rozdíl ve vnímání vyplývající z rozdílů mezi analytickým(imperitativním) a syntetickým(deklarativním) jazykem. Barvy a rozdíly v jejich vnímání mezi muži a ženami. Muži ve svém projevu tolik barev jako ženy nepoužívají a ani je nerozeznávají, obě skupiny tedy hovoří jinými jazyky, i když si myslí, že hovoří stejným jazykem.
Pořád mluvíte o přirozených a ne o programovacích jazycích. Na analytické a syntetické se dělí právě ty přirozené.
A když už dáváte dokupy syntetické a deklarativní jazyky, tak čeština je spíš syntetický než analytický jazyk. Takže ty deklarativní by měly být našemu myšlení bližší, ne? :D
Ano, toto mě před chvilkou napadlo taky. No ono není náhoda, že umělé programovací jazyky vznikly v anglosaském prostředí, už od žakárových pletacích strojů. Nápad, že akce stroje může souviset s pořadím, jako slova ve větě. To by Čecha nenapadlo. Ve světě syntetických jazyků by se možná dala vysledovat souvislost s chemií, ta staví na jiném vidění světa.

JSH

Re:Python - dobré rady a praktiky
« Odpověď #253 kdy: 31. 03. 2016, 14:02:44 »
Ano, toto mě před chvilkou napadlo taky. No ono není náhoda, že umělé programovací jazyky vznikly v anglosaském prostředí, už od žakárových pletacích strojů. Nápad, že akce stroje může souviset s pořadím, jako slova ve větě. To by Čecha nenapadlo. Ve světě syntetických jazyků by se možná dala vysledovat souvislost s chemií, ta staví na jiném vidění světa.
A nebo to náhoda je. Těch vlivů je spousta. A spousta významných jmen kolem počátků informatiky rozhodně z anglosaského prostředí nepochází.

Re:Python - dobré rady a praktiky
« Odpověď #254 kdy: 31. 03. 2016, 14:15:13 »
A nebo to náhoda je. Těch vlivů je spousta. A spousta významných jmen kolem počátků informatiky rozhodně z anglosaského prostředí nepochází.
Jedním z prvních, kdo se modelováním kroků výpočtu zabýval, byl Gödel, který se narodil v Brně, ale mluvil Německy. Tak nevím, co z toho asi plyne pro vlastnosti deklarativních jazyků :)))