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 ... 604 605 [606] 607 608 ... 618
9076
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 16:25:56 »
Proste, podobne jako OOP, neda se to vysvetlit jednoduchym prikladem

Tak když to neumíte vysvětlit jednoduše, tak si přečtěte příklad takového jednoduchého vysvětlení - třeba hned první odkaz googlu: http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html

V podstatě z toho stačí jedna věta:

1. Basic Idea: Macros take unevaluated Lisp code and return a Lisp form. This form should be code that calculates the proper value.

Sorry, ale fakt žádná jaderná fyzika to není.

9077
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 16:10:07 »
Je to asi jako snazit se vysvetlit takto OOP - nejdriv musite chapat, co je objekt.

Rozumím. Nechápu, co jsou to makra, protože jste se tak rozhodl. Na téhle rovině se nebavím. Takže definitivně HOWGH.

9078
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 15:41:10 »
A jak vam to mam ukazat? Kdyz vam ukazu kod v Lispu, nebudete mu rozumet (sam jste si stezoval, kdyz to bedna tak udelal). To bych musel vysvetlit, co co znamena, a to uz udelali jini lide prede mnou (daleko) lepe, proto odkaz na tutorialy.

Vy nerozumíte slovu "příklad"? To se slovně podá zadání a potom se ukáže řešení v jednom jazyce a v druhém, jednou větou se napíše, v čem je zásadní rozdíl a slovně se zhodnotí, které řešení je lepší v čem, např. tedy takto:

Problém: vypočítat a vypsat 1+1
Lisp: (print (+ 1 1))
Python: print 1+1
Hlavní rozdíl je v tom, že lisp používá plně uzávorkovanou prefixovou notaci, která je prostě boží a kdo to nechápe, je idiot
Diskuse: Lispovská implementace běží na stejném hardware stokrát rychleji než libovolná implementace v jakémkoli jiném jazyce včetně assembleru a strojáku, protože lisp je prostě boží a jeho běh urychluje tajemná hermeneutická síla zvaná též Schwartz. Lispová implementace se také vyznačuje tím, že program jsou data, takže není potřeba žádný parser a papír s napsaným algoritmem stačí položit na case, čímž se program magicky spustí.

Ale víte co, já už to ani nechci slyšet. Už jste mě otrávili dostatečně. Takže ani nemusíte psát tu reakci, kterou očekávám: "přečtěte si to v knize Jak jsem měl orgasmus nad Lispem".

9079
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 15:10:49 »
To jste spis vy, vy se hadate o necem, co neznate. :-)

Já se o ničem nehádám. Zaslechl jsem tady, že Lisp je jazyk pro opravdové chlapy a že má obrovskou sílu, protože umí něco, co jiné jazyky ne. Když jsem se zeptal co to je, bylo mi odpovězeno "makra". Když jsem se zeptal, co umí makra, co by jiný jazyk nezvládl, bylo mi řečeno, že to se pitomcům špatně vysvětluje. Poté jsme se složitě dostali k tomu, že makra dělají principielně totéž co eval (exec), akorát se to zapisuje daleko hezčeji. A jestli nechápu, že je to narozdíl od evalu hezké a praktické, tak bych si o tom měl něco přečíst, protože jsem pitomec, který se hádá o něčem, co nezná.

Uf. Tak teda dík za debatu, aspoň jsem si na vlastní kůži vyzkoušel, proč Jehovista psal o tom, že lisp už slouží jenom k tomu, aby se asociální živly plácaly po ramenech. No, i to je cenná zkušenost - je potřeba to vzít pozitivně.

9080
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 14:56:46 »
Klidek, jen tam chybi "se" (zacal ucit).

To je první potěšující zjištění tohoto tématu: že takovíhle povýšení rozumbradové na VŠ neučí...

9081
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 14:48:51 »
Ja Python umim celkem slusne, byl to muj hlavni a nejoblibenejsi jazyk asi 10 let, nez jsem zacal ucit (pred 2 lety) Common Lisp.

Učíte CL a neumíte předvést aspoň tři příklady něčeho skutečně praktického (viz diskuse co je praktické výš)?

Nebo umíte, ale snadnější je pro vás napsat "přečtěte si to jinde"? Tak to mám pro vás bezva tip: přijďte jenom na první přednášku a řekněte studentům "Nemá smysl vám říkat něco, co už je napsáno. Nastudujte si to sami." Gratuluju univerzitám k takovým zaměstnancům!

9082
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 14:26:07 »
Já si samozřejmě v jakémkoliv jazyce můžu napsat interpret jakéhokoliv jiného jazyka, ale tak o tom to není, že jo.

Přesně o tomhletom to ale právě všechno JE. Tahle přihlouplá debata začala tím, že tady lispeři tvrdili, že lisp má jakousi tajemnou SÍLU. Horkotěžko jsme se dostali k od začátku zjevnému faktu, že žádnou tajemnou sílu nemá a že teda jde jenom o nějakou eleganci kódu. Proti tomu nic nemám. Ať si má za elegantní kdo chce co chce...

9083
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 14:07:56 »
To prave dokazuje, ze to nechapete. Protoze makra nejsou eval. Makra jsou elegantni zpusob, jak generovat "boilerplate" kod (a jak treba schovat technicke detaily implementace). A proto je to neco diametralne odlisneho, nez maji bezne jazyky.

Aha. A pomocí evalu se nedá boilerplate kód generovat. Proto eval není makro. Hm. Tak jo.

Problem je, ze vy na vsechno, co vam kdo predhodi, reknete, ze je to neprakticky priklad, a ze to svedete take. Coz je samozrejme v Turingovsky uplnych jazycich pravda. Otazka je, jak bude vypadat ten zapis.

No tak když tady někdo machruje s tím, že něco v lispu napíše na pět řádků a já mu ukážu, že v pythonu je to taky na pět řádků, tak to potom zjevně není otázka toho, jak bude vypadat kód, ale otázka toho, že někdo má prostě neutuchající potřebu machrovat...

9084
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 12:55:53 »
Ještě Ondrovi:

ještě bych asi dodal, že to řešení čistě se stringem je samozřejmě těžkopádné co se týče možných úprav toho kódu. Mohl bych to udělat i tak, že bych si vytvoříl nějaký strom objektů a kořen by měl metodu __call__(), která by celý strom převedla na string, ten přeložila a spustila. Tím bych (jak se to mně - cvičené opici - zatím jeví) získal úplně stejnou sílu, jakou má Lisp. A proč? No protože bych si takhle de facto napsal interpret lispu v pythonu. Akorát bych tomu tak neříkal...

...no a tím jsme se dostali k tomu, co jsem tady psal hned na začátku: pokud mám eval nad turingovsky úplným jazykem, mám stejnou sílu jako lisp, ať si kdo chce co chce říká...

9085
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 12:33:51 »
Z těch příkladů, které jsem tady napsal, bych tipl, že nejdou napsat ty vlastní ify nebo ta logická spojka at-least-two. Ale nevím, jak moc ti to přijde praktické :-)

Tím slovem "praktický" myslím něco, co má nějaký jasný výstup MIMO ten samotný programovací jazyk - tj. např. vyřeší to nějaký problém, který by jinak řešit nešel (nový produkt), prokazatelně to urychlí vývoj (produkt rychleji na trhu), zvýší to stabilitu (snížené náklady na podporu) apod.

Věci, které nevidí nikdo jiný než programátor, za praktické nepovažuju.

Tady jsme asi u konce, pokud máš v Pythonu k dispozici eval, tak tím asi nějak uděláš všechno, co lze udělat makrem, akorát to bude hnusnější (viz dále) a to je možná ten důvod, proč to, narozdíl od maker v Lispu, nikdo nepoužívá.

On to spíš imho nikdo nepoužívá spíš proto, že to za běžných okolností prostě nikdo nepotřebuje.
Ale jinak jsem rád, že jsme se konečně aspoň s někým shodli, že makra nedávají lispu žádnou magickou sílu (!), která by ho nějak zásadně odlišovala od ostatních běžných jazyků. O to mi celou dobu šlo.

Já myslím, že právě ta přidaná hodnota je obrovská. Ve chvíli, kdy člověk "programuje ve stringu", tak přichází o velkou část podpory IDE (zvýrazňování, refactoring, asi i debug…) a zároveň o třeba o syntaktickou (a případně ještě další) kontrolu kompilátorem. Navíc to vypadá hnusně.

To je pravda. Jenže je potřeba si uvědomit, jakou část programu budu chtít takhle krkolomně za běhu měnit. V 99.99procentu programů žádnou. V polovině ze zbytku zanedbatelnou (u ní stringy budu muset přežít). A zbytek problémů by bylo určitě dobré řešit pomocí lispu, proti tomu nic nemám. Jen neustále zdůrazňuju, že nevím, co ten zbytek vlastně tvoří. Žádný takový problém jsem zatím nepotkal...

ad to parsování: Jo, takhle je to asi stejné, já měl na mysli přímo ruční parsování toho stringu.
[/quote]

9086
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 12:24:15 »
Usuzuji z toho, jak odpovidate, ze nevite, o cem je rec, kdyz se rekne makra v Lispu. To je cele.

No tak to jste četl špatně. Nebo jsem já špatně psal. Chtěl jsem říct, že nevím, čím tak zásadním odlišují makra lisp od jiných jazyků ***z hlediska jeho praktického nasazení***.

Samo o sobe to neni problem - ja jsem to take nevedel, a take jsem se tomu konceptu branil, nez jsem to prekonal a neco si o tom precetl. Vy byste mel take, protoze se proste pletete, kdyz mi tvrdite, ze tomu rozumite.

No zatím se mi zdá, že se to principielně nijak diametrálně nelíší od evalu (resp. exec v Pythonu) - prostě se za běhu dá generovat struktura, která se dá spustit. Na tom není čemu rozumět.

Makra jsou v zasade jen dalsi moznost abstrakce, podobne jako funkce. Asi byste jen tezko tvrdil, ze "nevidím žádnou výhodu v tom, když knihovna jazyka nějakou funkci nemá, přestože je dostatečně flexibilní na to, aby si uživatel mohl (musel) tuto funkci psát sám" a obhajoval tim jazyk, ktery neumoznuje uzivateli definovat vlastni funkce.

Top je dost silně přitažené za vlasy :)

Nevim, co bych vam jeste mohl predvest. Cist odkazy se vam nechce. Tak co s vami?

Třeba vám dá inspiraci to, co mě zaujalo o Forthu: prý se jednou za čas někdo pokusí FreeBSĎácký forthovský bootloader přepsat v jiném jazyce, ale nikdy nedosáhne lepšího výsledku.

Stačilo by uvést tři takové příklady pro lisp a už se na nic dalšího nebudu ptát.

Jiste, muzete vratit pole. Ale vicenasobne hodnoty se v Lispu bezne vraci na zasobniku (driv to mohlo mit i vykonnostni dopady), navic vracet pole je nesikovne, pokud nemate tuple unpacking. Uznavam, ze v nekterych dynamickych jazycich to lze pomerne snadno obejit, ale takova Java nebo C++, tam to fakt chybi.


No tak je úspěch, že jsme se posunuli od "proč to ještě NIKDO nezavedl" k "v C++ a javě to chybí" :)

Navíc nechápu, o jakém "obcházení" je řeč - spousta jazyků prostě víc hodnot vracet UMÍ. Tečka.

Je mi lito, ja za vas nemuzu delat domaci ukol a vsechno vam dopodrobna popisovat, abyste pak rekl - ale me se to stejne nelibi. Proste, musite se podivat na ty veci sam. Ja vam k tomu dal dost informaci.

Není potřeba nic dopodrobna popisovat. Stačí deseti větami ukázat příklad něčeho *praktického*, co v Lispu dá napsat, a v běžnějším jazyce by to nešlo, nebo by byl zjevný propastný rozdíl v těch dvou implementacích.

9087
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 11:44:03 »
Těžko si řeknete, že kdybych programoval v Lispu, tak by to teď dalo krásně vyřešit makrem, když makra v Lispu vůbec neznáte.

To je pravda a tenhle argument chápu. Jenom se nějak pořád nemůžeme dobrat těch *praktických* věcí, u kterých by si to pythonista mohl říct ;)

Do evalu obvykle strkáte string, kdežto makra v Lispu jsou na úrovni syntaxe jazyka.

Tomu taky rozumím a taky se mi to líbí. Ale opět tam nevidím žádnou tak zásadní přidanou hodnotu. A v tom je ten problém.

Navíc následné použití maker je řádově jednodušší než parsovat předaný string.

V jakém smyslu "jednodušší"? Pro programátora nebo pro stroj? Jestli pro stroj, tak to je jasné, protože proto to bylo tak vymyšlený, že tomu stroj rozumí líp než člověk.

No a jestli programátor, tak o tom bych s úspěchem pochyboval:
Kód: [Vybrat]
# kod ve stringu
code = """
def f(a):
   print "Ahoj "+a
"""
# sem si ulozim vysledny objekt
globals={}
# prevod string -> funkce
exec code in globals
# ziskanou funkci si ulozim do lokalni promenne
f = globals['f']
# a spustim ji
f("Mirek")
# vysledek: Ahoj Mirek

A pak tam bývá problém s prostředím. Když to předám jako string do evalu, tak se v Lispu (nevím jak jinde) nemůžu odkazovat na lokální proměnné, protože eval si to vyhodnotí ve svém prostředí.

Teď tomu asi přesně nerozumím, ale v pythonu je prostředí tvořeno slovníkem, do kterého si můžu uložit co chci ("globals" v prikladu vyse).

9088
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 11:31:32 »
Jo, obecně. Ale jde to jen u určitého typu rekurze, to jsem myslel tím "pokud to jde". Konkrétně to jde u koncové rekurze (http://en.wikipedia.org/wiki/Tail_call). Scheme to umí automaticky, Lisp pokud vím ne. Ale asi jsem dal špatný příklad, ten jednodušší zápis faktoriálu v koncové rekurzi není.

Hm, tak to už zas taková bomba není.

Abysme si rozuměli, já ten základní princip chápu: kód jsou data. Proto můžu kód měnit za běhu stejnými prostředky, jako měním data - a poté ho úplně normálně spustit. Už jsem tady uváděl, že si umím představit, že si např. můžu za běhu programu u nějaké funkce vymazat každý druhý příkaz a poté ji spustit. No dobrá, ale opravdu mě napadá jenom velmi málo skutečně dobrých *praktických* využití téhle vlastnosti takových, aby v "normálním" jazyce nešly NĚJAK napsat taky (znovu opakuju: jistě, bude to krkolomnější - ale to mi žíly netrhá u věci, která je takhle strašně úzkoprofilová...).

Jediná oblast, kde si využití dovedu představit hodně dobře, je automatická verifikace kódu, ale s tím tady kupodivu žádný obhájce lispu neoperuje...

Nebo si můžu vytvořit makro, které mi vytvoří definici celé třídy :-).

To zní sice strašně hóch, ale v Pythonu to jde taky. Akorát běžný pythonista za celý život nepocítí potřebu to dělat... Čili asi ani nepocítí potřebu zrovna kvůli tomuhle zahodit python a jít do lispu...

Ono jde právě o tu eleganci, myslím si, že syntaktický cukr je hodně důležitý a Lisp umožňuje definovat prakticky jakýkoliv syntaktický cukr, jaký vás napadne, což je výhoda. I když asi i zároveň nevýhoda, když si každý Lispový programátor definuje vlastní syntaktické cukry, tak prase aby se v tom pak vyznalo :-).

No a to jsme právě u toho, co jsem psal výš: jestliže "normální" jazyk má svoje prvky napevno, tak to není nevýhoda, ale výhoda - protože všichni jeho uživatelé tuhle vlastnost používají stejně, což vede ke snadné znovupoužitelnosti, což je přesně to, co mě zajímá (efektivita práce). Plácnu to takhle: Nechtěl bych dávat dohromady kód pěti lispařů, kde každý z nich psal objektově, ale každý si ten objektový systém napsal jinak, "protože to lisp umožňuje".

Co se týče toho ICallable — pokud to chápu správně, tak to mi jen pomůže v tom, že místo toho abych předal přímou hodnotu, tak ji musím předat buď jako objekt nebo jako funkci, což může být dost nepohodlné a makro je v tomto případě daleko jednodušší a elegantnější.

Já jsem to myslel takhle: vezmu string obsahující kód a předám ho nějaké factory, která mi vytvoří objekt, který zároveň obsahuje ten zdrojový string (abych ho kdyžtak mohl upravit, kdybych to nakrásně chtěl)  a zároveň přeloženou verzi - takže ho můžu zavolat jako funkci.

Jasně, mám tam ty dvě věci (zdroják a přeložený kód) odděleně, takže to není tak elegantní, jako kdyby oboje bylo totéž, ale co se týče praktického využití, přijde mi, že to vyjde nastejno.

REJP:
A bez haldy závorek! ;)
/REJP

9089
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 10:53:26 »
Bedno, přijde ti normální propagovat jazyk tím, že těm, kdo ho neznají, ukážu nekomentovaný zdroják?

Citace
Japonština je geniální jazyk! Koukej: 器質性構音障害 - 音声器官における形態上の異状により引き起こされる発音上の障害。No není to paráda?! Kdo nevidí tu krásu, není real man, ale cvičená opice!

Vůbec to není hardcore lisp, normální 2 makra a jedna funkce.

Ok, tak co to teda dělá tak báječného? Vezme to zdroják a udělá to z něho spustitelnou funkci. A co se týče ***praktického použití***, tak se to od běžné evalu liší jak? Přijde mi, že leda tím, že to, co mi z běžného evalu vypadne, už nemůžu dál modifikovat. Tak fajn, no, to je pěkný - akorát jsem to zatím nikdy nepotřeboval. A to je teda všechno?

9090
Vývoj / Re: Na co všechno je dobrý LISP?
« kdy: 30. 03. 2011, 10:41:16 »
Bral bych raději tykání, jestli vám to neva...

Vy jste ta makra stale nepochopil.

Z čeho tak usuzujete? Napsal jsem, že nevidím žádnou výhodu v tom, když jazyk nějakou vlastnost nemá, přestože je dostatečně flexibilní na to, aby si uživatel mohl (musel) tuto vlastnost psát sám. Daleko lepší mi přijde klasický koncept, kdy jazyk má přímo zabudováno 99.99% vlastností, které uspokojí 99.99% jeho uživatelů. A ti ostatní použijí nějaký jazyk vhodnější pro daný účel. No problem - nikdo netvrdí, že třeba CLI je vhodné na vše.

(Kdyz jsme u toho, Viky zminil Forth - to je take jazyk, na ktery byste se mel podivat, ma k Lispu velmi blizko tim, jak je programovatelny.)

Forth jsem v tom výčtu jazyků, se kterými jsem se setkal, zapomněl uvést. Ne, že bych v něm něco psal, ale trochu jsem si ho prošel. Ano, je rozhodně zajímavý - a k seznámení s ním mě vedly JASNĚ UVEDENÉ výhody oproti jiným jazykům: brutální minimalismus, jednoduchý koncept, dostatečná vyjadřovací schopnost. Mimo to znám forthovský bootloader z FreeBSD a musím říct, že to je moc hezká věc. Jinými slovy, milovníci Forthu mi jasně předvedli, k čemu se ten jazyk hodí víc než jiné a  neotravovali mě kecy o tom, že jedině oni jsou ti správní real men, protože si pomocí nářadí vyrábí nářadí...

Vraceni vice navratovych hodnot (coz z ostatnich jazyku pokud vim hezky umi jen Python), i kdyz zapis je ponekud pres ruku. Opravdu nevim (podobne jako u tech restartu) proc tak jednoduchou vec jeste nezavedly i ostatni jazyky.

Jaktože nezavedly? V CLI se dá vracet pole objektů a v Boo se s tím dá pracovat úplně stejně jako v Pythonu:
def f() as (string):
   return "a","b"
a,b = f()
Takže bez problému. Není to moc používané - asi to nikdo moc nepotřebuje...
Má to taky nevýhodu, že tím člověk může ztrácet část typové kontroly - ale tu lisp tak jako tak (afaik) nemá vůbec, takže to není argument.

Reader makra (a vubec cely koncept reader-printer) - v podstate vam umoznuje predelat si syntaxi totalne. Takze pokud chcete nejaky syntakticky cukr, neni problem si ho dovyrobit.

To je pořád dokola. Ano, tohle je zajímavé. A dá se to využít k něčemu *praktickému*, co by se bez toho (v jiném jazyce) nedalo napsat? Pořád dokola tady slyším, jak jsou lispaři geniální, tak by snad mohli pochopit i tuto jednoduchou otázku. Ale možná jsem málo real man, abych pochopil že lapidární odpověď "makra" vyjadřuje vše...

...tak mě napadá, že odpovídat takhle blbě je asi trochu deformace z lispu - zřejmě odpovídající předpokládá, že si odpověď na svoji otázku doplním sám, protože přirozený jazyk je na to dostatečně flexibilní :)

Zobecnene promenne - v podstate jde o neco podobneho jako lvalue v C, akorat si muzete definovat vlastni.

Tomu nerozumím. Můžete mi ukázat příklad?

Stran: 1 ... 604 605 [606] 607 608 ... 618