Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: nm - novomente 26. 03. 2011, 08:28:07

Název: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 26. 03. 2011, 08:28:07
Nedávno jsem si trochu hrál s programovacím jazykem LISP. Docela mě překvapilo, jak je jednoduchý a přitom univerzální.

Rád bych se tady zeptal, na co všechno se LISP používá, případně na co všechno by se dal použít?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Vin 26. 03. 2011, 09:38:18
Slyšel jsem, že v CADech, taky se používá v rozšířeních pro gimp a emacs.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Radovan Tucek 26. 03. 2011, 10:14:08
Třeba na toto  ;D http://www.cliki.net/programming%20language (http://www.cliki.net/programming%20language)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 26. 03. 2011, 10:15:50
No, jestli pod LISP myslis Common Lisp (protoze jeste existuje Scheme, Emacs Lisp a dalsi, stare varianty), tak to je "jazyk industrialni sily". To znamena ze se da pouzit na psani (temer libovolnych) aplikaci.

Akorat knihovny jsou ponekud problem (nema to zkratka tak bohatou standardni knihovnu jako Java, C# nebo Python), i kdyz to ted hezky resi http://www.quicklisp.org/ (http://www.quicklisp.org/).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 26. 03. 2011, 10:38:56
JJ, pohraval jsem si s Common Lisp. Ale zrovna tak jako jeho vyuziti me zajima vyuziti Scheme apod.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 26. 03. 2011, 12:17:20
Slyšel jsem, že v CADech, taky se používá v rozšířeních pro gimp a emacs.

V době, kdy jsem dělal rozšíření do AutoCADu, byl AutoLISP docela v defenzivě a pro větší věci bylo rozhodně lepší sáhnout po ObjectARX (C++). A na skriptíky po přidání VBA měl AutoLISP docela tvrdou konkurenci rovněž. Jak je to v dalších CADech, to nevím.

V dnešní době bych zájemcům o jazyky typu LISP asi doporučoval poohlédnout se po Clojure.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 26. 03. 2011, 22:01:54
Rád bych se tady zeptal, na co všechno se LISP používá, případně na co všechno by se dal použít?
Zkusil bych odpovědět otázkou: K čemu se používá třeba takový Excel či ooCalc? Podle mne budou odpovědi hodně podobné právě kvůli univerzálnosti Lispu. Lisp je Turingův stroj postavený na stromu. Lze v něm naprogramovat téměř vše, co si lze představit.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 27. 03. 2011, 15:22:14
Zkusil bych odpovědět otázkou: K čemu se používá třeba takový Excel či ooCalc? Podle mne budou odpovědi hodně podobné právě kvůli univerzálnosti Lispu. Lisp je Turingův stroj postavený na stromu. Lze v něm naprogramovat téměř vše, co si lze představit.
Ano. LISP je velmi univerzalni. Dokonce jsem cetl, ze to byl prvni jazyk, ve kterem se dalo programovat stylem OOP. To me docela dostalo.

Nicmene je to interpretovany jazyk (i kdyz k nemu existuje i compiler - oops!) a jako takovy bude mit urcite i svoje mouchy. Tady mam konkretne na mysli napriklad rychlost behu programu napsaneho v LISPu. Nekde jsem cetl takovou lahudku, ze byl primo pro LISP sestrojen hardware (IBM, nebo SUN nebo DIGITAL uz fakt nevim), na kterem to bezelo dost rychle. Ovsem na normalnich PC podle me cela rada programu napsanych v LISPu bezi pomaleji nez treba v Cecku.

Proste kazdy jazyk ma svoje vyhody. Ty co ma jazyk LISP nema treba Cecko a naopak. Tudiz pro neco je vhodnejsi Cecko nebo jiny jazyk, pro neco je nejvyhodnejsi LISP.

A mne by zajimalo pro co se pouziva LISP. Uz tady padlo, ze se pouziva v CADech, nebo v Gimpu nebo v EMACSu apod. Take tu bylo uvedeno par odkazu, kde je popsano vyuziti LISPu (take zajimave). K tomu bych dodal, ze LISP je pouzit take v Sawfish Window Manageru (puvodne pouzivanem pro GNOME), dale ve hre Abuse a take vseobecne pro umelou inteligenci.

A kde ho pouzivate vy?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 27. 03. 2011, 15:35:34
Zaprve, Common Lisp vubec nemusi byt pomaly - ma typove deklarace, ktere umoznuji kompilatoru kod zoptimalizovat, a co se tyce alokace pameti, je relativne dost definovano, kdy nastava, takze to take neni problem. (I kdyz bych rekl, ze to neni tak primocare jako v C, ale to muze byt jen nedostatek zkusenosti.)

No a k tomu pouziti. Existuji firmy, co v tom maji i sem tam nejaky system. Driv se Lisp pouzival vic, ale pak prisla AI zima a v podstate ho smetla s sebou, i kdyz trochu nezaslouzene. A take byl problem v nedostatku svobodnych implementaci a komercni fragmentaci. Jine jazyky (Java, Python, Perl) tyto problemy v 90. letech nemely a proto se vice prosadily.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: pavel 27. 03. 2011, 15:58:26
Lisp je Turingův stroj postavený na stromu.
Lisp nevychází z turingova stroje. Lisp vychází z lambda kalkulu a to je jiný teoretický model než turingův stroj (ale jsou výpočetně ekvivalentní).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: anonym 27. 03. 2011, 17:44:25
Ano. LISP je velmi univerzalni. Dokonce jsem cetl, ze to byl prvni jazyk, ve kterem se dalo programovat stylem OOP. To me docela dostalo.

Prvni OOP jazyk byl Simula... Nicmene Common Lisp disponuje CLOSem, coz je podle me nejpropracovanejsi a nejpromyslenejsi pouzivany OO system.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: broukoid 27. 03. 2011, 19:40:21
Z meho pohledu se vyhody lispu zacnou nejvice projevovat pri rustu komplexity a abstraktnosti problemu. Ja osobne jsem se naucil uz hodne jazyku, ale zadny nema takove vyjadrovaci schopnosti a tak jasnou a pritom jednoduchou syntaxi i pri reseni sebeslozitejsich problemu.
Myslim, ze kazdy programator by se lisp mel naucit (tim myslim neco vetsiho v nem napsat, jinak to nema cenu), i kdyby jej pak uz nikdy nemel pouzit - protoze tim ze pozna lisp a zpusob prace v nem, najednou zacne videt spoustu veci jinak, a i kdyz dal bude pracovat v C, jave nebo cemkoliv jinem, troufnu si tvrdit ze mu to pomuze.

A rad bych upresnil par bludu co se tady objevily - vetsina z nich se traduje mezi lidmi co lisp vubec neznaji (coz je vetsina):

1) lisp je interpretovany - nektere implemetace jsou 100% interpretovane, nektere jsou kompilovane. Existuji kompilatory lispu do Ccka, existuji vyladete kompilatory ktere pri pouziti ruznych hintu pro prekladac dokazi generovat kod ktery je velmi rychly. Dokonce bylo postaveno nekolik pocitacu pro nez je lisp primo strojovym kodem (resp. urcita podmnozina lispu)

2) lisp je pomaly - viz ad 1) - jsou kompilatory horsi, jsou i lepsi, nektere jsou vyborne

3) neprehledny les zavorek - to mohlo platit v dobach kdy prumerny textovy editor neumel zvyraznovat pary zavorek, pripadne automaticky odsazovat - v dnesni dobe tento problem myslim neexistuje (tedy za predpokladu ze neprogramujete v notepadu..) - sveho casu jsem za "neprehledny les slozenych zavorek" povazoval Ccko

4) je to vykopavka - prave diky svemu minimalistickemu navrhu lisp dokaze stejne snadno doplnovat nove funkce jako nove jazykove konstrukce (tj veci jako sou smycky, podminky, vyjimky, tridy, atd.) a tim v podstate nema sanci zastarat - narozdil od temer vsech "standardnich" jazyku, ktere pro zmenu jazykovych konstrukci vyzaduji prepsat kompilator

5) nejsou pro to knihovny - opet neni uplne pravda - ano, v zakladni "zabudovane knihovne" lispu moc zajimavych modulu nenajdeme, ale zejmena pro common lisp existuje nepreberne mnozstvi knihoven temer pro cokoliv - myslim ze zde neni situace o nic horsi nez napr. pro C/C++. Navic integrovat do lispu cizi objektovy kod neni slozite.

6) ma to zvrhlou obracenou syntaxi - ano, syntaxe v podobe "OPERACE OPERANDY" vypada spise jako assembler, nez jako vyssi jazyk, ale zdani klame - prave a pouze diky tato syntaxe lispu dava jeho silu.
Pro zacatecnika to muze byt lehce matouci, ale to je proste otazka zvyku.
Kdyz jsem se pred 15 lety ucil Ccko, znal jsem basic a pascal a Ccko mi prislo jako naprosto chaoticka smes znaminek zavorek a vubec divnych znaku. To same plati o lispu.
Mimochodem zajimave je ze tvurce lispu mel v planu do dalsi verze udelat nejakou "normalnejsi" syntaxi, nicmene ukazalo se ze o ni vlastne nikdo nestoji a ze by navic znemoznila spoustu skvelych jazykovych konstrukci.
A pro ty kterym dela problem zapis delsich matematickych vyrazu (a tech moc nebude) existuji knihovny ktere umoznuji psat vyrazy v "normalni" notaci - opet je zajimave ze je temer nikdo nepouziva - stejne jako jsem videl sady Cckovych maker ktera se snazi Ccko priblizit pascalu, a take je vicemene nikdo nepouziva.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Radovan Tucek 27. 03. 2011, 21:19:05
Je tu pro lisp nějaký editor/IDE který dokáže zformátovat kód? Jsem z netbeans zvyklí nějak sprasit kód, poté zmáčknout ctrl+alt+f a kód je najednou přehledenej... existuje něco podobného pro lisp?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 27. 03. 2011, 21:52:13
Broukoide, nic proti Tvému příspěvku jako celku, ale zejména body 5 a 6 mi přijdou trošku jako výmluvy či vytáčky.

K bodu 5: Souhlasím s tím, že párování závorek pomůže "rozšifrovat" zdrojový text, nicméně to neznamená, že se tím program stane výrazně čitelnějším. Čitelnost znamená "kouknu se a vidím" a ne "otevřu si editor, jezdím kurzorem sem a tam a hledám".

K bodu 6: Prefixová notace sice má svoje výhody, ale zrovna u aritmetických operací a podobných akcí to prostě je handicap. Výhody existují, ale například násobnou aplikaci operátoru lze v jiných jazycích vyjádřit pomocí fold/reduce. S problémem infixových funkcí si z jazyků, které jsem viděl, asi nejelegantněji poradily Haskell a Scala.

Zkrátka a dobře, vždycky je to něco za něco. Obrovská flexibilita LISPu je výhoda, o tom není sporu. Problém "metajazyků" typu LISP je dvojí:

1. Zhoršená čitelnost kvůli jednoduché syntaxi - syntaxe LISPu je computer friendly a ne human friendly. Syntaktický cukr je z hlediska čtenáře kódu výhoda, ne že ne.

2. Rozšiřitelnost a určitý paradigmatický agnosticismus (proč je, u všech všudy, potřeba do LISPu přidávat další a další konstrukce?) tento problém ještě zvětšuje.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 27. 03. 2011, 21:59:00
Je tu pro lisp nějaký editor/IDE který dokáže zformátovat kód? Jsem z netbeans zvyklí nějak sprasit kód, poté zmáčknout ctrl+alt+f a kód je najednou přehledenej... existuje něco podobného pro lisp?
Ten kód se dá docela dobře prasit přímo v Lispu, bez potřeby dalšího editoru. Samozřejmě je možné použít klasiku Vim nebo Emacs. Ve Vimu příkaz =%.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: bedna 28. 03. 2011, 08:44:42
K bodu 5: Souhlasím s tím, že párování závorek pomůže "rozšifrovat" zdrojový text, nicméně to neznamená, že se tím program stane výrazně čitelnějším. Čitelnost znamená "kouknu se a vidím" a ne "otevřu si editor, jezdím kurzorem sem a tam a hledám".

...

Zkrátka a dobře, vždycky je to něco za něco. Obrovská flexibilita LISPu je výhoda, o tom není sporu. Problém "metajazyků" typu LISP je dvojí:

Nechtěl jsem do toho zasahovat, ale to, že je ten les závorek nečitelný, to je naprostý blud.

Základní rozdíl mezi tím vaším "metajazykem" Lisp a třeba céčkovými typy jazyků je ten, že v lispu má každý řádek hutný význam, natož céčkové zdrojaky jsou roztahané, plné deklarací a podobně. Tudíž z toho plyne, že kolikrát kratičká funkce napsaná v lispu dělá to samé, jako 100 řádků v céčku a časově pro pochopení té funkce a proletění 100 řádků to vychází na stejno, ne-li pro lisp na kratší dobu. V tom je ten Váš "závorkový problém" a kolikrát mám problém s čitelností v mých programech, třeba, když se používá více cyklů v maticích a potřebuji těch matic více a z firmy mi napíší třeba po půl roce, že je to třeba upravit... (foreachem to udělat nejde a prasácky to napsané taky není)

Prefix/infix/postfix neřeším. No comment, to není problém jazyka, ale Vás, omluvte mou prostořekost.

Zhoršená čitelnost, viz. víše, musí se přemýšlet, jojo a ne datlovat. Opět, prosím, omluvte mou prostořekost, ale enbylo to myšleno na Vás, ale obecně.

Rozšiřitelnost a agnosticismus. No, já nevím, tento jazyk byl a zřejmě bude vždy pokusným prostředím pro konstrukty pro ostatní programovací jazyky. Razí teorii, která se mi velmi líbí a to: "Pokud máme tu možnost dát uživateli silné nástroje, tak mu je dejme." O tom svědčí samotná plná programovatelnost toho jazyka, možnost psaní maker, úprava všech částí REPLu. Vím, že určitě nastane připomínka: "A co bezpečnost jazyka?". Většina lidí, co v tom někdy něco lehce dělala o tom ani neví, takže to nemohou ani řešit nebo prostě na to nemají buňky. Zároveň takový "programátor" je cvičená opička, která se musí držet za ručičku, aby náhodou něco nepokazila.

Nechtěl jsem začít žádnou hádku a podobně, pouze doufám, že jsem rozumně argumentoval. A abychom předešli případným problémům, v Lispu dělám bakalářku (ovládání robotů, jejich vizualizace a regulární jazyk pro jejich ovládání), v PHP dělám už 6 let v komerční sféře, odkojen jsem byl na BASICu a pak hned C, C++ a nyní převážně C# na firemní aplikace a školní kravinky.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: program 28. 03. 2011, 10:15:51
Zdravím,
nerozjíždějte tady prosím zase flame na téma, komu vyhovuje který jazyk. Kdo to má číst? Jinak k původní otázce.

V LISPu se dá dělat pochopitelně vše, co se algoritmů týče, ovšem dnes spíše na úrovni hobby a akademie. Ne proto, že by ten jazyk byl špatný, ale chvíli to trvá, než si na něj člověk zvykne a tak se mu spousta lidí vyhýbá a díky tomu jsou problémy s knihovnama (věnuje se tomu málo lidí). Já jsem se například s LISPem dost zastavil ve chvíli, když se mi nepodařilo rozchodit GTK.

Nic méně LISP pořád zůstává hodně dobrým jazykem na skriptování v aplikacích a na AI. Ta čitelnost je jen otázkou zvyku, mě se v něm dělá mnohem lépe, než třeba v Haskelu (srovnání s C je hodně kostrbaté). A hlavně LISP je naprosto skvělý výukový nástroj. Navíc v LISPu je možné dělat vše pro OS Emacs  :)

Možná bych původní otázku doplnil o svůj stop-problém (ať se taky někam dostanem :) ) -> jak normálně udělat GUI v LISPu?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: bedna 28. 03. 2011, 12:03:07
Možná bych původní otázku doplnil o svůj stop-problém (ať se taky někam dostanem :) ) -> jak normálně udělat GUI v LISPu?

http://www.lispworks.com/documentation/lw60/CAPUG-M/html/capiuser-m.htm

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blah 28. 03. 2011, 12:03:32
Bedna je evidentne z UPOLu ;)... Nemyslim si, ze by rozjizdel nejakou hadku a muzu s nim jen souhlasit, jeho argumenty jsou opodstatnene. Common Lisp je jazyk bez syntaxe, komu syntaxe z nejakych duvodu nevyhovuje, muze si ji jednoduse zmenit - je to programovatelny jazyk. Vetsinou ale clovek prijde na to, ze syntaxi menit nepotrebuje (jak uz nekdo zminil vyse).

Situace s knihovnami neni na prvni pohled az tak jednoducha, ale to jen kvuli tomu, ze clovek musi investovat do studia toho, jakym zpusobem se na ne napojit (napr. asdf). Pokud do toho systemu clovek pronikne, nakonec zjisti, ze univerzalnost jazyka neni zadnym zpusobem omezujici. Nicmene prave toto je zasadni prekazka, ktera spoustu lidi od experimentu s Lispem odradi.

Jeste bych podotknul, ze implementaci jazyka existuje cela rada a zejmena ty komercni distribuce (napr. LispWorks) disponuji velmi pokrocilymi nastroji (nejen) pro editaci a tvorbu GUI.

Preji tazateli hodne stesti a trpelivosti: Common Lisp je bezesporu spravna cesta, kterou by se kazdy informatik s otevrenou hlavou mel vydat.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blah 28. 03. 2011, 12:08:35
Jeste mala poznamka: LispWorks je skvela distribuce, nicmene komercni (Personal Edition je zdarma a pro zacatky postacujici). Ja osobne ale preferuji sbcl (distribuce lispu) + slime (na emacs napojene IDE), protoze clovek vidi do strev a ma absolutni kontrolu nad tim, co se deje. Jakmile si na to clovek jednou zvykne, bude extremne efektivni, coz je ostatne deviza vsech pokrocilych Lispovych programatoru...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 28. 03. 2011, 14:17:26
LISP je podle mě jedním z několika mála jazyků, v němž by si měl člověk, který se chce považovat za opravdového programátora, zkusit vyřešit nějaký jen trošičku komplikovanější problém. Tím si ten jazyk ochmatá a jak už tu bylo napsáno - i kdyby v něm už nikdy více neměl nic dělat, v žádném případě to nebude ztracený čas. Člověk získá určitý jiný pohled na to, jak se dají řešit problémy pomocí počítače.
A dále - opět, jak už tu bylo napsáno - LISP vyniká spíše v problémech, jejichž povaha je abstraktnější a struktura komplexnější. Abych byl konkrétnější: stejný problém by byl v jazyku typu C++ řešen pomocí hromady komplikovaných, nepřehledných datových typů a algoritmů postavených na spoustě košatých podmínek a vnořených cyklů, pracujících se spoustou pomocných proměnných, u nichž je problém najít jim vhodný název, aby se v tom dalo vyznat ne po roce, ale druhý den. Objektové programování v těchto problémech nepřináší prakticky žádnou výhodu (OOP je výhodné pro zpřehlednění rozsáhlých problémů, ovšem s jednoduchou strukturou vzájemných vazeb). To, nač by v C++ byla třeba komplikovaná struktura dat a rozsáhlá, leč konečná množina komplikovaných algoritmů pro práci s ní, to se v LISPu vyřeší jednoduchou strukturou dat a nekonečně velkou množinou jednoduchých algoritmů pro práci s ní, jež se ovšem dá vygenerovat konečnou množinou jednoduchých metaalgoritmů.
Kdo tento rozdíl v přístupu pochopí, ten ho dokáže velmi efektivně zhodnotit a také rozhodnout, kdy ho použít a kdy ne (a třeba raději zvolit jiný jazyk). Kdo ne, tomu bude LISP vždycky připadat nepřirozený a "jiný". To ale není vinou LISPu - to je vinou nepochopení lispového pohledu.

LISP se tedy typicky používá tam, kde je třeba činit rozhodnutí na základě různorodých vstupních parametrů a/nebo různorodé výstupní hodnoty nastavovat. Dá se efektivně použít na řízení v průmyslu, v dopravě, v robotice, na simulaci/modelování/vyhodnocování ekonomických procesů, k AI-části enginu počítačových (i jiných ;-) her, k realisaci expertních systémů atp.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: bedna 28. 03. 2011, 14:26:36
Srdíčko mé zaplesalo, pěkně jste to napsali, já v tom hledal jen okličky a ano, pan Krupka je ten, kdo mi tuto cestu ukázal. ::)

PS: Co nosí bernardýn v soudku na krku?: - co kdybych napsal ruma?  ;D
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: marwyn 28. 03. 2011, 14:31:58
Nedávno jsem si trochu hrál s programovacím jazykem LISP. Docela mě překvapilo, jak je jednoduchý a přitom univerzální.

Rád bych se tady zeptal, na co všechno se LISP používá, případně na co všechno by se dal použít?

LISP = Lost In Stupid Parenthesis, ale k tomu si musíte dojít sám, až Vás opustí to počáteční nadšení  ;D
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 28. 03. 2011, 16:31:26
LISP = Lost In Stupid Parenthesis, ale k tomu si musíte dojít sám, až Vás opustí to počáteční nadšení  ;D

LISP = Language Intended for Smart People, ale k tomu inteligencí méně obdaření jedinci nemohou dojít nikdy ;-)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blizz 28. 03. 2011, 19:21:16
LISP = Language Intended for Smart People, ale k tomu inteligencí méně obdaření jedinci nemohou dojít nikdy ;-)

Dosť bolo teórie o tom aký je lisp úžasný jazyk, je mi jasné že LISP je z pohľadu teórie veľmi flexibilný, ale je lisp použiteľný aj v praxi? Mohol by sem nejaký znalec jazyka LISP napísať čo konkrétne sa dá v LISPe robiť? aké sú pre LISP frameworky knižnice, prostredia atď. či pre lisp existuje nejaký základný framework, nejaké frameworky na tvorbu GUI, MVC webové frameworky, entreprise frameworky, ORM frameworky, Frmeworky na prácu s grafikou, multimédiami, hrami atď. a či pre lisp existuje podobný archív knižníc ako napr. CPAN pre perl? Čo sa týka vývojového prostredia v akých IDE sa vyvýjajú LISPové aplikácie? Je pre lisp nejaké RAD vývojové prostredie, ktoré by umožňovalo podobne rýchly vývoj aplikácií ako NetBeans, IntelliJ IDEA, alebo Visual Studio? Keby som si vybral LISP znamenalo by to že by v tom programátori dokázali písať aplikácie rýchlejšie a za nižšiu cenu ako v .NET alebo Jave?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 19:24:08
6) ma to zvrhlou obracenou syntaxi - ano, syntaxe v podobe "OPERACE OPERANDY" vypada spise jako assembler, nez jako vyssi jazyk, ale zdani klame - prave a pouze diky tato syntaxe lispu dava jeho silu.
[...]
... a ze by navic znemoznila spoustu skvelych jazykovych konstrukci.

Můžu se zeptat, jak by syntaxe (!) mohla dávat jazyku sílu, popř. znemožňovat nějaké konstrukce?

Jestli prefixová notace dává LISPu sílu, tak to znamená, že postfixový Forth tu sílu nemá? Nebo v čem je teda zakopaný pes?

(nemám absolutně v úmyslu rozjíždět jakýkoli flame, otázku myslím naprosto vážně)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 19:26:07
je mi jasné že LISP je z pohľadu teórie veľmi flexibilný

Z hlediska teorie je nejflexibilnější jazyk strojový kód. Pokud ho zapisujeme binárně, je navíc přímo úžasná jeho jednoduchá a přečistá syntaxe ;)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: poustevnik 28. 03. 2011, 19:46:04
6) ma to zvrhlou obracenou syntaxi - ano, syntaxe v podobe "OPERACE OPERANDY" vypada spise jako assembler, nez jako vyssi jazyk, ale zdani klame - prave a pouze diky tato syntaxe lispu dava jeho silu.
[...]
... a ze by navic znemoznila spoustu skvelych jazykovych konstrukci.

Můžu se zeptat, jak by syntaxe (!) mohla dávat jazyku sílu, popř. znemožňovat nějaké konstrukce?

Jestli prefixová notace dává LISPu sílu, tak to znamená, že postfixový Forth tu sílu nemá? Nebo v čem je teda zakopaný pes?

(nemám absolutně v úmyslu rozjíždět jakýkoli flame, otázku myslím naprosto vážně)

myslím, že tady se jedná o narážku na LISPová makra.
jde o to, že příkazy LISPu jsou syntakticky (i sémanticky) LISPové listy (seznamy) a ty je možné on-the-fly generovat a spouštět. V makrosystému daného jazyka tak máte zároveň zabudovanou i možnost pustit libovolnou funkci jazyka a z toho vyplývá označení LISPu za "programovatelný programovací jazyk". Tímto způsobem je možné v LISPu nadefinovat svoje vlastní syntaktické konstrukce (formy) bez nutnosti modifikovat kompilátor.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 20:03:44
myslím, že tady se jedná o narážku na LISPová makra.
jde o to, že příkazy LISPu jsou syntakticky (i sémanticky) LISPové listy (seznamy) a ty je možné on-the-fly generovat a spouštět. V makrosystému daného jazyka tak máte zároveň zabudovanou i možnost pustit libovolnou funkci jazyka a z toho vyplývá označení LISPu za "programovatelný programovací jazyk". Tímto způsobem je možné v LISPu nadefinovat svoje vlastní syntaktické konstrukce (formy) bez nutnosti modifikovat kompilátor.

Ok, to beru. To ale není vlastnost syntaxe, to je věc toho, jakým způsobem pracuje interpreter/kompiler.

I když LISP neznám, docela mě bije do očí tvrzení, že síla LISPU je v syntaxi, která ale nehraje žádnou roli, protože ji jde on-the-fly změnit  ;)

Druhá věc potom je, jestli tohle náhodou nebyla výhoda v jisté době a jiné jazyky ji už nedotáhly, přičemž mají jiné výhody... Jestliže např. jazyky pro CLI (.NET, mono) mají možnost on-the-fly přeložit zdroják a poté ho v rámci téhož programu spustit, nedává mi to úplně stejné možnosti i bez (sorry za to...) opruzu se závorkama?*

(znovu opakuju, že LISP neznám, takže se rád nechám přesvědčit, že umí něco, co např. ony CLI jazyky ne - ale potřeboval bych to polopaticky a pokud možno na konkrétním příkladě...)

-----
* teoretickou možnost on-the-fly pozměnit překladač tak, že místo závorek můžu psát třeba P a K je sice prima sranda, ale je to i k něčemu praktickému?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 28. 03. 2011, 20:08:44
LISP = Language Intended for Smart People, ale k tomu inteligencí méně obdaření jedinci nemohou dojít nikdy ;-)

Dosť bolo teórie o tom aký je lisp úžasný jazyk, je mi jasné že LISP je z pohľadu teórie veľmi flexibilný, ale je lisp použiteľný aj v praxi? Mohol by sem nejaký znalec jazyka LISP napísať čo konkrétne sa dá v LISPe robiť? aké sú pre LISP frameworky knižnice, prostredia atď. či pre lisp existuje nejaký základný framework, nejaké frameworky na tvorbu GUI, MVC webové frameworky, entreprise frameworky, ORM frameworky, Frmeworky na prácu s grafikou, multimédiami, hrami atď. a či pre lisp existuje podobný archív knižníc ako napr. CPAN pre perl? Čo sa týka vývojového prostredia v akých IDE sa vyvýjajú LISPové aplikácie? Je pre lisp nejaké RAD vývojové prostredie, ktoré by umožňovalo podobne rýchly vývoj aplikácií ako NetBeans, IntelliJ IDEA, alebo Visual Studio? Keby som si vybral LISP znamenalo by to že by v tom programátori dokázali písať aplikácie rýchlejšie a za nižšiu cenu ako v .NET alebo Jave?

Stále si nerozumíme. LISP je jazyk určený lidem k programování, ne cvičeným opicím k lepení kódu. :D
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 28. 03. 2011, 20:19:19

Druhá věc potom je, jestli tohle náhodou nebyla výhoda v jisté době a jiné jazyky ji už nedotáhly, přičemž mají jiné výhody... Jestliže např. jazyky pro CLI (.NET, mono) mají možnost on-the-fly přeložit zdroják a poté ho v rámci téhož programu spustit, nedává mi to úplně stejné možnosti i bez (sorry za to...) opruzu se závorkama?*

(znovu opakuju, že LISP neznám, takže se rád nechám přesvědčit, že umí něco, co např. ony CLI jazyky ne - ale potřeboval bych to polopaticky a pokud možno na konkrétním příkladě...)

-----
* teoretickou možnost on-the-fly pozměnit překladač tak, že místo závorek můžu psát třeba P a K je sice prima sranda, ale je to i k něčemu praktickému?

Nechci se vás nikterak dotknout, ale co vás tedy vede k polemizování o něčem, co dle svých vlastních slov neznáte?
Přeložit zdroják a pak ho spustit vám opravdu ani zdaleka nedává ty samé možnosti, jako je to v LISPu (mimochodem - tuto vlastnost nabízel už 8bitový BASIC na Atari 800XE).
Dále nechápu ty narážky na závorky. Když jsem přecházel z FORTRANu na C, měl jsem podobný pocit u C - samá závorka a samý středník.
Nevím - asi bych to přirovnal k práci v reálném a komplexním oboru. V tom reálném se dá nakonec spočítat to samé, co pomocí komplexních čísel, ale je to pracnější a méně elegantní, ale zato "bez toho opruzu s imaginárními čísly".
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 20:29:25
Nechci se vás nikterak dotknout, ale co vás tedy vede k polemizování o něčem, co dle svých vlastních slov neznáte?

Nedotkl. A jestli můžu poprosit, tykejte mi.

Já nepolemizuju, ale pokládám otázky. A ty otázky pokládám právě proto, že tu věc nevím a chtěl bych se o ní něco dozvědět.

Přeložit zdroják a pak ho spustit vám opravdu ani zdaleka nedává ty samé možnosti, jako je to v LISPu.

Jaké možnosti konkrétně? (bez jinotajů typu srovnání s reálnými a komplexními čísly prosím, já jsem jednoduchý člověk :)

Pokud mám možnost vygenerovat zdroják turingovsky kompletního jazyka a spustit ho *v rámci daného procesu*, nenapadá mě moc *praktických* věcí, které bych tímto způsobem nemohl udělat...

(pokud máte namysli nějakou abstraktní akademickou čistotu toho, jak to udělat, tak to řekněte rovnou a potom - pokud máte chuť a čas - ukažte nějaký konkrétní příklad něčeho, co jde napsat až překvapivě čistě oproti jiným moderním jazykům)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Daniel Novotný 28. 03. 2011, 22:07:05
myslím, že tady se jedná o narážku na LISPová makra.
jde o to, že příkazy LISPu jsou syntakticky (i sémanticky) LISPové listy (seznamy) a ty je možné on-the-fly generovat a spouštět. V makrosystému daného jazyka tak máte zároveň zabudovanou i možnost pustit libovolnou funkci jazyka a z toho vyplývá označení LISPu za "programovatelný programovací jazyk". Tímto způsobem je možné v LISPu nadefinovat svoje vlastní syntaktické konstrukce (formy) bez nutnosti modifikovat kompilátor.

Ok, to beru. To ale není vlastnost syntaxe, to je věc toho, jakým způsobem pracuje interpreter/kompiler.

I když LISP neznám, docela mě bije do očí tvrzení, že síla LISPU je v syntaxi, která ale nehraje žádnou roli, protože ji jde on-the-fly změnit  ;)

Druhá věc potom je, jestli tohle náhodou nebyla výhoda v jisté době a jiné jazyky ji už nedotáhly, přičemž mají jiné výhody... Jestliže např. jazyky pro CLI (.NET, mono) mají možnost on-the-fly přeložit zdroják a poté ho v rámci téhož programu spustit, nedává mi to úplně stejné možnosti i bez (sorry za to...) opruzu se závorkama?*

(znovu opakuju, že LISP neznám, takže se rád nechám přesvědčit, že umí něco, co např. ony CLI jazyky ne - ale potřeboval bych to polopaticky a pokud možno na konkrétním příkladě...)

můžete si v těch CLI jazycích nadefinovat svoji vlastní konstrukci typu "for" nebo "while"?

nemyslím teď vlastní funkci, ale konstrukci, kterou byste v programu vždy pohodlně zapsal jako (while podminka telo-cyklu) a ona se chovala jako while-cyklus, tedy podmínku vyhodnotila vždy při jejím testu znovu... a přitom by nešlo o věc zadrátovanou přímo v jazyce, ale věc, kterou jste si takto napsal sám. tak přesně tohle dovedou lispová makra, viz můj článek

http://www.root.cz/clanky/lispova-makra-aneb-programovatelny-programovaci-jazyk/
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 28. 03. 2011, 22:14:33
Jaké možnosti konkrétně? (bez jinotajů typu srovnání s reálnými a komplexními čísly prosím, já jsem jednoduchý člověk :)

Pokud mám možnost vygenerovat zdroják turingovsky kompletního jazyka a spustit ho *v rámci daného procesu*, nenapadá mě moc *praktických* věcí, které bych tímto způsobem nemohl udělat...

S Lispem teprve začínám, takže mi spousta souvislostí zatím uniká, ale zkusil jsem si jednoduchý tutoriál na http://lisperati.com/casting.html . Stačí, když si projdeš tím kurzem a dostaneš odpovědi na mnoho otázek.

Dnes mě mrzí, že jsem se tento jazyk začal učit až tak pozdě. Asi mě tenkrát odradily závorky a tečka-dvojice. Je velmi těžké změnit zažité paradigma programování, i když procedurálně se v Lispu dá také psát. To však nechci.

Příjemně mě překvapila možnost vyvíjet aplikaci bez editoru přímo v prostředí Lispu. Jakmile funkci odladím, je zakomponována v systému a mohu ji použít jako další stavební kámen aplikace. Také je možné přidat i automatizované testy, pokud je pro vývoj potřebuješ. Přirovnal bych to k Excelu, ale bez omezení daného plochou tabulky.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 28. 03. 2011, 22:24:57
můžete si v těch CLI jazycích nadefinovat svoji vlastní konstrukci typu "for" nebo "while"?

nemyslím teď vlastní funkci, ale konstrukci, kterou byste v programu vždy pohodlně zapsal jako (while podminka telo-cyklu) a ona se chovala jako while-cyklus, tedy podmínku vyhodnotila vždy při jejím testu znovu... a přitom by nešlo o věc zadrátovanou přímo v jazyce, ale věc, kterou jste si takto napsal sám. tak přesně tohle dovedou lispová makra, viz můj článek

http://www.root.cz/clanky/lispova-makra-aneb-programovatelny-programovaci-jazyk/

To je asi argument, který se uživateli CLI (který má podobné konstrukce k dispozici) asi těžko vysvětluje. Ano, je možné si nadefinovat vlastní while, if nebo switch. To není problém. Ale uživatelé CLI už takové prostředky mají. Nehledě k tomu, že se to týká spíš procedurálního stylu programování.

Pádnější by mohly být argumenty pro práci s datovými strukturami. Jednoduchost vytváření seznamů, objektů, jejich vzájemná komunikace, nativní paralelizace procesů, ladění,...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blizz 28. 03. 2011, 22:25:16
Stále si nerozumíme. LISP je jazyk určený lidem k programování, ne cvičeným opicím k lepení kódu. :D

A ako to súvisí s otázkou? Stále sa tu len teoretizuje, ale aká je využiteľnosť jazyka v praxi? Prečo keď je LISP taký perfektný jazyk, tak sa nepožíva vo vačšej miere? Ja som si tiež lisp vyskúšal, ale nenapadlo ma načo by som ho mohol použiť. vypisovalo to do konzoly nejaké písmená. Väčšinu knižníc ktoré robia niečo užitočnejšie si ajtak musím naprogramovať v inam jazyku a v lispe ich len pozliepať, neni potom náhodou skriptovanie v lispe len lepenie kódu?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 22:27:27
můžete si v těch CLI jazycích nadefinovat svoji vlastní konstrukci typu "for" nebo "while"?

nemyslím teď vlastní funkci, ale konstrukci, kterou byste v programu vždy pohodlně zapsal jako (while podminka telo-cyklu) a ona se chovala jako while-cyklus, tedy podmínku vyhodnotila vždy při jejím testu znovu... a přitom by nešlo o věc zadrátovanou přímo v jazyce, ale věc, kterou jste si takto napsal sám. tak přesně tohle dovedou lispová makra, viz můj článek

http://www.root.cz/clanky/lispova-makra-aneb-programovatelny-programovaci-jazyk/

Pominu, že jsem se ptal na něco praktického - a definovat si vlastní while mi zrovna moc praktické nepřijde :)

Ale i tak: nic, co by se nedalo zvládnout zmíněným překladem kódu on-the-fly. Jistě, můžete to mít za neelegantní. Ovšem to už jsme z oblasti "síla jazyka" v oblasti "elegantnost jazyka".

Ono totiž, pokud se nepletu (programovací jazyky nejsou žádné moje hobby) to, čemu říkáte "konstrukce" je obdoba toho, čemu se říká "konstrukce" třeba i v transparentní intenzionální logice - a od funkce se to liší právě tím, že to jde spustit. Takže pokud nejsem úplně mimo, tak mi vlastně říkáte, že LISP má něco, co se dá spustit. Ok. Ovšem to má např. i python a všechny CLI jazyky, jak jsem už říkal.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 22:29:38
To je asi argument, který se uživateli CLI [...] asi těžko vysvětluje.

Zatím to tak vypadá :)

Pádnější by mohly být argumenty [...]

Sem s nimi!
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 28. 03. 2011, 22:39:50
nemyslím teď vlastní funkci, ale konstrukci, kterou byste v programu vždy pohodlně zapsal jako (while podminka telo-cyklu) a ona se chovala jako while-cyklus, tedy podmínku vyhodnotila vždy při jejím testu znovu... a přitom by nešlo o věc zadrátovanou přímo v jazyce, ale věc, kterou jste si takto napsal sám. tak přesně tohle dovedou lispová makra, viz můj článek

http://www.root.cz/clanky/lispova-makra-aneb-programovatelny-programovaci-jazyk/

No, Scala se sice nepoužívá primárně v CLI (ikdyž běží i tam), ale pro zajímavost:
Kód: [Vybrat]
http://www.zorched.net/2009/04/26/scala-and-adding-new-syntax/
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 28. 03. 2011, 22:41:08
Ehm, špatný tag: http://www.zorched.net/2009/04/26/scala-and-adding-new-syntax/ (http://www.zorched.net/2009/04/26/scala-and-adding-new-syntax/)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 22:44:35
S Lispem teprve začínám, takže mi spousta souvislostí zatím uniká, ale zkusil jsem si jednoduchý tutoriál na http://lisperati.com/casting.html . Stačí, když si projdeš tím kurzem a dostaneš odpovědi na mnoho otázek.

Dík za tykání!

Popravdě řečeno, kdybych si měl procházet tutoriál každého jazyka, o kterém někdo tvrdí, že je to nejgeniálnější jazyk planety, nic jiného bych do smrti nedělal. Pokud mi ten člověk neumí polopaticky říct, v čem je ten jazyk tak geniální, tak je dost pravděpodobné, že až tak geniální nebude...

Je velmi těžké změnit zažité paradigma programování, i když procedurálně se v Lispu dá také psát.

Jasně, mně se třeba hodně líbí (co do principu) Prolog a na škole jsem zakopl třeba i o Haskell (ten už mě zas tak nenadchl). Určitě je super zkusit si jiný způsob myšlení, ale opět popravdě řečeno, kdyby za mnou někdo přišel, ať mu naprogramuju GUI aplikaci na ukládání poznámek, tak bych musel být trochu magor, abych hnedka sáhl po Prologu...

Příjemně mě překvapila možnost vyvíjet aplikaci bez editoru přímo v prostředí Lispu. Jakmile funkci odladím, je zakomponována v systému a mohu ji použít jako další stavební kámen aplikace. Také je možné přidat i automatizované testy, pokud je pro vývoj potřebuješ. Přirovnal bych to k Excelu, ale bez omezení daného plochou tabulky.

Jo, tenhle princip se mi taky moc líbí, ale to opět není vlastnost jazyka, to je vlastnost toho prostředí. Nejen, že mi hned vytanul namysli SmallTalk, ale třeba i v MacOSu se hodně podobným způsobem standardně řeší GUI (neukládají se nějaké definice, ale "živé" serializované objekty). Čili opět nic, co by nešlo (z důvodu oné magické "síly jazyka" udělat i jinde - akorát to třeba nikdo nepotřebuje...)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 28. 03. 2011, 22:55:09
A ako to súvisí s otázkou? Stále sa tu len teoretizuje, ale aká je využiteľnosť jazyka v praxi? Prečo keď je LISP taký perfektný jazyk, tak sa nepožíva vo vačšej miere? Ja som si tiež lisp vyskúšal, ale nenapadlo ma načo by som ho mohol použiť. vypisovalo to do konzoly nejaké písmená. Väčšinu knižníc ktoré robia niečo užitočnejšie si ajtak musím naprogramovať v inam jazyku a v lispe ich len pozliepať, neni potom náhodou skriptovanie v lispe len lepenie kódu?
Lisp svou základní syntaxí odradí hodně začátečníků. I mně se to stalo. Není vůbec jednoduché pochopit jeho možnosti a schopnosti a využít je ve svůj prospěch. Dá se v něm programovat i stylem známým z mnoha jiných jazyků, ale takové programy jsou často mnohem delší a méně efektivní, než by mohly být. Tato zkušenost odradí experimentátora od dalších pokusů a raději se vrátí k zažitým postupům.

Programování v Lispu se jen velmi těžko popisuje, protože programátor si vlastně vytváří pro každou aplikaci vlastní programovací jazyk přesně na míru. Potřebuji rozhodování se třemi větvemi (< = >) ? Mohu si ho nadefinovat. Potřebuji aritmetický průměr? Udělám funkci s jedním parametrem - seznamem. Výsledkem funkce může být opět seznam - průměr + směrodatná odchylka. Potřebuji index ke třetímu sloupci databáze? Udělám ho jako binární strom nebo jako B-strom dle preferencí.

Programátor není v Lispu svázán možnostmi použitého jazyka. Konstrukce, které mu chybí (algoritmické či datové) si jednoduše dotvoří podle potřeby.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 23:14:33
Lisp svou základní syntaxí odradí hodně začátečníků. I mně se to stalo.  [...] Programování v Lispu se jen velmi těžko popisuje [...]

No zas abysme nemluvili o voze a o koze - myslím, že je nás tady víc (ne-li všichni), kdo ví, že existují různá paradigmata a čím se vyznačují. Dost z nás asi i v některém neprocedurálním jazyce umí něco napsat. Takže asi není potřeba popisovat, že v Lispu je všechno seznam a jak je to boží...

Ta otázka je trochu o něčem jiném - skoro bych to až vulgárně-manažersky napsal takhle: a kdo si tím někdy vydělal nějaké slušné peníze? Je těch lidí víc než u jiných jazyků? A jestli ne, proč ne? Tam myslím blizzboz mířil a mně to nepřijde jako špatná otázka, zvlášť vzhledem k úvodní otázce tématu. Rozhodně by to neznamenalo, že je blizzboz přízemní tupec, který nechápe krásu LISPu apod...

Není vůbec jednoduché pochopit jeho možnosti a schopnosti a využít je ve svůj prospěch. [...] ale takové programy jsou často mnohem delší a méně efektivní, než by mohly být. Tato zkušenost odradí experimentátora od dalších pokusů a raději se vrátí k zažitým postupům.

No super, konečně něco konkrétního o nějakém prospěchu :) Takže v LISPu se (údajně) programuje rychleji, zdroják je kratší a výsledek efektivnější. Sice nechápu, proč by takové super vlastnosti experimentátora měly odradit, ale ok :) Pak nám tedy zůstává otázka, proč firmy, které lidem za programování platí, nechtějí, aby jejich zaměstnanci pracovali rychleji a výsledek byl efektivnější. Není to třeba špatným marketingem? ;)

Ale já na marketing nedám! Takže můžu se někde podívat na LISPový ovladač nějakého hardware (efektivita), nebo vidět nějaký projekt, který vyvinul nějakou boží aplikaci v LISPu za dobu, o které se těm zlým a hloupým uživatelům CLI ani nezdálo?

Velikost zdrojáku ok, to beru. Akorát mi ještě nikdy nikdo nedal žádné peníze za to, že aplikaci, kterou jsem pro něj napsal, má superkrátký zdroják :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 23:20:42
No super, konečně něco konkrétního o nějakém prospěchu :)

Pardon, omlouvám se, špatně jsem četl a reagoval na svoje čtení, ne na autora. Beru zpět - o žádném konkrétním prospěchu při použití LISPu zatím nic nezaznělo :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: stewe 28. 03. 2011, 23:25:49
Citace
No super, konečně něco konkrétního o nějakém prospěchu :) Takže v LISPu se (údajně) programuje rychleji, zdroják je kratší a výsledek efektivnější. Sice nechápu, proč by takové super vlastnosti experimentátora měly odradit, ale ok :) Pak nám tedy zůstává otázka, proč firmy, které lidem za programování platí, nechtějí, aby jejich zaměstnanci pracovali rychleji a výsledek byl efektivnější. Není to třeba špatným marketingem? ;)

dobra poznamka, ja som s lispom prebehol nejake tutorialy a mne sa zda, ze velmi dlho trva, kym cele to "myslenie" spravne pochopite a ste schopni ho aplikovat do praxe. lisp je sice flexibilny, ale prave flexibilnost prispieva k neprehladnosti a vyvoj v tom jazyku moze trvat dlhsie ako v "konvencnom", proceduralnom, jazyku. peniaze = cas. cim ste schopni dodat funkcne riesenie rychlejsie, tym lepsie pre vas, az na specificke pripady jazyk nezohrava ulohu. ja myslim, ze programovanie v lispe, ked naozaj nieco chcete naprogramovat, je zdlhavejsie ...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: stewe 28. 03. 2011, 23:28:33
dalsia vec je napr. znovupouzitelnost kodu, sice nieco mozete naprogramovat namieru, ale znova to niekde pouzit, s tym mozete mat urcite problemy, dlhsie to trva, musite to prekopat a podobne, co sa vam pri programovani typu "import java.util.*;" asi odpada :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 28. 03. 2011, 23:28:43
Nechtěl jsem do toho zasahovat, ale to, že je ten les závorek nečitelný, to je naprostý blud.

Takhle ostře jsem to myslím neformuloval, ale že mi Lisp přijde méně čitelný než některé jiné jazyky, je prostě fakt. Zvyknout se na to určitě dá, ale to se dá i na solva pasná s přehozenými znaky nebo s hrupkamy. Akorát můj mozek musí vynaložit větší námahu.

Základní rozdíl mezi tím vaším "metajazykem" Lisp a třeba céčkovými typy jazyků je ten, že v lispu má každý řádek hutný význam, natož céčkové zdrojaky jsou roztahané, plné deklarací a podobně. Tudíž z toho plyne, že kolikrát kratičká funkce napsaná v lispu dělá to samé, jako 100 řádků v céčku a časově pro pochopení té funkce a proletění 100 řádků to vychází na stejno, ne-li pro lisp na kratší dobu. V tom je ten Váš "závorkový problém" a kolikrát mám problém s čitelností v mých programech, třeba, když se používá více cyklů v maticích a potřebuji těch matic více a z firmy mi napíší třeba po půl roce, že je to třeba upravit... (foreachem to udělat nejde a prasácky to napsané taky není)

Jazyk C jsem ani nezmiňoval. To je úplně mimo dosah naší diskuse. Jsou ale jazyky, které nejsou plné deklarací ani roztahané, přestože jejich syntaxe je od Lispu vzdálená na míle daleko.

Prefix/infix/postfix neřeším. No comment, to není problém jazyka, ale Vás, omluvte mou prostořekost.

Pokud to má být narážka na moji vlastní nedostatečnost, tak to neberu a ne z toho důvodu, že by mě to nějak uráželo. Těžko totiž lze tvrdit například o programátorech v Haskellu, Concurrent Cleanu nebo SML, že by nebyli schopni používat všechny funkce v prefixu. To, že tyto jazyky umějí definovat vlastní infixové funkce (operátory) a že se toho zhusta využívá, podle mě svědčí o tom, že se to může hodit i vysoce inteligentním lidem. Pokud chcete tvrdit, že prefixový operátor je pro někoho stejně přirozený jako infixový (zvlášť pokud vyšel ze standardního školského prostředí), neberu Vám to. Ale chtěl bych takového člověka vidět.

Rozšiřitelnost a agnosticismus. No, já nevím, tento jazyk byl a zřejmě bude vždy pokusným prostředím pro konstrukty pro ostatní programovací jazyky. Razí teorii, která se mi velmi líbí a to: "Pokud máme tu možnost dát uživateli silné nástroje, tak mu je dejme." O tom svědčí samotná plná programovatelnost toho jazyka, možnost psaní maker, úprava všech částí REPLu. Vím, že určitě nastane připomínka: "A co bezpečnost jazyka?". Většina lidí, co v tom někdy něco lehce dělala o tom ani neví, takže to nemohou ani řešit nebo prostě na to nemají buňky. Zároveň takový "programátor" je cvičená opička, která se musí držet za ručičku, aby náhodou něco nepokazila.

Jistě, v Lispu lze simulovat leccos a zřejmě i vymyslet nějaký konstrukt, který zatím nikde jinde není (dnes už nicméně asi není důvod ty konstrukty testovat v Lispu, protože existuje spousta komfortních způsobů, jak rozšiřovat jazyky a zkoušet nové věci - interní DSL, kombinátorové parsery apod.). Nicméně v Lispu to je bez toho syntaktického cukru. Každopádně bych v Lispu chtěl vidět něco jako algebraický datový typ. Wikipedia tvrdí, že v Common Lispu jsou, nicméně jsem například nikde nenašel životaschopnou implementaci, která by byla verifikovatelná v čase překladu.

To, že je někdo super programátor, neznamená, že nedělá chyby a že je dobré (z praktického hlediska) za každou cenu nechat kód volně plynout bez jakýchkoli omezení. K Lispu mám respekt, ale (jak už jsem psal v jiných diskusích), považuji statické typy čím dál častěji za užitečnou vlastnost. A nevím, jestli declare z Common Lispu poskytuje typovou kontrolu třeba na úrovni Haskellu (zdravím přítele volnomyšlenkářského komiksu). Rád se nechám poučit.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: jehovista 28. 03. 2011, 23:39:41
Chapu to spravne tak, ze LISP je dnes uz vlastne jen prostredek k tomu, aby se mohlo par asocialnich zivlu vymezovat a placat se po ramenou?
P.S. S LISPem mam neminimalni zkusenosti a jako jazyk se mi libi, ovsem nektere vypady jeho priznivcu jsou opravdu smesne.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 28. 03. 2011, 23:53:16
považuji statické typy čím dál častěji za užitečnou vlastnost.

Taky jsem k tomu dospěl. A když mě chytla zoufalost, co že teda budu používat místo Pythonu, objevil jsem Boo :)

P.S. tímto příspěvkem nikoho k ničemu nevybízím a nic neprosazuju. Flame o statickém typování jsem si už jeden zažil a myslím, že jeden za život je tak akorát dost ;)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: jan.palencar 28. 03. 2011, 23:54:55
@Stewe Keby si napriklad pouzil Clojure tak zistis ze cely java.util.* nepotrebujes pretoze to tento jazyk ma sam v sebe ako zakladne konstrukty. Doporucujem pozriet http://rosettacode.org/wiki/Category:Programming_Tasks (http://rosettacode.org/wiki/Category:Programming_Tasks).

Kazdy jazyk vie specificky riesit dobre len urcitu podmnozinu problemov.
Vzdy je potreba si zvolit vhodny jazyk k danemu problemu. LISP ako taky ze si ten jazyk mozem napisat vlastny okolo problemu. Potazmo Clojure a to este bezi v JVMke.

Moja ziva skusenost je ze pri tvorbe posledneho projektu v Jave, som robil nasledovne kroky.
Preniesol som DATA z WS, Presunul ich cez vrstvy architektury, zmenil som stav a dal som o tom vediet spat. No a pri tomto som naozaj napisal hodne niecoho comu sa hovori boilerplate code.

GL.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 28. 03. 2011, 23:56:49
dobra poznamka, ja som s lispom prebehol nejake tutorialy a mne sa zda, ze velmi dlho trva, kym cele to "myslenie" spravne pochopite a ste schopni ho aplikovat do praxe. lisp je sice flexibilny, ale prave flexibilnost prispieva k neprehladnosti a vyvoj v tom jazyku moze trvat dlhsie ako v "konvencnom", proceduralnom, jazyku. peniaze = cas. cim ste schopni dodat funkcne riesenie rychlejsie, tym lepsie pre vas, az na specificke pripady jazyk nezohrava ulohu. ja myslim, ze programovanie v lispe, ked naozaj nieco chcete naprogramovat, je zdlhavejsie ...
Tohle mi připadá velmi trefné. Kvalitní zápis programu v Lispu je sice vývojově zdlouhavější, ale výsledný kód je výrazně kratší a je efektivnější. Záleží na prioritách.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 29. 03. 2011, 00:02:06
Kvalitní zápis programu v Lispu je sice vývojově zdlouhavější, ale výsledný kód je výrazně kratší a je efektivnější.

Efektivnější než co?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 29. 03. 2011, 07:44:50
Dosť bolo teórie o tom aký je lisp úžasný jazyk, je mi jasné že LISP je z pohľadu teórie veľmi flexibilný, ale je lisp použiteľný aj v praxi? Mohol by sem nejaký znalec jazyka LISP napísať čo konkrétne sa dá v LISPe robiť? aké sú pre LISP frameworky knižnice, prostredia atď. či pre lisp existuje nejaký základný framework, nejaké frameworky na tvorbu GUI, MVC webové frameworky, entreprise frameworky, ORM frameworky, Frmeworky na prácu s grafikou, multimédiami, hrami atď. a či pre lisp existuje podobný archív knižníc ako napr. CPAN pre perl? Čo sa týka vývojového prostredia v akých IDE sa vyvýjajú LISPové aplikácie? Je pre lisp nejaké RAD vývojové prostredie, ktoré by umožňovalo podobne rýchly vývoj aplikácií ako NetBeans, IntelliJ IDEA, alebo Visual Studio? Keby som si vybral LISP znamenalo by to že by v tom programátori dokázali písať aplikácie rýchlejšie a za nižšiu cenu ako v .NET alebo Jave?

Takove veci samozrejme existuji, ale nejsou zadarmo (LispWorks, Allegro CL). Co se tyce OSS knihoven, quicklisp.org. V podstate oboji uz tu padlo, co takhle precist si nejdriv poradne diskusi?

Jinak pokud budete mit dobre programatory, bude to rychleji a za nizsi cenu. Pokud budete mit lepice, vyjde to nastejno.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 29. 03. 2011, 07:51:27
Pominu, že jsem se ptal na něco praktického - a definovat si vlastní while mi zrovna moc praktické nepřijde :)

Vazne? Znate diskusi o "Elvis operatorech" v Jave? V Lispu je tohle otazka na 2 radkove makro. Ano, vlastnost je to neprakticka - dokud nenarazite na situaci, kdy se sakra hodi.

Je proste faktem, ze vhodna makra umoznuji zkratit a zprehlednit kod zpusobem, kterym to funkce (ani tridy) nedokazi.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: bedna 29. 03. 2011, 09:16:10
Tak to ukončeme. Na co se Lisp používá tu bylo řečeno. Jestli má tento jazyk smysl - asi má, jinak by nebyl stále dále vyvýjen pro komerční užití. (na příkladu Lispworks - asi si to musí někdo kupovat, z čeho by zaplatili vývoj? open source komunita to nedělá) A kdyžtak koukněte tu http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html (v další diskuzi), co se děje s Lispem. Že by si jej oblíbilo tolik studentů... :-) A kaněc filmá z mé strany.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: marwyn 29. 03. 2011, 09:50:51
LISP = Lost In Stupid Parenthesis, ale k tomu si musíte dojít sám, až Vás opustí to počáteční nadšení  ;D

LISP = Language Intended for Smart People, ale k tomu inteligencí méně obdaření jedinci nemohou dojít nikdy ;-)

Pokud vy programujete v LISPu, pak budete zřejmě výjimka potvrzující pravidlo.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 29. 03. 2011, 12:40:28
Tak jsem trochu googlil a zjistil jsem, ze krome zde zminenych uziti LISPu jsou i dalsi, jako je treba semanticky web, webove planovani (dovolena, letecke a jine prepravni spolecnosi), take ve vojenstvi (AI) apod. Sice jsem nenasel nijak zavratne komercni pouziti, ale existuje toho docela dost.

Nekdo na zahranicnich webech psal, ze zajem o programatory v LISPu neni. Nekno jiny zase psal o tom, ze firem neni mnoho, ale zato ty firmy, co jsou, neustale hledaji programatory v LISPu, protoze je jich nedostatek.

Take jsem cetl pomerne dobre prirovnani, ktere vyjadruje, proc vetsina lidi radsi voli Cecko nebo Javu pred LISPem. To prirovnani zni asi tak, ze vam nekdo da za ukol opravit auto a nabidne vam k tomu 2 sady naradi. Jedna sada obsahuje par jednoduchych naradi se kterymi se da auto docela snadno spravit (Cecko, Java). Druha sada obsahuje dily, ze kterych si muzete sestavit opravdu jedinecne a skvele naradi, se kterym si pak auto jednoduse spravite (LISP). Vetsina lidi si pak radsi vybere tu sadu prvni.

Krome tohoto prirovnani jsem take cetl nazory, ze vetsina lidi od LISPu odrazuje uplne jine mysleni, ktere se pri programovani pouziva. Zatimco v Cecku a Jave etc. se mysli tak, ze nejprve udelej krok A, pak B, pak C, D a nakonec E. Tak v LISPu to je spise udelej krok A, pomoci ktereho udelej krok B s jejichz pomoci udelej krok C a D abyses zaverem dostal az k E.

Spolu s temito duvody se pak uvadeji dalsi odrazovaci duvody, jako ze LISPovsky kod neni blizky lidske reci a jejimu zapisu, ze se s LISPem bezne nesetkavaji studenti ve skole, ze je malo pracovnich mist pro programatory v LISPu, atd.

Co rici zaverem. LISP se stava pouzivanejsim, jak je patrne z nekterych srovnavacich tabulek. Vice se take blizi doba vetsiho pouzivani ruznych druhu umele inteligence. Pro zajimavost muzu uvezt, ze jsem napriklad cetl, ze se chystaji takove webove sluzby, ze kazdy uzivatel bude mit sveho osobniho asistenta, ktery uzivateli bude navrhovat a planovat jeho pracovni a volny cas v zavislosti na tom, kde se uzivatel nachazi, kolik je v jeho miste hodin, co ma rad, jake ma povinnosti, jake ma charakteristicke vlastnost atd.

Mozna bych se mohl jeste zeptat, jestli tady na rootu je nekdo, kdo v LISPu programuje ve firme nejakou komercni vec, pripadne jestli je tu nekdo, kdo s LISPem pracuje na akademicke pude. A jestli muzete, tak bych vas poprosil, abyste napsali co ten program v LISPu bude delat - nejake konkretnejsi vysvetleni jeho vyuziti.

Diky


P.S. Ty jo kluci, co je to "flame". Prelozeno z anglictiny je to "plamen". To jako znaci plamennou diskusi? Jako ze to je fakt horka diskuse? Nebo jako ze se kolem tematu rozhori velka diskuse?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 29. 03. 2011, 13:32:11
Tak jsem trochu googlil a zjistil jsem. Co rici zaverem. LISP se stava pouzivanejsim, jak je patrne z nekterych srovnavacich tabulek.

Možná jsi použil špatné nástroje Googlu. Z jakých tabulek je patrné, že je Lisp stále používanější?

Já jsem našel něco jiného: http://goo.gl/DDBnR  (když si tam přidáš "C#", LISP úplně zmizí ze scény...)

A co se týče zaměstnání, tak třeba: http://goo.gl/RCfPf

Chapu to spravne tak, ze LISP je dnes uz vlastne jen prostredek k tomu, aby se mohlo par asocialnich zivlu vymezovat a placat se po ramenou?

Tak peprně bych to asi neřekl (ale zasmál jsem se, to jo :), ale ta diskuse tak vypadá :( Konkrétních argumentů jako šafránu, zato emotivních srovnání typu "jazyk pro programátory a ne pro cvičené opice", "reálná a komplexní čísla", "nářadí" habaděj...

Tak to ukončeme. Na co se Lisp používá tu bylo řečeno.

Ano :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 29. 03. 2011, 13:38:35
P.S. Ty jo kluci, co je to "flame". Prelozeno z anglictiny je to "plamen". To jako znaci plamennou diskusi? Jako ze to je fakt horka diskuse? Nebo jako ze se kolem tematu rozhori velka diskuse?

Nenazýval bych to zrovna flamem. To je jako by ses na srazu diskotékových DJs vyptával, co si myslej o Bachovi, jestli má smysl se jím zabývat a jestli má smysl učit se hrát na piáno. Asi takovou relevanci má diskuse o LISPu tady a asi stejný smysl má hádat se o tom tady s někým. Bacha přece dneska už nikdo neposlouchá, nikde na žádné dýze ho nikdo nehrál, je to dávno překonaný. A učit se na piáno je pitomost - je to nepřehledný, nemá to žádnej display, žádný LEDky, žádnej mixák v tom není, ale zato se budeš ztrácet v té hromadě bílých a černých kláves, vůbec to není intuitivní a je to mnohem komplikovanější, než pustit MP3 v přehrávači, tak co s tím. Sice si na tom můžeš zahrát co chceš, ale potřebuje to někdo k něčemu, když máš miliony hotových empétrojek?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 29. 03. 2011, 13:44:42
To je jako by ses na srazu diskotékových DJs vyptával, co si myslej o Bachovi, jestli má smysl se jím zabývat a jestli má smysl učit se hrát na piáno. Asi takovou relevanci má diskuse o LISPu tady

Další zajímavá poetická parela do sbírky :) Skoro se mi zdá, že LISP člověka naučí hlavně tohle :)

Smím se zeptat, proč diskuse o LISPu tady nemá smysl? Je tu zjevně dost lidí, kteří o programovacích jazycích něco ví, s několika mají vlastní zkušenosti, včetně nějakých neprocedurálních, a pravděpodobně mají za sebou nějakou tu informatiku na VŠ.

V jakém už jiném prostředí by diskuse o LISPu měla smysl? V tom citovaném kroužku asociálů?

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 29. 03. 2011, 14:07:33
To je jako by ses na srazu diskotékových DJs vyptával, co si myslej o Bachovi, jestli má smysl se jím zabývat a jestli má smysl učit se hrát na piáno. Asi takovou relevanci má diskuse o LISPu tady

Další zajímavá poetická parela do sbírky :) Skoro se mi zdá, že LISP člověka naučí hlavně tohle :)

Smím se zeptat, proč diskuse o LISPu tady nemá smysl? Je tu zjevně dost lidí, kteří o programovacích jazycích něco ví, s několika mají vlastní zkušenosti, včetně nějakých neprocedurálních, a pravděpodobně mají za sebou nějakou tu informatiku na VŠ.

V jakém už jiném prostředí by diskuse o LISPu měla smysl? V tom citovaném kroužku asociálů?

:)
Je informatika a "informatika" a VŠ a "VŠ" - dneska se "informatika" učí na každé "VŠ", jinak by se jim tam nikdo nehlásil, protože přece informatika dneska frčí.
Asi jo - asi nejlépe v tom kroužku asociálů. Nejlepší je se samozřejmě o tom pobavit a nejlépe názorně s někým, kdo se tím zabývá. Ale takových zas tak moc není. Druhou možností je vzít si nějakou učebnici - třeba Practical Common Lisp - a dokopat se k tomu, že si to člověk sám vyzkouší a prostuduje si řešení jiných. A že to ze začátku třeba nemusí být ono - když se lidi, jako je např. Alan Kay vyjadřují o LISPu jako o jediném programovacím jazyku, který by stálo za to zachovat, pokud by všechny ostatní měly zaniknout, pak to rozumného člověka naťukne, že to asi opravdu stojí za prozkoumání, když už nic jiného.
Ostatně pochybuji, že existuje člověk, který by po prvním pohledu na LISP zajásal, co to je za geniální věc. Když už jsme u těch poetických přirovnání - LISP prostě není ten typ ženské, co na první schůzku přijde jen v kalhotkách a hned roztáhne nohy. Ale až k tomu konečně dojde, tak to zase stojí za to. ;D
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 29. 03. 2011, 14:20:13
Je informatika a "informatika" a VŠ a "VŠ" - dneska se "informatika" učí na každé "VŠ", jinak by se jim tam nikdo nehlásil, protože přece informatika dneska frčí.

Aha, takže teď se navíc budeme ještě kádrovat. Ach jo. No tak třeba já mám MU Brno - je to dostatečná kvalifikace pro to, aby mi mohla být sdělena aspoň ta nejtriviálnější zásvětná tajemství tohodle hermetického kroužku?

Nejlepší je se samozřejmě o tom pobavit a nejlépe názorně s někým, kdo se tím zabývá.

Sorry, ale tady platí to, co jsem psal výš - IMHO jestli nkdo neumí srozumitelně vysvětlit alespoň základní věci v pár větách, tak to pravděpodobně ani nestojí za zkoumání...

když se lidi, jako je např. Alan Kay vyjadřují o LISPu jako o [...]

Než se mlátit po hlavě citáty slavných, tak to už asi raději ta poetická přirovnání...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 29. 03. 2011, 14:48:00
Já jsem našel něco jiného: http://goo.gl/DDBnR  (když si tam přidáš "C#", LISP úplně zmizí ze scény...)

Zvlastni. Pridal jsem tam Java, a dostal jsem take klesajici trend. I kdyz jestli to nebude tim, ze v praci kolikrat hledam reseni pro C# na Google, kdyz programuji v Lispu, tak ani necekam, ze neco najdu.

Konkrétních argumentů jako šafránu, zato emotivních srovnání typu "jazyk pro programátory a ne pro cvičené opice", "reálná a komplexní čísla", "nářadí" habaděj...

Jako muzeme diskutovat konkretni aspekty. Me se treba hodne v CL libi system restartu (i kdyz jsem ho zatim nepouzil), a to je takova vec, ktera se bezne nezminuje. Co by te zajimalo? Vysvetleni konkretnich vyhod je zabavnou formou podane na http://landoflisp.com/ (http://landoflisp.com/).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 29. 03. 2011, 15:01:49
Jako muzeme diskutovat konkretni aspekty. Me se treba hodne v CL libi system restartu (i kdyz jsem ho zatim nepouzil), a to je takova vec, ktera se bezne nezminuje. Co by te zajimalo? Vysvetleni konkretnich vyhod je zabavnou formou podane na http://landoflisp.com/ (http://landoflisp.com/).

No tak zase takovouhle formou to nemusím mít :)

Co by mě konkrétně zajímalo? Ta nejzákladnější otázka: proč bych měl Lisp použít? To mi to opravdu někdo neumí říct v deseti větách a přidat k tomu relevantní důkazy?

Přijde za mnou člověk a řekne "Naprogramuj mi aplikaci na XY". Měl bych použít Lisp? Pro která XY? Proč? Bude ten program rychlejší, stabilnější, uživatelsky příjemnější, budu ho mít rychleji napsaný, bude snadnější jeho nasazení na běžném OS, bude se lehčeji udržovat, bude kód srozumitelnější pro někoho, kdo přijde po mě, bude kód znovupoužitelnější?

Chápej, mně taky přijde pěkný, že program a data jsou totéž, takže si můžu nakrásně vzít funkci, smazat každou druhou operaci a poté tu takhle upravenou funkci spustit, ale ať přemýšlím, jak přemýšlím, ještě jsem to nikdy nepotřeboval (a to jsem už programoval hodně ulítlý věci, včetně třeba migrace spouštěného kódu po síti na jiný stroj apod.) - natož, aby to ocenil nějaký potencionální zákazník.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 29. 03. 2011, 15:38:06
No tak zase takovouhle formou to nemusím mít :)

Kdybys kliknul na odkazy v tom komiksu, tak by ses mozna i neco dozvedel. Nicmene..

Co by mě konkrétně zajímalo? Ta nejzákladnější otázka: proč bych měl Lisp použít? To mi to opravdu někdo neumí říct v deseti větách a přidat k tomu relevantní důkazy?

Ja myslim, ze Lisp se da pouzit opravdu na cokoliv, i kdyz jine programovaci jazyky mohou byt pro nektere veci vhodnejsi. Zalezi na tom, co jak umis. Nevim, co jsou "relevantni dukazy". Kazdy ti bude tvrdit, ze prave ta jeho volba byla pro jeho projekt ta dobra.

Ptas se jako programator, nebo kapitalista? Programator by se mel spis ptat, proc by se mel Lisp trochu naucit. Z mnoha duvodu ano. Kapitalista by se mel spis ptat, zda ma programatora v Lispu. Pokud ano, at to necha na nem. Pokud ne, na odpovedi nezalezi.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 29. 03. 2011, 15:52:23
Kdybys kliknul na odkazy v tom komiksu, tak by ses mozna i neco dozvedel. Nicmene..

Ptám se naprosto srozumitelně: umíš výhody Lispu uvést v deseti větách a přidat relevantní důkazy? Nechci na nic klikat, nechci se Lisp učit, nechci poslouchat citáty slavných. Je to tak složité?

Nevim, co jsou "relevantni dukazy".

No tak to je pak opravdu těžké... Co třeba odkaz na šéfa nějaké firmy, jak říká, že po přechodu od C# na Lisp zvýšili produktivitu práce na dvojnásobek? Co třeba odkaz na nějaký projekt, který v Lispu realizoval za pár dní něco, co se jiná srovnatelně velká skupina lidí snažila dělat měsíce? Co třeba odkaz na akademický projekt, v rámci kterého se (zjevně díky Lispu) podařilo udělat něco, do čeho se do té doby nikomu nechtělo (protože neznal hermetické tajemství Lispu)?

Ptas se jako programator, nebo kapitalista? Programator by se mel spis ptat, proc by se mel Lisp trochu naucit.

Moc nechápu, jaký v tom je rozdíl, když oba mají (resp. měli by mít) ten samý cíl: pracovat rychle, efektivně, kvalitně a komfortně, ale ok, ptám se tedy raději jako programátor: zkusil jsem c, c++, objective C, javu, python, boo, prolog, haskell, maličko tuším, co je to lambda kalkul a transparentní intenzionální logika. Co tak zásadně nového mě naučí lisp (především oproti prologu, haskellu a zmíněným formalismům)?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 29. 03. 2011, 16:22:04
Co tak zásadně nového mě naučí lisp (především oproti prologu, haskellu a zmíněným formalismům)?

Makra.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 29. 03. 2011, 16:27:12
Makra.

A co je na nich tak zásadně nového?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 29. 03. 2011, 17:08:00
Makra.

A co je na nich tak zásadně nového?

Je to dalsi zpusob abstrakce, tj. zpusob jak zkratit program. Vlastne je to spis meta-abstrakce - umoznuji tvorbu dalsich abstrakci a jejich implementaci (a DSL atd.). Treba cely CLOS lze napsat pomoci maker.

Je to asi jako kdyby jsi doted programoval v Basicu a ptal se, co tak zasadniho ti prinesou funkce, kdyz znas GOSUB.

Ale chapu, ze je to obtizne pochopitelne - ja s tim mel take potize (Common Lisp jsem se zacal ucit predevsim kvuli systemu restartu, ktery me zaujal, paradoxne jsem ho zatim nepouzil).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 29. 03. 2011, 17:27:15
A co je na nich tak zásadně nového?

Je to dalsi zpusob abstrakce, tj. zpusob jak zkratit program.
[/quote]

Aha.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: stewe 29. 03. 2011, 17:43:28
co je to system restartu? v skratke, nechce sa mi to hladat, (poprosim nejaky hutny vycuc :))

dakujem
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 29. 03. 2011, 18:05:20
co je to system restartu? v skratke, nechce sa mi to hladat, (poprosim nejaky hutny vycuc :))

dakujem

Nevim, jestli to bude 100% spravne (nepouzivam to), ale zhruba receno, Common Lisp ma krome klasickych vyjimek take conditions a restarty. Pokud vyvolate condition (coz je typicky v pripade chyby), na ni muze reagovat condition handler nekde vyse v hierarchii volani. Pekne na tom je, ze vyvolani condition neznici zasobnik. Z te chyby se pak muze ten condition handler zotavit restartem (ma na vyber nekolik moznosti), coz je vlastne volani kodu ktery se nechal zaregistrovat v hierarchii volani nekde mezi puvodcem condition a condition handlerem. Nejvyssi condition handler je typicky REPL loop interpretu, takze pokud vam bezi program, a vyhodi condition, muzete si ji rovnou za behu odladit. :-)

To ma spoustu vyhod - kod se muze lepe zotavit, protoze se neztrati zasobnik; neni treba znovuvyhazovat vyjimky, aby se dospelo nekam, kde se s chybou da nalozit; kod ktery rozhoduje, jak s chybou nalozit, nemusi resit, co konkretne udelat (je rozdeleny condition handler a restart).

Vice informaci http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html (http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 29. 03. 2011, 18:18:35
Tak jsem trochu googlil a zjistil jsem. Co rici zaverem. LISP se stava pouzivanejsim, jak je patrne z nekterych srovnavacich tabulek.

Možná jsi použil špatné nástroje Googlu. Z jakých tabulek je patrné, že je Lisp stále používanější?

No zase takovy vzestup to neni, ale da se tam sledovat nejaky pokrok a nebo zajem o LISP:
http://regulargeek.com/2010/01/14/googles-go-and-apple-development-are-gaining-ground/ (http://regulargeek.com/2010/01/14/googles-go-and-apple-development-are-gaining-ground/)

http://langpop.com/ (http://langpop.com/)
to je zase z yahoo, vyhledavani na ruznych serverech. V uvodnich tabulkach se LISP statecne drzi, zatimco v tech dalsich nize nekde vyrazne vynika pred jinymi jazyky.

Nutno si ale precist napr. tento clanek:
http://en.wikipedia.org/wiki/Measuring_programming_language_popularity (http://en.wikipedia.org/wiki/Measuring_programming_language_popularity)

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

Take by me zajimalo nejake konkretni pouziti LISPu, jeho vyhod a prednosti. Treba v robotice. Mam tuseni, ze jsem cetl, ze je LISP selfprogramming language. Kdyby treba nekdo napsal: "Tak jsem na VS programoval robota, ktery delal to a to. Zkousel jsem ruzny veci a jazyky az jsem dosel na LISP a tam jsem to vykoumal tak, ze ten robot se uci z toho, co dela a vidi a sam si preprogramovava svuj vlastni system chodu. Takze ted dela to a to uplne jinak, chytreji a efektivneji a pritom se porad uci."

Ale mozna bych se mel podivat spise na nejake jine webove stranky, treba stranky skol nebo jine, ktere se zabyvaji umelou inteligenci, kdyz teda LISP se pouziva hlavne v teto oblasti.

Každý... tahá pilku. (asi nekde v lese v horach) A pak si dá ... co mu přinese bernardýn v soudku na krku. ;D
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: jehovista 29. 03. 2011, 18:41:33
Take by me zajimalo nejake konkretni pouziti LISPu, jeho vyhod a prednosti. Treba v robotice. Mam tuseni, ze jsem cetl, ze je LISP selfprogramming language. Kdyby treba nekdo napsal: "Tak jsem na VS programoval robota, ktery delal to a to. Zkousel jsem ruzny veci a jazyky az jsem dosel na LISP a tam jsem to vykoumal tak, ze ten robot se uci z toho, co dela a vidi a sam si preprogramovava svuj vlastni system chodu. Takze ted dela to a to uplne jinak, chytreji a efektivneji a pritom se porad uci."

Ale mozna bych se mel podivat spise na nejake jine webove stranky, treba stranky skol nebo jine, ktere se zabyvaji umelou inteligenci, kdyz teda LISP se pouziva hlavne v teto oblasti.

Studoval jsem umelou inteligenci a robotiku a LISP se tam(podle me) pouzival proto, ze se dal bez nejakych serepeticek zapisovat rovnou algoritmus(nejake prohledavani stavoveho prostoru apod.) a vsichni studenti meli stejnou startovaci caru. Vic bych za tim nehledal.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 29. 03. 2011, 20:26:00
Studoval jsem umelou inteligenci a robotiku a LISP se tam(podle me) pouzival proto, ze se dal bez nejakych serepeticek zapisovat rovnou algoritmus(nejake prohledavani stavoveho prostoru apod.) a vsichni studenti meli stejnou startovaci caru. Vic bych za tim nehledal.
A proč ne? Copak v Lispu nejde udělat neuronová síť a k ní i proces učení?

Zmínil bych jednu z výhod Lispu proti ostatním jazykům: Velmi rychlé prototypování. Každá funkce se dá ladit zvlášť a přímo do aplikace lze zakomponovat testování včetně automatických testů.

A důkazy? Ty jsou na http://lisperati.com , nebudu je opisovat.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: jehovista 29. 03. 2011, 20:52:30
Studoval jsem umelou inteligenci a robotiku a LISP se tam(podle me) pouzival proto, ze se dal bez nejakych serepeticek zapisovat rovnou algoritmus(nejake prohledavani stavoveho prostoru apod.) a vsichni studenti meli stejnou startovaci caru. Vic bych za tim nehledal.
A proč ne? Copak v Lispu nejde udělat neuronová síť a k ní i proces učení?

Zmínil bych jednu z výhod Lispu proti ostatním jazykům: Velmi rychlé prototypování. Každá funkce se dá ladit zvlášť a přímo do aplikace lze zakomponovat testování včetně automatických testů.

A důkazy? Ty jsou na http://lisperati.com , nebudu je opisovat.
Ale vzdyt se shodujeme.
P.S. Ze zemi ovladnou mravenci a zachrani nas LISP je opravdu uderny argument.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 29. 03. 2011, 21:06:10

Take by me zajimalo nejake konkretni pouziti LISPu, jeho vyhod a prednosti. Treba v robotice. Mam tuseni, ze jsem cetl, ze je LISP selfprogramming language. Kdyby treba nekdo napsal: "Tak jsem na VS programoval robota, ktery delal to a to. Zkousel jsem ruzny veci a jazyky az jsem dosel na LISP a tam jsem to vykoumal tak, ze ten robot se uci z toho, co dela a vidi a sam si preprogramovava svuj vlastni system chodu. Takze ted dela to a to uplne jinak, chytreji a efektivneji a pritom se porad uci."

Ale mozna bych se mel podivat spise na nejake jine webove stranky, treba stranky skol nebo jine, ktere se zabyvaji umelou inteligenci, kdyz teda LISP se pouziva hlavne v teto oblasti.

Každý... tahá pilku. (asi nekde v lese v horach) A pak si dá ... co mu přinese bernardýn v soudku na krku. ;D

Pokud máš povědomí o základních problémech AI, tak např. tady si můžeš prohlédnout jejich řešení v LISPu:
http://www.cs.washington.edu/research/metip/eaicl2.html

Pokud jde o ty roboty, tak tam se asi nejvíc uplatňují přednosti snadného prototypování, interaktivního vývoje a nenáročnosti LISPu. Zkrátka nadefinuješ si funkci pro zatočení a hned si ji zkusíš. Když něco nejde, opravíš a zkusíš znova. Odladěnou funkci pak použiješ dál. Ten kód co tvoříš je navíc dost hutný - něco ve stylu

Kód: [Vybrat]
(defun opposite (side)
  (if (eq side left) (right) (left)))

(defun turn (direction angle)
  (switch direction motor off)
  (switch (opposite direction) motor on)
  (delay (normalize-to-speed angle))
  (switch (opposite direction) motor off))

a hned vyzkoušíš (turn right (degrees 30)). Fakt je ten kus kódu tak šíleně nečitelný a nesrozumitelný, jak tu někteří tvrdí?
LISP je strašně jednoduchý a přitom mocný jazyk. Interpret LISPu se dá natlačit i do poměrně nenáročného HW toho robota, přímo za provozu pak můžeš měnit program, testovat nové funkce - žádná editace zdrojáku-překlad-upload do robota-zapnutí robota-vypnutí robota-a znova. Tahle vlastnost dost zvyšuje produktivitu práce. Navíc člověk nemá nutkání měnit najednou několik věcí.
No a pokud jde o to přeprogramovávání se na základě učení - není problém. Reakce robota na podnět senzorů se může generovat makrem na základě předchozích zkušeností atp...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 29. 03. 2011, 22:23:54
Zkrátka nadefinuješ si funkci pro zatočení a hned si ji zkusíš. Když něco nejde, opravíš a zkusíš znova. Odladěnou funkci pak použiješ dál. [...] přímo za provozu pak můžeš měnit program, testovat nové funkce - žádná editace zdrojáku-překlad-upload do robota-zapnutí robota-vypnutí robota-a znova. [...]  Reakce robota na podnět senzorů se může generovat makrem na základě předchozích zkušeností atp...

Všechno tohle můžu v libovolném interpretovaném jazyce, který má eval... A dál?

Ten kód co tvoříš je navíc dost hutný [...] Fakt je ten kus kódu tak šíleně nečitelný a nesrozumitelný, jak tu někteří tvrdí?

Kód: [Vybrat]
(defun opposite (side)
  (if (eq side left) (right) (left)))

(defun turn (direction angle)
  (switch direction motor off)
  (switch (opposite direction) motor on)
  (delay (normalize-to-speed angle))
  (switch (opposite direction) motor off))

A o co méně hutný je tenhle (Boo, Python)?
Kód: [Vybrat]
def opposite(side):
  if side==left: return right
  return left

def turn(direction,angle):
  switch(direction, motor, off)
  switch(opposite(direction), motor, on)
  delay(normalizeToSpeed(angle))
  switch(opposite(direction), motor, off)

Co z toho je srozumitelnější je samozřejmě věcí názoru, zvyku, atd., nikomu necpu svůj názor, že to první je daleko méně přehledné.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: skunkos 29. 03. 2011, 22:27:45
Broukoide, nic proti Tvému příspěvku jako celku, ale zejména body 5 a 6 mi přijdou trošku jako výmluvy či vytáčky.

K bodu 5: Souhlasím s tím, že párování závorek pomůže "rozšifrovat" zdrojový text, nicméně to neznamená, že se tím program stane výrazně čitelnějším. Čitelnost znamená "kouknu se a vidím" a ne "otevřu si editor, jezdím kurzorem sem a tam a hledám".

K bodu 6: Prefixová notace sice má svoje výhody, ale zrovna u aritmetických operací a podobných akcí to prostě je handicap. Výhody existují, ale například násobnou aplikaci operátoru lze v jiných jazycích vyjádřit pomocí fold/reduce. S problémem infixových funkcí si z jazyků, které jsem viděl, asi nejelegantněji poradily Haskell a Scala.

Zkrátka a dobře, vždycky je to něco za něco. Obrovská flexibilita LISPu je výhoda, o tom není sporu. Problém "metajazyků" typu LISP je dvojí:

Za ten výraz metajazyky si naliskej.
Závorky jsou bezva věc, syntaktickej orgasmus. Oproi dialektům LISPu se můžou jít vaše siiisharpy zakopat. Opět si liskni.
Prefixová notace je intuitivně i kalkulativně nad ostatními notacemi. Přece říkáme: "sečteme čísla 2 a 5 a 8" spíše než "vezmeme číslo 3, k němu příčteme 5, poté vezmem onen výsledek a k němu přičteme 8", to je tedy pěkný rozdíl v délce. Liskněte si potřetí.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 29. 03. 2011, 22:31:44
Za ten výraz metajazyky si naliskej.
Závorky jsou bezva věc, syntaktickej orgasmus. Oproi dialektům LISPu se můžou jít vaše siiisharpy zakopat. Opět si liskni.
Prefixová notace je intuitivně i kalkulativně nad ostatními notacemi. Přece říkáme: "sečteme čísla 2 a 5 a 8" spíše než "vezmeme číslo 3, k němu příčteme 5, poté vezmem onen výsledek a k němu přičteme 8", to je tedy pěkný rozdíl v délce. Liskněte si potřetí.

Jestli má být tohle parodie asociálního milovníka Lispu, je to drsnější než Česká soda a South Park dohromady.  :D :D :D
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 29. 03. 2011, 22:33:49
Zmínil bych jednu z výhod Lispu proti ostatním jazykům: Velmi rychlé prototypování. Každá funkce se dá ladit zvlášť a přímo do aplikace lze zakomponovat testování včetně automatických testů.

To samé lze dnes dělat v Pythonu, Ruby, Scale, pokud netrváme na interaktivním interpretu, tak třeba v Perlu atd. Já mám pocit, že ten dojem výjimečnosti Lispu pochází velkou měrou z doby, kdy hlavními alternativami Lispu byly Fortran a Pascal.

Beru makra, která tady uváděl JS, využití vidím v DSL a možnosti monkey patchingu. Plus možná ty restarty, které asi moc programátorů nepoužívá. Beru jednoduchost syntaxe (využití bych místo robotů viděl spíš v botnetech apod.). Ale jinak mi přijde, že ty výhody jsou v praktickém využití sporné.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Ondřej 30. 03. 2011, 00:11:03
Lisp jsem měl pár semestrů na škole, ze začátku se mi nelíbil, pak se mi líbil a nakonec se mi už zase nelíbí. Nikdo jsem v tom nic extra velkého nenapsal, takže zmíním jen pár příkladů, které si pamatuji ze školy. Jsou to tedy spíš blbůstky, žádná velká věda.

Největší výhodou jsou podle mě makra, v ostatních oblastech asi není Lisp nijak unikátní. Ale makra jsou hrozně silná, kdybych v tom programoval víc, tak asi uvedu daleko lepší příklady, takhle si vzpomínám jen na pár trivialit.

Klasicky se pomocí maker programují jiné variantu ifu, třeba pravděpodobností if, který bere jako parametr číslo, které představuje hodnotu, s jakou pravděpodobností se má vyhodnotit „true“ větev. Takže něco takového:

(pif 40 a b)

S 40% pravděpodobností se vyhodnotí a, jinak b. Někde v C# bez maker by se to mohlo zapsat takto:

if(pr(40)) return a; else return b;

Nebo jsme programovali if2, který uměl výsledek vyhodnocení podmínky automaticky uložit do nějaké proměnné, třeba it:

(if2 (+ 1 2) it 0)

Vrátilo by to 3. Jinde by se asi napsalo něco jako if(it=1+2)… Docela zajímavé bylo makro, které umělo převádět rekurzivní funkce na iterativní verzi, pokud to šlo. Takže pokud bylo jednodušší napsat rekurzivní verzi než iterativní (třeba klasicky faktoriál), tak jste to mohli napsat rekurzivně a nechat to projet tím makrem.

Makra se pak často používají na vytvoření nějaké funkce na procházení nějaké datové struktury, třeba stromu. Ale na to jsou v běžných jazycích nějaká rozhraní Iterator a foreach. Ale můžu si třeba napsat zkráceninu za klasiku for(i=0;i<x;i++), takže budu mít třeba makra fori, které bere jen jeden parametr — x. Použilo by se to třeba takto:

(fori 10 (print i))

V jiných jazycích se to tuším často řeší nějakou metodou přilepenou na int, v C# jsem psal:

(10).times(i => print(i));

Podobně není problém napsat si třeba cyklus, který bude cojávímco… projíždět jen sudá čísla:

(for-even 5 (print i))

…a ono to vytiskne prvních pět sudých čísel. Lisp má třeba výraz when, což je if bez else větve. Tohle běžně programovací jazyky, pokud vím, nemají a i pokud by to Lisp neměl, opět není problém si napsat makro, které takový výraz realizuje.

Mohl bych si pomocí maker napsat vlastní logickou spojku, třeba „pokud jsou alespoň dva výrazy pravdivé, pak vrať true, jinak false“ a bude se vyhodnocovat líně. Tj:

(at-least-two t nil t (print 1))

Důležité je, že to (print 1) už se nevyhodnotí, tj. nikde se jednička nevypíše. Pokud třeba máte jazyk, který neumožňuje rozumně definovat přístupové metody pro atributy objektů, tak si můžete nadefinovat makro, které ty přístupové metody automaticky vytvoří. Něco jako:

(create-setters 'age 'name)
(create-getters 'age 'name 'job 'wtf)


…a to makro automaticky vytvoří metodu set-age, get-age apod.

Tohle jsou jen jemné příklady na makra, já sám v Lispu už pár let nic nenapsal, takže jsem musel hodně namáhat hlavu, abych si vzpomněl, k čemu to bylo dobré. Když tak ať nějaké víc hardcore příklady dá nějaký hardcore lispař ;-). Jo a omlouvám se, pokud všechno tohle lze běžně v jazycích dělat, já už moc přehled nemám, skončil jsem nakonec u C# a tam tyhle krávovinky fakt dělat nejdou.

Jo a podstatná věc — makra jsou normálně součástí jazyka, když jsem třeba mluvil o makru, které převede rekurzivní funkci na iterativní verzi, tak není nijak potřeba předávat tu definici jako string. A pro jistotu — hlavní rozdíl mezi makrem a klasickou funkcí je, že makro hned nevyhodnotí své atributy, to bylo vidět u toho příklad at-least-two. Proto jdou makrem zapsat věci, které by klasickou lispovou funkcí zapsat nešly.

Nicméně programovat si vlastní makra není žádná sranda, člověk musí zvládat v hlavě vyhodnotit jednak makro a jednak ten samotný následný funkční kód. Neberu v potaz, makra, která vytváří další makra :-). Plus klasické chytáky jako dvojí vyhodnocení a symbol capture.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 00:38:54
Díky, Ondřeji, konečně něco konkrétního!

Pokud třeba máte jazyk, který neumožňuje rozumně definovat přístupové metody pro atributy objektů, tak si můžete nadefinovat makro, které ty přístupové metody automaticky vytvoří. Něco jako:

(create-setters 'age 'name)
(create-getters 'age 'name 'job 'wtf)


…a to makro automaticky vytvoří metodu set-age, get-age apod.

Tohle třeba v Pythonu jde úplně v pohodě (dekorátory, setattr). Jak moc to jde (za běhu) v CLR jsem nezjišťoval, protože jsem to zatím prostě nepotřeboval. Ale předpokládám, že to půjde minimálně od doby, co CLR umí extensions, nebo jak se to jmenuje - prostě rozšiřování už existující třídy. (Mimochodem, škoda že kromě tohodle neopsali z Objective C raději dědění konstruktorů...)

Když tak ať nějaké víc hardcore příklady dá nějaký hardcore lispař ;-).

No já na to pořád čekám a pořád nic... Asi se hardcore lispaři s ne-hardcore ne-lispaři nemají potřebu bavit...

Docela zajímavé bylo makro, které umělo převádět rekurzivní funkce na iterativní verzi, pokud to šlo. Takže pokud bylo jednodušší napsat rekurzivní verzi než iterativní (třeba klasicky faktoriál), tak jste to mohli napsat rekurzivně a nechat to projet tím makrem.

No tak tohle konečně zní opravdu dobře a zajímavě! A to makro to umělo OBECNĚ? (jde to vůbec? Teď nějak nemám buňky nad tím přemýšlet...)

Jo a omlouvám se, pokud všechno tohle lze běžně v jazycích dělat, já už moc přehled nemám, skončil jsem nakonec u C# a tam tyhle krávovinky fakt dělat nejdou.

No až na ten převod na iterativní algoritmus tam všechno (nějak) dělat jde.

A pro jistotu — hlavní rozdíl mezi makrem a klasickou funkcí je, že makro hned nevyhodnotí své atributy, to bylo vidět u toho příklad at-least-two. Proto jdou makrem zapsat věci, které by klasickou lispovou funkcí zapsat nešly.

No to zas taková bomba není - když už by to teda člověk tak strašlivě chtěl, stačí mu napsat něco podobného ICallable, co bude zároveň zapouzdřovat zdroják... Jasně, není to tak elegantní - no a? Copak je to něco, co používáme denně pětkrát?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 01:05:31
Podle mě převod rekurzivní funkce na iterativní je to samé co optimalizace "tail rekurze" (což Lisp snad dělá automaticky, ne?). A C# má (podobně jako jiné jazyky) podporu pro líné vyhodnocování. Ty příklady jsou ale na demonstraci docela fajn.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 01:15:50
Ty příklady jsou ale na demonstraci docela fajn.

Mně přijde, že ty příklady nedemonstrují nic jiného než by demonstroval (print '(print 1)). Někdo je z toho asi paf, to mu neberu, ale já bych chtěl vědět, k čemu tak zázračnému se to teda dá použít...

Tak nějak tuším, že by to mohlo být fajn pro různé automatizované dokazování korektnosti nebo tak něco, ale zatím jsem se tady jenom dozvěděl, že je to jako nářadí, kterým si můžu poskládat nářadí, se kterým bych možná mohl něco vytvořit, pokud bych byl geniální tak, jak obvyklý lispař je... ...a pak teprve bych mohl vytvořit třeba... nářadí.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 30. 03. 2011, 01:19:05
Všechno tohle můžu v libovolném interpretovaném jazyce, který má eval... A dál?

Nikdo přece netvrdí, že ne. :) Já osobně upřednostňuji v těchto případech spíš Forth (v jednoduchosti ho asi sotva něco může porazit), protože potřebuji maximální výkon a jednoduchost.

A o co méně hutný je tenhle (Boo, Python)?
Kód: [Vybrat]
def opposite(side):
  if side==left: return right
  return left

def turn(direction,angle):
  switch(direction, motor, off)
  switch(opposite(direction), motor, on)
  delay(normalizeToSpeed(angle))
  switch(opposite(direction), motor, off)
Co z toho je srozumitelnější je samozřejmě věcí názoru, zvyku, atd., nikomu necpu svůj názor, že to první je daleko méně přehledné.

Mně stále není jasné, oč ti jde. Tazatel chtěl vidět příklad použití v AI - dal jsem mu odkaz. Ptal se, jak se LISP uplatní třeba v robotice nebo obecně v embedded - dal jsem ten nejtriviálnější příklad, jaký si lze vymyslet. Kdyby chtěl napsat nějaký algoritmus adaptivního řízení u toho robota, nebude to žádný problém. Neříkám, že v jiných jazycích to nepůjde (asi to nepůjde tak snadno a přímočaře jako v LISPu, ale pokud to bude interpretovaný jazyk, tak by to nějak jít mohlo). A jestli někomu připadá důsledné dodržování logiky (operace operand1 operand2 atd.) méně přehledné, než hromada různorodých konstrukcí s různým pořadím operací a operandů a dalších symbolů, podle toho, co chce zrovna vyjádřit (chce-li zavolat funkci, napsat podmínku, definovat novou funkci nebo napsat smyčku či zadat nový datový typ atp.), tak je to jeho boj. Z hlediska jednoduchosti překladače a možnosti generování kusu programu jiným kusem programu je samozřejmě smysluplnější lispovský přístup, z hlediska čitelnosti programu někým, kdo daný jazyk neovládá, zase to druhé (diskusi o tom, měla-li by být čitelnost programu pro daný jazyk neznajícího člověka považována za jednu z nejdůležitějších vlastností programovacího jazyka, bych raději ponechal stranou).
LISP má výhodu jednoduchosti a tvárnosti. Lispař nebude nikdy v diskusích žehrat na to, že mu v něm chybí nějaká vlastnost - tu výjimky, tu rozhraní, tu vícenásobná dědičnost, nebo když už se to tam dodá, tak že je to vymyšlené nešikovně. Stačí se podívat na net - takovýchto debat o Pythonu ale i třeba o C++ je tam plno - z čehož plyne, že argument, že každému přece stačí syntaktické konstrukce naservírované autory jazyka, není zas tak pádný, za jaký se vydává.
Krom toho lispař není odkázaný na to, až se někdo uráčí portovat překladač na platformu, na níž ho potřebuje on, protože překladač LISPu je otázkou pár stovek řádků v C (jež obvykle bývá dostupné pro vše).

Zkrátka LISP má oproti jiným jazykům tu výhodu, že je to velmi jednoduchý jazyk, v němž prakticky cokoli se dá udělat jednoduše. Resp. dá se to zařídit tak, aby to bylo jednoduché, pokud se to hodí. Když bude lispař chtít intenzivně pracovat s řetězci, zařídí si to tak, aby to šlo snadno. Když bude chtít pracovat s vektory a maticemi, zařídí si to tak, aby to šlo snadno. Bude-li potřebovat programovat web, přizpůsobí si to tak, aby to šlo snadno. Nikdy nebude muset žehrat na to, že tuto věc autoři udělali lépe a tamtu zase hůře, že toto se dělá snáze a tamto zase kostrbatěji, že v jazyku mu chybí to nebo tohle nebo že to mělo být uděláno jinak. Pokud má někdo jako náplň práce bouchat v PHP weby jak komunisti paneláky, tak LISP asi zrovna moc neocení. Stejně tak ho asi moc neocení numerický matematik, jehož náplň práce je řešení různých PDE.
LISP je jazyk vhodný pro lidi, kteří musejí/chtějí řešit širokou škálu různorodých problémů, kdy je žádoucí mít možnost přizpůsobit si jazyk tomu kterému problému, který jím zrovna řeší.
Ta argumentace "ale tohle se dá udělat v XYZ taky.. a dál?" mi není moc srozumitelná. A co jako? Zmínil jsi jakýsi jazyk Boo. To se můžu mnohem smysluplněji ptát - k čemu je to dobré? Všechno, co zvládne Boo, se zvládne v LISPu taky a přinejmenším stejně jednoduše. O opačné inkluzi se dá s úspěchem pochybovat. Tak na co Boo? :D

Prostě - nemůžu si pomoci, ale pořád cítím takový ten styl oponování "tohle umí Python taky, tohle se dá v C# udělat taky - sice to je mnohem kostrbatější, ale jde to, dokázal jsem, že to nějak taky jde, hahá!" Přece nikdo netvrdí, že by to nemělo jít. Fór je v tom, že lispař na to nepotřebuje žádné dekorátory a pokud je nemá, tak vymýšlet kostrbaté konstrukce, které to nějak napodobují, a nebude naříkat "Mimochodem, škoda že kromě tohodle neopsali z Objective C raději dědění konstruktorů...)". To mně spíš připadá groteskní ta snaha dokazovat, že ty moderní jazyky taky dokáží většinu toho, co 50 let starý LISP - pomocí různých dekorátorů, iluminátorů a výbušných modulátorů - pokud je autoři jazyka implementovali. :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 01:29:05
Mně stále není jasné, oč ti jde.

Chci se konečně dozvědět, proč je Lisp jazykem pro programování, zatímco jiné jazyky jsou pro cvičené opice ke slepování kódu...

Ptal se, jak se LISP uplatní třeba v robotice nebo obecně v embedded - dal jsem ten nejtriviálnější příklad, jaký si lze vymyslet.

Podle toho, co tady zatím čtu a co jsem si teda (páč argumenty tady nezaznívají) byl donucen přečíst o Closure, mám ještě triviálnější odpověď: Lisp se v robotice uplatní úplně stejně jako jakýkoliv jiný moderní jazyk. Ovšem při používání Lispu se naučíte druhé lidi ohromovat poetickými báchorkami o Lispu.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 01:45:26
Ta argumentace "ale tohle se dá udělat v XYZ taky.. a dál?" mi není moc srozumitelná. A co jako? Zmínil jsi jakýsi jazyk Boo. To se můžu mnohem smysluplněji ptát - k čemu je to dobré? Všechno, co zvládne Boo, se zvládne v LISPu taky a přinejmenším stejně jednoduše. O opačné inkluzi se dá s úspěchem pochybovat. Tak na co Boo? :D

Ovšem já jsem taky netvrdil, že Boo je jazyk pro opravdové chlapy, kteří si umí narozdíl od cvičených opic pomocí nářadí udělat nářadí. A že se dá o nějakých jazycích s úspěchem pochybovat.

Pokud by se mě někdo ptal, proč Boo, tak bych řekl, že proto, že je stručný, přehledný, má k dispozici poměrně slušnou standardní knihovnu (CLI), poskytuje bezešvou integraci s jedním z komerčně nejpoužívanejších jazyků (C#) a tímpádem je k němu obrovské množství knihoven. Ovšem nenabízí nic, co by se nedalo najít jinde.

Takže Boo například proto, že si v něm napíšu webservice s veškerým komfortem (testovací webová stránka, generování wsdl, atd. atd.) asi tak za dvě minuty včetně prohledání dokumentace a výsledek bude na tři řádky kódu. Nemám pocit, že jsem pánem světa a proto tady nehulákám, že by se dalo s úspěchem pochybovat o tom, že v Lispu by šlo totéž stejně elegantně, rychle a efektivně. Místo toho jsem se snažil zjistit, co teda jde v Lispu tak elegantně - a zatím jsem se nedozvěděl v podstatě nic... Škoda, protože v blízké době budu potřebovat napsat nějakou věc na zpracování dat a přemýšlel jsem o prologu, ale pro CLI mě žádný neoslovil. Třeba by Lisp byl zajímavý, ale po přečtení téhle diskuse na něj nemám ani trochu chuť :(
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 01:57:54
Lispař nebude nikdy v diskusích žehrat na to, že mu v něm chybí nějaká vlastnost - tu výjimky, tu rozhraní, tu vícenásobná dědičnost, nebo když už se to tam dodá, tak že je to vymyšlené nešikovně.

No tohle už je úplná zoufalost... Takže vlastně ostatní jazyky jsou špatné proto, že mají něco, co Lisp nemá, takže v Lispu si to člověk musí sám napsat, čímžpádem pak nenadává na to, že to někdo jinej napsal blbě.


Aneb: člověk programující ve strojovém kódu nikdy nebude žehrat na to, že nemá výjimky, ale jenom nuly a jedničky - když bude vyjímky chtít, tak si je napíše tak, jak sám potřebuje, protože nuly a jedničky jsou to nejmocnější a nejjednodušší, co se dá počítači naservírovat.

Uf.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: bedna 30. 03. 2011, 07:46:39
Vůbec to není hardcore lisp, normální 2 makra a jedna funkce.

Kód: [Vybrat]
(defmacro <- (fact &rest predicates)
  `(lambda (variables) (when (and ,@(mapcar 'evaluate-vars predicates))
                         (set-variable variables
                                       ',(first fact)
                                       (evaluate variables ',(second fact))))))

(defun evaluate-vars (pred)
  `(,(first pred) (evaluate ,(second pred) variables)
                  (evaluate ,(third pred) variables)))

(defun evaluate (variables symbol)
  (let ((value (get-variable variables symbol)))
    (if value value symbol)))

A tímto se vytváří regulátorový jazyk. Jelikož to vyhodí lambdu, tak se regulátor neprovádí, ale můžeš si jej pěkně ukládat kam chceš.

Kód: [Vybrat]
(defmethod evaluate-loop ((regulator-control regulator-control))
  (dolist (regulator (regulators regulator-control))
    (force regulator (variables regulator-control))))

A pomocí této metody funguje celý regulátorový jazyk. Žádné parsování, žádné peklo jménem eval (mimochodem, kdybych použil eval, tak to nebude fungovat), jak jinak modifikovat (<- (nastav-rychlost 10) (leva-rychlost 100) (prava-rychlost 100)) na funkce?

Není to vyjádření docela hutné? Ukázal byste mi někdo obdobný kód, načrtnutý? (bez detailů, jak vypadá ten jazyk).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 08:19:57
No tohle už je úplná zoufalost... Takže vlastně ostatní jazyky jsou špatné proto, že mají něco, co Lisp nemá, takže v Lispu si to člověk musí sám napsat, čímžpádem pak nenadává na to, že to někdo jinej napsal blbě.

Vy jste ta makra stale nepochopil. Treba moje oblibena jsou anaforicka makra, viz http://www.bookshelf.jp/texi/onlisp/onlisp_15.html (http://www.bookshelf.jp/texi/onlisp/onlisp_15.html) (vubec ta knizka je uzitecna, ta prave ukazuje silu tech maker). Pointa skutecne je, ze muzete jazyk prizpusobit problemu, ktery resite - a tim odpadnou problemy, jestli uz autori jazyka pridali nejakou vami zadanou vlastnost do specifikace. Makra jsou ten duvod, proc Lispari snaseji tu syntaxi - a protoze jsou obvykle docela chytri, mel byste pochopit, ze jim to zrejme za to stoji.

(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.)

Tri dalsi pekne nedocenene vlastnosti CL jsou podle me:

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.

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.

Zobecnene promenne - v podstate jde o neco podobneho jako lvalue v C, akorat si muzete definovat vlastni.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 08:57:59
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.

Ve Scale to je s Pythonem prakticky srovnatelné: http://hestia.typepad.com/flatlander/2009/02/scala-for-c-programmers-part-4-multiple-return-values.html (http://hestia.typepad.com/flatlander/2009/02/scala-for-c-programmers-part-4-multiple-return-values.html).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Ondřej 30. 03. 2011, 11:00:51
No tak tohle konečně zní opravdu dobře a zajímavě! A to makro to umělo OBECNĚ? (jde to vůbec? Teď nějak nemám buňky nad tím přemýšlet…)
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í.

Obecně si ale můžete vytvořit jakýkoliv modifikovaný defun, který nějak přežvýká vámi definovanou funkci. Třeba jsme ještě psali makro defun-counter, který udělal jen to, že na začátek definice funkce vložil příkaz na inkrementaci nějakého globálního čítače. Mohl jste tak mít přehled, kolikrát byla která funkce za celou dobu zavolána. Nebo si můžu vytvořit makro, které mi vytvoří definici celé třídy :-). Pecinovský tomu myslím říkal přepravka, něco jako

(create-crate 'point '(x y))

a ono to vytvoří třídu point s atributy x a y a přístupovými metodami pro tyto atributy.

 
No až na ten převod na iterativní algoritmus tam všechno (nějak) dělat jde.

No to zas taková bomba není - když už by to teda člověk tak strašlivě chtěl, stačí mu napsat něco podobného ICallable, co bude zároveň zapouzdřovat zdroják... Jasně, není to tak elegantní - no a? Copak je to něco, co používáme denně pětkrát?
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 :-).

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ší.

Podle mě převod rekurzivní funkce na iterativní je to samé co optimalizace "tail rekurze" (což Lisp snad dělá automaticky, ne?). A C# má (podobně jako jiné jazyky) podporu pro líné vyhodnocování. Ty příklady jsou ale na demonstraci docela fajn.
Jak jsem psal výše, myslím, že Lisp to nemá; Scheme ano. Co se týče podpory pro líné vyhodnocování — dá se v C# nějak napsat funkce(a+b) tak, aby se to a+b vyhodnotilo až uvnitř funkce? Nebo možná lepší příklad: mám funkci print(), která vypíše na obrazovku "ahoj". Můžu nějak napsat funkci fun tak, abych potom mohl napsat fun(print()) a na obrazovku se nevypsalo "ahoj"? Bez modifikace printu. V C# znám jen yield, ale to mi AFAIK nepomůže.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Ondřej 30. 03. 2011, 11:15:32
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.
Já bych s tímto v podstatě souhlasil, jen bych ubral procenta. On je problém, že většina programátorů se s makry nesetkala, nebo případně jen s Céčkovými makry. 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. Takže jo, tenhle model mi taky přijde lepší, ale ubral bych tak na nějakých 90 %. Už jsem se i já sám přistihl, že jsem si v jiném jazyce řekl, že na tohle bych si v Lispu napsal krásné makro :-). Co to bylo už nevím.

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?
Do evalu obvykle strkáte string, kdežto makra v Lispu jsou na úrovni syntaxe jazyka. Navíc následné použití maker je řádově jednodušší než parsovat předaný string. 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í. Nemůže napsat něco takového:

(let ((a 10))
  (eval "(print a)"))


…protože a je definováno v let-prostředí a eval se vyhodnocuje ve vlastním a pokud nenajde vazbu na "a", tak pokračuje v globálním prostředí, kde ten symbol nenajde. Ale myslím, že tam šlo předat v argumentu odkaz na aktuální prostředí, ale ruku do ohně za to nedám. Pokud tomu kódu nerozumíte, tak bych to mohl přepsat takto:

a = 20;
function fun() {
  a = 10;
  eval("print a");
}


V tom evalu by se mělo vytisknout 20, protože eval nevidí zpět do prostředí té funkce a hledá "a" v globálním prostředí. Nezkoušel jsem to, tak snad to mám správně, ještě by mi zpětně zhoršili známku z paradigmat programování :-)).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 12:09:29
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.

Usuzuji z toho, jak odpovidate, ze nevite, o cem je rec, kdyz se rekne makra v Lispu. To je cele. 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.

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.

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.

Pak by vam melo byt jasne, ze Forth jistou formu maker ma (IMMEDIATE slova). A ze to je uzitecna vlastnost.

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í...

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

Jaktože nezavedly? V CLI se dá vracet pole objektů a v Boo se s tím dá pracovat úplně stejně jako v Pythonu:

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.

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

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.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Ondřej 30. 03. 2011, 12:17:48
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 ;)
To taky nevím, protože v Pythonu jsem nenapsal ani řádku, takže nevím, co tam lze a co ne. 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é :-). 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á.

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.
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ě.

ad to parsování: Jo, takhle je to asi stejné, já měl na mysli přímo ruční parsování toho stringu.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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]
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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á...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 13:59:28
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.

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.

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.

Knizka On Lisp, z ktere jsem odkazoval jednu kapitolu, je takovych prikladu plna (v kazde kapitole je takovy priklad). Stejna tak knizka Practical Common Lisp, z ktere jsem take odkazoval jednu kapitolu, dejme tomu http://www.gigamonkeys.com/book/practical-building-a-unit-test-framework.html (http://www.gigamonkeys.com/book/practical-building-a-unit-test-framework.html). 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.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Ondřej 30. 03. 2011, 14:20:58
@Michal: Hlavní rozdíl asi bude ten, že makra v Lispu kód hodně zpřehledňují, kdežto úlety s evalem a programování ve stringu kód hodně znepřehledňuje. Nechce se mi zkoumat, jestli jsem schopný napsat makro, které nepůjde žádným způsobem simulovat v evalu, to ať tady napíše někdo jiný. Ale i kdyby šlo evalem napsat vše, co lze napsat makrem, tak to pro mě není použitelný ekvivalent k makrům, protože použití evalu je prostě hnusné (z důvodů, které jsem už napsal). Souhlasím tedy s poslední větou od JS: "Otazka je, jak bude vypadat ten zapis." 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.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 30. 03. 2011, 14:32:30
Kdyz uz jsme u tech knizek. Chtel jsem se zeptat, jestli, krome zde jiz uvedenych knizek, by zde nekdo nemohl uvest dalsi dobre knizky o LISPu, nebo vyukove kurzy ci tutorialy. A to pokud mozno v cestine. A kdyz ne v cestine, tak spon teda v english.

Neco jsem teda nasel na wikipedii a nebo pri googleni. Ale stejne vsechno tam neni a urcite mi nejake vyborne zdroje unikaji.

Jo a treba sem dejte i nejake odkazy na zajimave stranky o LISPu (cesky i english).

Rad bych si lisp osahal trochu vic, nez jsem mu venoval (ty 3 dny).  :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Ondřej 30. 03. 2011, 14:40:10
Miroslav: No on asi nikdo nečekal argument typu „no ale v Pythonu si můžu napsat interpret Lispu, takže Lisp nic navíc nemá“.

novomente: http://phoenix.inf.upol.cz/esf/materialy.htm hledej „Paradigmata programování 1, 2“ Je to o Scheme, ale to je skoro jedno. Další materiály jsou tady: http://krupka.inf.upol.cz/2010Z/PP3.html (Doplnění základní výbavy Common Lispu) a tady http://krupka.inf.upol.cz/2008L/ (Od Scheme ke Common Lispu)

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 14:41:42
Aha. A pomocí evalu se nedá boilerplate kód generovat. Proto eval není makro. Hm. Tak jo.

Teoreticky ano, ale moc prakticke to neni. Lispova makra prakticka jsou (uz jen kvuli backquote). Znovu vam rikam, prectete si o tom neco!

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

Ja Python umim celkem slusne, byl to muj hlavni a nejoblibenejsi jazyk asi 10 let, nez jsem zacal ucit (pred 2 lety) Common Lisp. V Pythonu napisete veci na 5 radku, protoze ma velmi dobre navrzene vestavene typy, operatory a funkce. To Lisp v mnoha smerech tak dobre navrzenou zakladni knihovnu nema.

Ovsem existuji zkratka pripady, ktere napisete v Lispu na 5 radku a v Pythonu na mnohem vic, protoze v Lispu muzete definovat makra. Proste, Lispova makra umoznuji ten kod zkratit vic nez o konstantu.

A mel byste tomu zatim verit, protoze narozdil ode me, ktery muze Common Lisp a Python porovnat, vy to srovnani udelat nemuzete, dokud si o Lispu trochu vic nezjistite.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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!
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 14:50:12
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ýš)?

Klidek, jen tam chybi "se" (zacal ucit).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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čí...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 14:59:37
To je první potěšující zjištění tohoto tématu: že takovíhle povýšení rozumbradové na VŠ neučí...

To jste spis vy, vy se hadate o necem, co neznate. :-)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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ě.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 15:26:43
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á.

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.

A kdyz vam dam kratky priklad, budete kontrovat, ze to neni potreba, protoze na tom kratkem priklade to udelate v Pythonu take. Samozrejme. Stejne jako algoritmus se slozitosti 1000*n^2 bude pro mala n pomalejsi nez algoritmus se slozitosti 2^n.

Krome toho, ja proste o lidech predpokladam, ze jsou dospeli a tedy bud vedi, a pokud nevedi, dokazi si aspon trochu veci nastudovat, a pokud nejsou schopni toto, muzou se zeptat. Myslim, ze bych se jich opacnym predpokladem spise dotkl.

Fakt by to chtelo trochu soudnosti. Nemam zadnou povinnost vam tu neco vysvetlovat. Sam jste videl, ze kdyz se me nekdo slusne zeptal, co jsou restarty, vysvetleni jsem mu podal.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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".
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 16:03:59
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:

Tezko vam muzu ukazat makra v jazyce, ktery je nema. Proto je tezke najit priklad, ktery by vam vyhovoval. Je to asi jako snazit se vysvetlit takto OOP - nejdriv musite chapat, co je objekt.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 16:13:53
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.

A zase ne. :-) Proste, podobne jako OOP, neda se to vysvetlit jednoduchym prikladem (nekomu, kdo programuje proceduralne). Je to potreba trosku procist. A fakt, kdyz byste se alespon trochu zacetl do odkazovane literatury, ktera padla, zjistite, ze tech jednoduchych i slozitejsich prikladu je tam popsano hafo.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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í.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 16:31:31
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

No vidite. Tohle jste mohl udelat ve chvili, kdy jsem zminil slovo "makro". Ruku na srdce - kdybych vam ten link poslal, precetl byste si jej?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Blaazen 30. 03. 2011, 16:32:40
Kód: [Vybrat]
(print (+ 1 1))
To je hnus!

Se nedivím, že ani po sto příspěvcích nikdo nevěří, že je tohle ten pravý jazyk.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 16:34:59
No vidite. Tohle jste mohl udelat ve chvili, kdy jsem zminil slovo "makro". Ruku na srdce - kdybych vam ten link poslal, precetl byste si jej?

Myslíte, že má smysl vám vysvětlovat, že jsem se z toho linku nic nového nedozvěděl? Nemá, že?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: bedna 30. 03. 2011, 16:52:53
Tedy příklad, který by se v praxi v Lispu nepoužil, protože se v lispu používá prefixová notace. Jedná se o makro, které přebírá různý počet parametrů, všechny je vyhodnotí a vrátí, jestli jsou všechny pravdivé, či ne.

Kód: [Vybrat]
(defmacro my-great-and (&rest predicates)
  `(and ,@predicates))

#|
(my-great-and (= x 1) (< y 3) (= (+ z 3) 4))
=> expanduje na (AND (= X 1) (< Y 3) (= (+ Z 3) 4))
|#

ps.: #| ... |# označuje komentáře

Jak by se to udělalo v Pythonu? Nebo v C, C++, C# či Ruby? Chci vidět kód, ať to můžeme porovnat a ne do sebe kopat a nadávat si.

Zadání je doufám jasné, o jeho použitelnosti nemá význam diskutovat (obměnu pro praxi si určitě každý dokáže vymyslet sám) funkce, konstrukt nebo co já vím co, kterému se předají podmínky a on vrací pravda, když jsou všechny splněny nebo nepravda, pokud alespoň v jednom případě některá splněna není.

(chci se vyhnout psaní například v C bool result = ((x == 1) && (y < 3) && ((z + 3) == 4)))
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 30. 03. 2011, 16:56:19
 :o ... jee ... jen jsem ... chtel jsem ....  ??? prosim vas ... rad bych se ...  :o ... ale ja jen ... jen okamzik ...  :P ... proste ... chtel bych se ...  :-[ ... chtel jsem se jen zeptat ...  :o ... oops sorry, sorry, uz mlcim  :-X

Tedy panove, sleduju tu debatu uz treti den a jakozto zakladatel tohodle tematu i jakozto tazatel, musim zasahnout. Puvodne jsem si rikal, ze to necham bezet volne a do ty diskuse, ktera se postupne promenila v hadku, nebudu zasahovat, abych taky jednu nechyt. Ale tohleto jsem fakt necekal.

@Mirku: nevadi, kdyz ti budu tykat? Jednou si mi rekl, tykejte mi, ajtaci si tykaji. Uz si ani nevzpominam, jestli jsem rekl, ze tykani mi nevadi. Tak to reknu ted, nevadi mi to. Tak tedy Mirku, ze se porad tak nejak vsemu branis. Ptal ses uz tolikrat na to co jsem chtel vedet i ja a misto konkretni odpovedi, kterou potrebujes vedet, se ti dostalo jinych odpovedi, ktery ti nic nereknou. Proc se treba nezeptas jinak. Proc se na to nepodivas z jineho uhle pohledu a nepouzijes uplne jinou otazku, s jejiz pomoci byses dobral odpovedi na to, co chces vedet?

a

@JS: doufam ze ti ode mne taky nevadi tykani. Prosimte, ze se porad snazis tomu Mirkovi vysvetlit veci zpusobem, o kterem uz je zjevne, ze to Mirkovi proste takhle nevysvetlis. Zkus se treba zeptat, co chce Mirek presne vedet. Zeptej se nejprve nejaky otazky, ktery ti priblizi vec tak, abys byl schopen tomu Mirkovi to lepe vysvetlit. No a jestli na to treba nemas chut, to treba vzit z jineho konce, proc treba nereknes, ze to nemuzes vysvetlit, protoze proste nevis jak a neodkazes Mirka na jineho LISPare, ktery by to treba Mirkovi vysvetlil lepe.

Take jsem se chtel dozvedet prakticke vyuziti LISPu. Mezi tim, co probihala diskuse zde na rootu, jsem trochu googloval a procital jine stranky (zejmena teda v anglictine). Nedozvedel jsem se teda to, na co jsem se zde v diskusi ptal. Ale zato jsem se dozvedel, ze LISParu je skutecne malo. Prikladu pouziti LISPu je asi dost, ale clovek se musi tomu LISPu venovat a musi si ho trochu osahat, aby zjistil, jake ma vyhody a nevyhody (a vzhledem k jeho jednoduchosti bych si troufnul rict, ze to neni otazka na mesice, ale spis na tydny nebo mozna dny).

Taky jsem zahajil tady na rootu Anketu, ktera ma zjistit, v jakych jazicich programatori navstevujici root programuji. To abych vedel, na ktere otazky se mi tady dostane dobrych odpovedi. Zatim teda vedou jazyky C, C++, taky JAVA, PHP, Python a JavaScript. Celkem zatim hlasovalo asi kolem 200 lidi a z toho se LISPu venuje jen 7 lidi. Takze jsem uprime rad, ze se do nasi diskuse zapojil treba Ondrej, ktery zde mel opravdu konkretni priklady. A take jsem rad, ze se zapojil i JS (a jini), ktery sem dal opravdu dobre odkazy, ktere si jeste ted procitam. A samozrejme jsem vdecny za kazdy prispevek, ktery prinese neco noveho.

Co rici zaverem. Asi trochu pogoogluju a poDMOZuju a doufam, ze sem take prinesu neco noveho anebo se zeptam na dalsi otazky, ktere by (nejen mne) zajimaly.

P.S. Tato diskuse ma za sve 4 dny uz kolem 2700 precteni, takze zajem o toto tema je.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 17:14:03
Kód: [Vybrat]
(print (+ 1 1))
To je hnus!

Se nedivím, že ani po sto příspěvcích nikdo nevěří, že je tohle ten pravý jazyk.

Zapomnel jste zminit tech 50 let. :-)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 17:14:55
Jedná se o makro, které přebírá různý počet parametrů, všechny je vyhodnotí a vrátí, jestli jsou všechny pravdivé, či ne. [...] Jak by se to udělalo v Pythonu?

To není žádný praktický příklad. (ano, skutečně trvám na tom, že není) Praktický příklad je "načti deset čísel ze souboru a najdi největší" nebo "připoj se na webservice googlu a stáhni mapu brna" nebo "vykresli GUI s obrázkem Majora Gagarina" nebo "vyřeš problém batohu, přičemž data jsou v souboru ve formátu XY".

Nemůžete přece chtít, aby se v nějakém jazyce implementovaly obraty s něčím, co daný jazyk v takové podobě vůbec nemá. Co se např. myslí "parametrem"? Co se myslí jejich proměnným počtem? To je asi jako by se C++kař zeptal Objective-Cčkaře, jak se v Objective C udělá přetížená metoda - no prostě v C++kové podobě neudělá, používají se jiné obraty.

Takže co má být ty parametry? Výrazy zapsané ve stringu? Volatelné objekty? Integery? Filehandlery?

Pokud opravdu chcete, aby to vypadalo co nejvíc jako v tom lispu, tak by to opravdu musely být stringy, protože všechno ostatní by se samozřejmě vyhodnotilo před voláním - to jaksi Pythonu nemůžeme zazlívat, prostě jeho koncept je od lispu odlišný. A funkci, která projde všechny svoje parametry, pustí nad nima eval a vzájemně je pro-or-uje snad psát nemusím... Jenže to se vám nebude líbit, že to je něco jiného než v lispu - ano je - a to proto, že jste nepřišel s praktickým úkolem, ale lispovským cvičením nad lispovskými typy dat...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 17:18:50
@Mirku: nevadi, kdyz ti budu tykat? Jednou si mi rekl, tykejte mi, ajtaci si tykaji. Uz si ani nevzpominam, jestli jsem rekl, ze tykani mi nevadi. Tak to reknu ted, nevadi mi to. Tak tedy Mirku, ze se porad tak nejak vsemu branis. Ptal ses uz tolikrat na to co jsem chtel vedet i ja a misto konkretni odpovedi, kterou potrebujes vedet, se ti dostalo jinych odpovedi, ktery ti nic nereknou. Proc se treba nezeptas jinak. Proc se na to nepodivas z jineho uhle pohledu a nepouzijes uplne jinou otazku, s jejiz pomoci byses dobral odpovedi na to, co chces vedet?

Tykání v pohodě, naopak díky za něj!

Mno, je to docela dobrá připomínka, ale já holt prostě nevím, jak jinak položit naprosto triviální otázku...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 30. 03. 2011, 17:34:12
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í...

No vida - tak tedy Forth uznáváš. Ale jak bylo řečeno - Forth má s Lispem řadu věcí společnou:
- je minimalistický
- má neobvyklou syntaxi
- je neomezeně rozšiřitelný
- je interpretovaný, resp. "částečně kompilovaný"
- je "čistý" (to plyne z toho minimalismu)

Forth je ryze procedurální jazyk: základní lexikální jednotkou jsou tu slova, jež nevracejí žádné hodnoty, pouze operují (převážně) nad zásobníkem; teoretický základ: dvouzásobníkové automaty
Lisp je funkcionálně orientovaný jazyk: základní lexikální jednotkou jsou tu funkce, jež vždycky vracejí nějakou hodnotu; teoretický základ: lambda počet
Základní strukturou, kol níž se všechno točí, je ve Forthu zásobník. Zásobník návratových adres, zásobník parametrů a slovník, který lze považovat za třetí zásobník - zásobník slov. Zásobníky tedy ve Forthu slouží jak k ukládání dat, tak k ukládání programu.
Základní strukturou, kol níž se všechno točí v Lispu, je seznam. Slouží k ukládání dat a díky vlastnosti zvané homoikoničnost také k ukládání programu - program není nic jiného než seznam seznamů jmen funkcí a jejich parametrů.
Syntaxe obou jazyků je přímým důsledkem trvání na základním principu chápání a manipulace s daty a kódem: v případě Forthu postfixová notace přirozená pro zásobníkové operace (oddělené bílým znakem), v případě Lispu prefixová notace přirozená pro seznamy (v Lispu zapisovaných do závorek).
Forth i Lisp svou vyjadřovací sílu získávají díky zobecněním, jež lze provést díky důslednému dodržování základního (zásobníkového/seznamového) konceptu: Forth díky definujícím slovům a přímým slovům, Lisp díky makrům. Důsledkem toho je většina Forthu napsána ve Forthu a většina Lispu v Lispu a důsledkem toho jsou překladače Forthu i Lispu velmi jednoduché a efektivní.

ALE:
Zatímco Forth je nízkoúrovňový jazyk, Lisp je jazyk vysokoúrovňový.
Ve Forthu se příjemně programují a ladí embedded zařízení, ale kámen úrazu je, potřebujeme-li něco abstraktnějšího. Forth je beztypovým jazykem; samozřejmě že je možné si dodefinovat datové typy a slova, jež dokáží s těmito datovými typy pracovat - ať už staticky nebo dynamicky a provádět nějakou typovou kontrolu a implicitní konverze. Ale o co vyšší úroveň se budeme pokoušet, tím víc to bude zastiňovat hlavní výhody Forthu: rychlost a miniaturnost. Jinými slovy - existují vhodnější nástroje k těmto účelům, než je Forth. Například Lisp, který tento handicap Forthu odstraňuje. Je stejně dobře rozšiřitelný, ale neoperuje s tak nízkoúrovńovými věcmi, stojí v abstrakci výše. Lisp operuje s poměrně obecnými objekty, jako jsou CDR a CAR (zjednodušeně řečeno ukazatel na data uzlu a ukazatel na další uzel), zatímco Forth operuje se zásobníkem tvořeným buňkami, přičemž buňka není nic jiného než n-tice bitů (obvykle 16 nebo 32) a nic víc. Forth je prostě standardizovaný zásobníkový "hypermakroassembler". Pokud se pokusíme zabstraktnit Forth už na této úrovni, začne dost rychle jeho elegance a jednoduchost mizet - příkladem takového pokusu je jazyk Factor.
Pokud se ptáš k čemu jsou v Lispu makra a kdo to kdy potřebuje a že se podobného efektu dá docílit i jinak, měl by ses u Forthu ptát úplně stejně - proč by někdo měl mít potřebu definovat si vlastní definující slova, k čemu by měla být dobrá immediate-slova (neboli direktivy) atp.

Lisp je prostě jazyk, který umožňuje při programování uvažovat podobným "meta-stylem", jako Forth, ale stojí na vyšší úrovni. Ve Forthu DUP prostě zduplikuje buňku tvořící tos, 2DUP zduplikuje 2 buňky tvořící tos. Pokud bychom měli na tos strukturu nebo pole, DUPem to nezduplikujeme. Budeme potřebovat vlastní DUP nebo DUP úplně přepsat s tím, že součástí každé položky bude i informace o její velikosti, případně další informace o zacházení s ní, a už se nebude chovat tak, jako ten "normální DUP". Tohle se v Lispu už neřeší. Když chci zkopírovat seznam, tak je jedno, čím je tvořen. Když chci odebrat poslední prvek, je jedno, jestli tím prvkem je reálné číslo, celé číslo nebo třeba binární strom.
Výhody, jež Forth nabízí nad úrovní Assembleru, nabízí Lisp nad úrovní srovnatelnou např. s Pascalem.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 17:43:18
No vida - tak tedy Forth uznáváš.

Ježkovanoho, to je už jak v mateřské školce...

Seš s Forthem? Já teda s Forthem nejsu! Já su teď s Lispem!

Co to proboha znamená "uznávat jazyk"? Když se vám nějaký jazyk líbí, tak si v něm programujte, ale když už ostatním nadáváte, že jsou cvičené opice, tak byste aspoň mohli umět dokázat svoje silná tvrzení o svém miláčkovi...

P.S.

# definovani whilu, ktery pri kazdem pruchodu testuje znovu podminku
i=0
def While(podminka,telo):
  while eval(podminka):
     exec telo in globals()
podminka1 = "i<3"
telo = "print i; i+=1"
While(podminka1,telo)

:)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 30. 03. 2011, 17:51:06
Mno, je to docela dobrá připomínka, ale já holt prostě nevím, jak jinak položit naprosto triviální otázku...
Mozna bych ti mohl pomoci. Zda se, ze je jasne, ze LISP je velice univerzalni jazyk. Takze v nem lze udelat obrovske, ale obrovske mnozstvi ruznych veci. Kdyz Ti nekdo chce tenhleten fakt zduraznit, tak je velice tezke vybrat nejaky konkretni priklad, ktery by ti objasnil tu "velikost LISPu". Proto asi vetsina LISParu mluvi tak vseobecne.

Takze se zamysli, co chces vedet a pak poloz jednu konkretni otazku. Podle moji dosavadni nekolikatydenni zkusenosti s forem na rootu musim prohlasit, ze to chce se zeptat jednu konkretni otazku a ne nekolik vseobecnych nebo sirsich otazek. Uplne ten nejpresnejsi duvod neznam, ale vypada to, ze kdyz jsem se ptal vseobecne a polozil jsem treba nekolik otazek, tak mi nikdo na ne neodpovedel. To jsem si rikal, ze si nekdo z tech otazek vybere jednu, na kterou odpovi. Ale to jsem se take pletl.

A tak jsem se treba tady v tyhle diskusi zeptal jednou otazkou na robotiku. A v tom se objevil Ondrej a hned vypsal nekoli konkretnich pouziti ze sve praxe. Tak se zkus zeptat Ondreje na jednu konkretni vec. Treba se toho chytnou dalsi lidi. Az dostanes nejake odpovedi (a muze to trvat treba cely vecer, nes nejakou odpoved dostanes, protoze LISParu, ktery si prave ctou root a ktery si prave ctou tuhle diskusi, je opravdu malo), tak se nad nimi zamysli a pak treba poloz zase dalsi otazku, no a uvidis, ze diskuse urcite nabere jiny kurz.

Co mam zkusenost, tak mi hodne lidi na moji obecnou otazku odpovedelo jinak, nez jsem chtel, ale nakonec z tech odpovedi jsem se neco dozvedel a vytahl jsem si z toho to co jsem chtel vedet, nebo aspon priblizne to, co jsem chtel vedet. Prestal jsem diskutovat a pak kdyz jsem se treba za 2 dny na tu diskusi opet podival, tak koukam, ze se posunula mnohem dal a dozvedel jsem se dalsi veci a vse bylo mnohem jasnejsi.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 17:53:19
To není žádný praktický příklad. (ano, skutečně trvám na tom, že není) Praktický příklad je "načti deset čísel ze souboru a najdi největší" nebo "připoj se na webservice googlu a stáhni mapu brna" nebo "vykresli GUI s obrázkem Majora Gagarina" nebo "vyřeš problém batohu, přičemž data jsou v souboru ve formátu XY".

Prakticke priklady na vyuziti makra ale nikdy nebudou mit jen par radek. To musite pochopit. Vezmete si knizku Practical Common Lisp, vyberte si tam libovolny program, a napiste/rozmyslete si program, ktery dela to same v Pythonu, pri pouziti stejne urovne knihovnich funkci (napr. je tam knihovna na parsovani binarnich souboru - zadne podvadeni se struct!). A uvidite, ze to makra zkracuji. To je asi jako chtit jednoduchy priklad, kde je OOP lepsi nez ne-OOP.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 19:44:17
Prakticke priklady na vyuziti makra ale nikdy nebudou mit jen par radek. To musite pochopit. Vezmete si knizku Practical Common Lisp, vyberte si tam libovolny program, a napiste/rozmyslete si program, ktery dela to same v Pythonu, pri pouziti stejne urovne knihovnich funkci (napr. je tam knihovna na parsovani binarnich souboru - zadne podvadeni se struct!). A uvidite, ze to makra zkracuji. To je asi jako chtit jednoduchy priklad, kde je OOP lepsi nez ne-OOP.

No vida, tohle je konkrétní příklad. Tak se tedy můžeme domluvit, pokud má někdo zájem, na konkrétním příkladu rozumné velikosti, dodejte přesné zadání (parsovat knihu o Lispu se mi opravdu nechce, lispaři mají výhodu, že mají po ruce hotové řešení a nemusí programovat) a někdo z nás to může přes víkend udělat třeba v Pythonu nebo Scale. Pak uvidíme, k čemu jsme došli.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 19:48:49
Pak uvidíme, k čemu jsme došli.

Vsadím boty, že bysme došli k tomu, že lispaři budou tvrdit, že jejich kód je sice stejně rychlý a stejně dlouhý, ale že je elegantnější. Takové zjištění mi teda za tu námahu nestojí.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 30. 03. 2011, 19:50:38
když už ostatním nadáváte, že jsou cvičené opice, tak byste aspoň mohli umět dokázat svoje silná tvrzení o svém miláčkovi...

Jo aha, tak odsud pramení celé to nepochopení. :D Tak to rád vysvětlím.
Nikdo netvrdil, že ti, co neprogramují v Lispu, jsou cvičené opice. Za cvičenou opici jsem označil člověka, který není schopen dohlédnout ani mimo rámec vývojového nástroje, na nějž je zvyklý. Prostě jako by se někdo dotázal na možnosti použití elektromotoru a kdosi se zapojil do debaty stylem "Nejdůležitější je - kolik to má válců? A jaký mají obsah? Leje se tam benzin nebo nafta? Co se k tomu dělá za turba? Protože tohle jsou přece věci, které každého experta na pohony zajímají především."
A někdo jiný by si poznámku míněnou tak, že takto se může ptát jen cvičená opice, vztáhl na sebe a začal oponovat, v čem že je ten elektromotor tak úžasný, když spalovací motor se taky točí, a proč se u něj tolik poukazuje na tu elektřinu, když jeho diesel ji potřebuje akorát na roztočení - a i to by se dalo obejít jinak, takže ta elektřina je celkem zbytečná věc... I na pohled že to vypadá divně - nemá to hlavu, ani klikovou hřídel, ani ventilový rozvod, jen nějaké pro člověka nepřehledné vinutí ve statoru a rotor...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 19:58:12
Nikdo netvrdil, že ti, co neprogramují v Lispu, jsou cvičené opice. Za cvičenou opici jsem označil člověka, který není schopen dohlédnout ani mimo rámec vývojového nástroje, na nějž je zvyklý. Prostě jako by se někdo dotázal na možnosti použití elektromotoru a kdosi se zapojil do debaty stylem "Nejdůležitější je - kolik to má válců? A jaký mají obsah? Leje se tam benzin nebo nafta? Co se k tomu dělá za turba? Protože tohle jsou přece věci, které každého experta na pohony zajímají především."

To ale není pravda. O cvičených opicích jsi začal mluvit po tom, co se blizzboz opovážil zeptat, jestli pro Lisp existují taky nějaké pořádné knihovny, frameworky a RAD nástroje - tj. jestli se dá skutečně v lispu něco velkého a praktického vytvořit, nebo si jen na rootu honit triko, že nikdo jiný nemá nářadí kterým se dá vytvořit nářadí.

Kdokoli si to může přečíst: http://forum.root.cz/index.php?topic=1978.msg15063#msg15063
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 30. 03. 2011, 20:14:38
Kdyz uz se tu tak probiraji ty nekonecne moznosti Lispu, jakym zpusobem v nem lze programovat ciste funkcionalne (pokud zrovna urcitou cast kodu timto zpusobem programovat chci, nic dogmatickeho), jestlize tail rekurkze neni standardem vyzadovana? V Land of Lisp se tomu elegantne vyhli tvrzenim, ze ta a ta implementace (ci vetsina nebo jak to formulovali) to stejne podporuje.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 30. 03. 2011, 20:16:00
Pozn.: mluvim o Common Lispu
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 20:23:15
Pak uvidíme, k čemu jsme došli.

Vsadím boty, že bysme došli k tomu, že lispaři budou tvrdit, že jejich kód je sice stejně rychlý a stejně dlouhý, ale že je elegantnější. Takové zjištění mi teda za tu námahu nestojí.

Však Tě nikdo nenutí, ikdyž je pravda, že jsem předpokládal, že bys zájem mít mohl. Schválně jsem ale psal o rozumné velikosti, protože několik dnů nechci a ani nemohu nad problémem strávit ani já. Podle mě je každopádně škoda, že diskuse zatím probíhá dost nasucho. Stejně jako Tebe mě nebaví číst vznešené řeči a alegorie, jsem technokrat a mám zájem o inženýrskou debatu. Tam samozřejmě patří metriky, příklady nástrojů, knihovny atd., ale bez nějakého umělého příkladu se asi neobejdeme. Já jsem například kdysi psal prográmky pro Project Euler a tam jednoznačně nejzajímavější řešení (když člověk správně vyřeší, má přístup do sekce fóra, kam lidé posílají svoje řešení). Z mého hlediska patřila k nejzajímavějším a rozhodně nejkratším řešením řešení z kategorie jazyků APL/J/K. Neznamená to, že bych od příštího týdne přešel z Pythonu nebo Scaly na J, ale o něčem to vypovídá. Takhle nemáme v ruce prakticky nic.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 20:35:00
Kdyz uz se tu tak probiraji ty nekonecne moznosti Lispu, jakym zpusobem v nem lze programovat ciste funkcionalne (pokud zrovna urcitou cast kodu timto zpusobem programovat chci, nic dogmatickeho), jestlize tail rekurkze neni standardem vyzadovana? V Land of Lisp se tomu elegantne vyhli tvrzenim, ze ta a ta implementace (ci vetsina nebo jak to formulovali) to stejne podporuje.

Dobrý dotaz. Lisp není Haskell, kde je čistota dané funkce prakticky dána v deklaraci (System.IO.Unsafe stranou), nicméně jeho povaha je IMO poměrně dost hybridní. Spoustu věcí lze nicméně vyřešit například pomocí foldu (reduce) a neoptimalizované rekurzi nebo cyklu se tak vyhnout.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 20:39:23
Stejně jako Tebe mě nebaví číst vznešené řeči a alegorie, jsem technokrat a mám zájem o inženýrskou debatu. Tam samozřejmě patří metriky, příklady nástrojů, knihovny atd., ale bez nějakého umělého příkladu se asi neobejdeme.

K technické debatě* tady ale samozřejmě nikdy nemůže dojít z jednoduchého důvodu: všichni dobře víme, že i kdyby nakrásně lisp měl nějaké geniální vlastnosti (jakože já netvrdím, že nemá! Jen mě o tom tady nikdo neumí nebo nechce přesvědčit), tak tím třeba oproti jiným jazykům deset bodů získá, ale jiných dvěstě ztratí na tom, že nejsou knihovny, nejsou programátoři, není provázanost s komerčními produkty, atd.

A za druhé ta debata tak, jak jsi ji postavil, je nesmyslná - nemá cenu porovnávat dva jazyky bez jejich standardních knihoven - vždyť ty knihovny přece tvoří velkou část přínosnosti toho kterého jazyka...

A za třetí ta debata nemá smysl, protože každá cvičená opice ví, že co do tvrdých kritétií jsou všechny jazyky stejné, protože se v nich dá napsat ten stejný algoritmus - a potom už jenom měříme schopnost překladače optimalizovat... Takže bysme stejně jen skončili u bezobsažné debaty o tom, co je elgantní a co ne.

......

* tj. takové, jakou bych si představoval ve firmě, když někdo přijde s nápadem, že by se mělo přejít na Lisp.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 20:41:40
Ovsem existuji zkratka pripady, ktere napisete v Lispu na 5 radku a v Pythonu na mnohem vic, protoze v Lispu muzete definovat makra. Proste, Lispova makra umoznuji ten kod zkratit vic nez o konstantu.

Tohle bych prosil vysvětlit. "Víc než o konstantu" podle mě zkracují kód i poměrně standardní funkce vyšších řádů (jejichž obdobu podporuje koneckonců i C) nebo hloupé GOSUB. Co znamená zkrácení o konstantu a kdy jde o asymptoticky lepší optimalizaci?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 30. 03. 2011, 20:45:34
Citace
Nemůžete přece chtít, aby se v nějakém jazyce implementovaly obraty s něčím, co daný jazyk v takové podobě vůbec nemá.

a v tom bude asi jadro pudla. silne mi to tady zacina zavadet podobenstvi o jeskyni....

tak si zkusime nejaky prakticky priklad... co treba line vyhodnocovani, kod je ve schemu, ale to je jedno.

vytvorme si novy typ hodnot, tzv. prislib. do teto hodnoty si ,,schovame'' nejaky vyraz a vyhodnotime ho az kdyz bude opravdu potreba. nadefinujeme si teda macro:

Kód: [Vybrat]
(define-macro (delay x) `(lambda () x)),

ktere zajisti, ze na miste v kodu kde se vyskytlo (delay foo), bude tento vyraz nahrazeny (lambda () foo), coz neni nic jineho nez anonymni funkce majici v sobe jako telo foo. jako foo, muze byt jakykoliv vyraz, ktery se pri deklaraci nevyhodnocuje! takze jde pouzit treba (delay (if (< x 1) (/ x 0) (+ x 2))). Pokud si chceme hodnotu vyrazu vyzvednout, tak si nadefinujeme funkci

Kód: [Vybrat]
(define (force promise) (promise))
Ktera dany prislib vyhodnoti. Jinymi slovy, nami vytvoreny prislib je ve skutecnosti anonymni funkce a funkce force, tuto funkci zavola a my ziskame hodnotu vyrazu. Toto uz zvladne malo ktery jazyk, ale slo by to resit evalem, ktery je v tomto pripade vyrazne pomalejsi a neohrabanejsi.

Pojdme dal, co kdyz chceme, aby se hodnota prislibu vypocitala jen jednou, nekam ulozila a pri kazdem zavolani force se vzala jenom ta ulozena hodnota?

Muzeme pro to pouzit nasledujici makro:
Kód: [Vybrat]
(define-macro (delay expr)
              `(let ((initialized #f)
                     (value #f))
                 (lambda ()
                   (if initialized value
                     (begin
                       (set! initialized #t)
                       (set! value ,expr)
                       value)))))

Kdekoliv, kde se makro vyskytne, se vlozi kod ve tvaru:

Kód: [Vybrat]
(let ((initialized #f)
        (value #f))
               (lambda ()
                   (if initialized value
                     (begin
                       (set! initialized #t)
                       (set! value expr)
                       value))))

Coz udelato, ze se vytvori lexikalni prostredi obsahujici dve hodnoty (initialized a value), tento kod vrati anonymni funkci, ktera jedina muze k temto dvema hodnotam pristupovat. Zavolame-li tuto funkci, provede se overeni, jestli je tato funkce volana poprve. Pokud ano, vypocte se hodnota prislibeneho vyrazu a ulozi se do value. Pri kazdem dalsim volani je vracena jiz vypocitana hodnota.

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 20:51:42
A za třetí ta debata nemá smysl, protože každá cvičená opice ví, že co do tvrdých kritétií jsou všechny jazyky stejné, protože se v nich dá napsat ten stejný algoritmus - a potom už jenom měříme schopnost překladače optimalizovat... Takže bysme stejně jen skončili u bezobsažné debaty o tom, co je elgantní a co ne.

No to bych tedy netvrdil. Na jedné straně stojí optimalizační schopnosti kompilátorů, na druhé straně schopnost běžného programátora napsat složitou aplikaci v daném jazyce v rozumném čase a kvalitě (měřeno chybovostí). Mezi strojovým kódem a třeba Javou je přece obrovská propast a tu netvoří jenom dostupné knihovny.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Ondřej 30. 03. 2011, 20:52:49
@deda.jabko: Vítám dalšího studenta UPOLu :-)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 20:58:49
Citace
Nemůžete přece chtít, aby se v nějakém jazyce implementovaly obraty s něčím, co daný jazyk v takové podobě vůbec nemá.

a v tom bude asi jadro pudla. silne mi to tady zacina zavadet podobenstvi o jeskyni....

Tak nějak. Reaguješ na příspěvek, ve kterém říkám, že nemá smysl se snažit jeden typ ŘEŠENÍ přenést z jednoho jazyka do druhého* a přesně tohle uděláš...

Jediné, co má smysl, je vzít PROBLÉM a jeho řešení napsat ve dvou různých jazycích takovými prostředky, které jsou v tom kterém jazyce pro řešení problému optimální.

Takže jestli máš potřebu tím příkladem něco ilustrovat, tak přijď s nějakým PROBLÉMEM, který se pomocí tohodle obratu dá vyřešit, zatímco v jiném jazyce by se dal řešit jenom daleko kostrbatěji. Promiň, ale já si takhle z hlavy opravdu neumím představit problém, který by se vyžadoval (!) použít zrovna tohle a nic "normálnějšího".

* což je obzvláště pikantní jestliže součástí řešení je použití obratu, který ve druhém jazyku jednoduše v takové formě není...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: janek 30. 03. 2011, 21:06:21
Koukám, že už se to tady zvrhlo na úroveň "kdo ho má většího"  :) Není nad to zabít pár dní a pár kilobajtů diskového prostoru nad takovými debatami. Doporučuju přenést diskuzi do nějaké restaurace a po pár půllitrech piva se případné nepřekonatelné neshody snadno vyřeší rychlou pěstní cestou.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 21:18:07
Koukám, že už se to tady zvrhlo na úroveň "kdo ho má většího"  :)

Jak zvrhlo? Vždyť tahle debata je přece od začátku o tom, že lispeři ho mají nejen největší, ale hlavně ostatní ho nemají vůbec.

(makro)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 21:30:54
tak si zkusime nejaky prakticky priklad... co treba line vyhodnocovani, kod je ve schemu, ale to je jedno.

vytvorme si novy typ hodnot, tzv. prislib. do teto hodnoty si ,,schovame'' nejaky vyraz a vyhodnotime ho az kdyz bude opravdu potreba.

V Pythonu třeba takto:

Kód: [Vybrat]
class delay(object):
    def __init__ (self, x):
        self.x = x
        self.initialized = False

    def __call__ (self):
        if (not self.initialized):
            self.value = self.x()
            self.initialized = True
        return self.value

for i in xrange(10):
    if (i == 0):
        v = delay(lambda: i + 1)
    if (i > 5):
        print v()
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 30. 03. 2011, 21:46:41
Citace
Jediné, co má smysl, je vzít PROBLÉM a jeho řešení napsat ve dvou různých jazycích takovými prostředky, které jsou v tom kterém jazyce pro řešení problému optimální.

a to si myslis, ze jde nacpat do diskuze? a do diskuze, kde jeden o tom druhemu jazyku nic nevi?

hele, pokud chces nejake reci od lidi, co lisp pouzivaji a maji k tomu duvod a vydelali na tom miliony. precti si neco od grahama http://www.paulgraham.com/avg.html  http://www.paulgraham.com/progbot.html http://www.paulgraham.com/carl.html
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 21:47:23
tak si zkusime nejaky prakticky priklad... co treba line vyhodnocovani, kod je ve schemu, ale to je jedno.

vytvorme si novy typ hodnot, tzv. prislib. do teto hodnoty si ,,schovame'' nejaky vyraz a vyhodnotime ho az kdyz bude opravdu potreba.

V Pythonu třeba takto:

Ta lambda tam dost omezuje, co je mozny do toho delay schovat. Pokud by to melo byt obecne, tak bez toho execu (nebo nejake jeho rucne udelane varianty) se neobejdem.

(samozrejme Lisp se bez neho taky neobejde, ale to si jaksi nikdo nechce priznat - ze totiz ty pismenka se zazracne v nuly a jednicky nepromeni samy - a je uplne jedno, jestli je exec-uju skryte na pozadi, nebo zjevne v kodu...)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 30. 03. 2011, 21:48:13
Citace
Kód: [Vybrat]
v = delay(lambda: i + 1)

a bez te lambdy to nejde?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 21:49:16
precti si neco od grahama

To je nejaka lisperská nemoc, tohle*? Je to nakazlive?


* neschopnost neco strucne vysvetlit, napr. popsat pomocí pár vět implementaci algoritmu
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 21:57:13
Ta lambda tam dost omezuje, co je mozny do toho delay schovat. Pokud by to melo byt obecne, tak bez toho execu (nebo nejake jeho rucne udelane varianty) se neobejdem.

Vzhledem k zadání (výraz) mi to přišlo dostatečné. Vzhledem ale k tomu, že delay je normální dekorátor, dá se to aplikovat i na obecnou funkci.

a bez te lambdy to nejde?

Momentálně mě řešení bez lambdy nenapadá. Vadí to moc?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 30. 03. 2011, 22:01:37
Vadí to moc?

Až někdo přijde s příkladem, kdy je to nutné nebo alespoň mimořádně vhodné použít k řešení nějakého problému, tak to vadit bude. Do té doby je to úplně bezpředmětné, protože se tady jenom trumfujete, kdo si umí líp honit triko.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 22:55:48
protože se tady jenom trumfujete, kdo si umí líp honit triko.

Ale kdepak. Já se jenom z lispařů snažím vymáčknout co nejlepší argumenty.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 30. 03. 2011, 23:12:42
[quote author=Inkvizitor link=topic=1978.msg15265#msg15265 date=1301510500
Tohle bych prosil vysvětlit. "Víc než o konstantu" podle mě zkracují kód i poměrně standardní funkce vyšších řádů (jejichž obdobu podporuje koneckonců i C) nebo hloupé GOSUB. Co znamená zkrácení o konstantu a kdy jde o asymptoticky lepší optimalizaci?
[/quote]

Teoreticky ano, ale kdo to pak bude cist?

Hezky priklad je treba zamykani. Zamky se blbe vkladaji do funkci nejake knihovny, protoze je obcas potrebujete zamknout driv, nez tam vpadnete. Samozrejme, muzete si kvuli tomu bloku mezi zamkem definovat funkci, na kterou se pak zavola funkce toho zamku, ale proc tak slozite. Neni lepsi to fakt resit tim makrem?

Ja bych chapal makra proste jako funkce, ktere nemusi nutne vyhodnotit sve argumenty. V pure funkcionalnich jazycich je to pak oboji totez. Zastancem funkcionalniho purismu nejsem, pripada mi to prehnane; uz proto, ze zkratka realne pocitace jsou velmi velmi stavove. Dale je tu otazka moznosti automatickych vs. moznosti lidskych optimalizaci. Schopni lide dokazi, na urovni vyssi nez assembler, vice.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 30. 03. 2011, 23:44:42
Hezky priklad je treba zamykani. Zamky se blbe vkladaji do funkci nejake knihovny, protoze je obcas potrebujete zamknout driv, nez tam vpadnete. Samozrejme, muzete si kvuli tomu bloku mezi zamkem definovat funkci, na kterou se pak zavola funkce toho zamku, ale proc tak slozite. Neni lepsi to fakt resit tim makrem?

Ja bych chapal makra proste jako funkce, ktere nemusi nutne vyhodnotit sve argumenty. V pure funkcionalnich jazycich je to pak oboji totez. Zastancem funkcionalniho purismu nejsem, pripada mi to prehnane; uz proto, ze zkratka realne pocitace jsou velmi velmi stavove. Dale je tu otazka moznosti automatickych vs. moznosti lidskych optimalizaci. Schopni lide dokazi, na urovni vyssi nez assembler, vice.

Já mám s makry (pokud chápu správně směr příspěvku a tady by se mi líbil příklad) docela problém v případě, že se snaží něco dělat skrytě. Coby (neortodoxní) pythonista ctím zásadu, že explicitní je lepší než implicitní. Zamykání funkce v Pythonu mohu pořešit opět dekorátorem a nic moc navíc to nestojí (režie volání není nulová, ale z hlediska programátora je to v pohodě). Java a spol. mají klíčové slovo synchronized, na konkurenční přístup k datům jsou různé strategie - počínaje STM a konče actory atd. Vhodnost a nevhodnost konkrétního přístupu si netroufám takto od boku střílet.

Co se týče línosti a funkcionálního purismu, to bych se bál spojovat jenom proto, že nejznámější líný jazyk je shodou okolností Haskell.

Fakt by se hodily konkrétní příklady, já si to přád mám problém živě představit.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 31. 03. 2011, 00:06:43
Inkvizitor:
jeste k te tail rekurzi; to je to, co me bije do oci: zastanci CL casto uvadi jako vyhodu standardizovanou podobu jazyka (coz je obvykly protiargument proc ne dejme tomu neco jako Racket) + netrvani na jednom paradigmatu; pokud ovsem budu chtit psat ciste funkcionalni kod (jedno z nabidky tech paradigmat), pak to nebude ten kod, jehoz funkcnost mi standard zarucuje

skutecne obtizny dotaz na makristy - jak implementaci CL, ktera nema podporu tail callu, pomoci maker o tuto podporu rozsirim? :-)
nebo pattern matching ala Ocaml (a patrne Haskell)?
a bude to s pomoci maker stejne rychle, jako kdyz to bude podporovat primo prekladac?

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 31. 03. 2011, 05:43:07
skutecne obtizny dotaz na makristy - jak implementaci CL, ktera nema podporu tail callu, pomoci maker o tuto podporu rozsirim? :-)

Nevim. Trochu jsem googlil a tady je takovy nastrel, ktery pouziva CPS transformaci http://www.rhinocerus.net/forum/lang-lisp/46642-cl-implementations-tail-call-elimination.html (http://www.rhinocerus.net/forum/lang-lisp/46642-cl-implementations-tail-call-elimination.html). Ale moc bych se tim netrapil, vsechny bezne implementace ji v nejake forme maji.

nebo pattern matching ala Ocaml (a patrne Haskell)?
a bude to s pomoci maker stejne rychle, jako kdyz to bude podporovat primo prekladac?

Pattern matching popisuje Paul Graham v On Lisp (nevim, jestli je to stejne jako Ocaml nebo Haskell, neznam je). Teoreticky by to mohlo byt stejne rychle.

Stejne tak Graham ukazuje implementaci call/cc, a zminuje CPS (continuation passing style) transformaci, i kdyz ji neimplementuje. Tam je i diskuse o tail callech.

Ano, existuji veci, ktere se i s velmi silnym makrosystemem delaji nesikovne. Je to tak prekvapive?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 31. 03. 2011, 06:07:37
Zamykání funkce v Pythonu mohu pořešit opět dekorátorem a nic moc navíc to nestojí (režie volání není nulová, ale z hlediska programátora je to v pohodě). Java a spol. mají klíčové slovo synchronized, na konkurenční přístup k datům jsou různé strategie - počínaje STM a konče actory atd. Vhodnost a nevhodnost konkrétního přístupu si netroufám takto od boku střílet.

Ja myslel spis situace, kdy synchronized nestaci a je potreba zamek udelat mimo funkci nejakeho API (na konkretni situaci si nevzpominam, ale nejak to souviselo s condition variable). Treba pthreads vyzaduji, aby volajici pred vstupem do cond_wait() zamkl souvisejici mutex. Se zamky jsou problemy - jedna malickost vam muze totalne zmenit dukaz korektnosti celeho zamykani. Proto IMHO neni dobre davat je dovnitr funkci, byt pres dekoratory.

Samozrejme, teoreticky lze vsechno poresit pres synchronized nebo jine pristupy k synchronizaci, ale realny svet casto neni tak jednoduchy (to je ostatne to, co mi vadi na pure functional jazycich - vyzaduji cistotu v podstate vsude).

V CL jsem paralelne neprogramoval, ale dokazu si predstavit situace v C, kdy by se mi Lispova makra velmi hodila.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 31. 03. 2011, 09:36:31
Však Tě nikdo nenutí, ikdyž je pravda, že jsem předpokládal, že bys zájem mít mohl. Schválně jsem ale psal o rozumné velikosti, protože několik dnů nechci a ani nemohu nad problémem strávit ani já. Podle mě je každopádně škoda, že diskuse zatím probíhá dost nasucho.

Bohuzel, krome http://page.mi.fu-berlin.de/prechelt/Biblio//jccpprtTR.pdf (http://page.mi.fu-berlin.de/prechelt/Biblio//jccpprtTR.pdf) a mozna trochu http://shootout.alioth.debian.org/ (http://shootout.alioth.debian.org/) nevim o zadne studii srovnavajici produktivitu programovacich jazyku (libovolnych - ne primo Lispu). Urcite by se hodily, ale nikdo o to nema zajem (financne lepsi je, kdyz nikdo nevi, jak to je, nez aby nejaka mocna firma prohrala). Ja za sebe muzu rict, ze kdybych v necem takovem participoval, tak jedine anonymne. :-)

Takze opravdu, jedine, o co se muzeme oprit, jsou anekdoty lidi, kteri zkusili vic jazyku, a muzou to porovnavat. Je to asi skoda, na druhou stranu, je z pochopitelnych duvodu obtizne sehnat lidi (a pripadne finance) pro takove studie.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 11:05:30
Bohuzel, krome http://page.mi.fu-berlin.de/prechelt/Biblio//jccpprtTR.pdf (http://page.mi.fu-berlin.de/prechelt/Biblio//jccpprtTR.pdf) a mozna trochu http://shootout.alioth.debian.org/ (http://shootout.alioth.debian.org/) nevim o zadne studii srovnavajici produktivitu programovacich jazyku (libovolnych - ne primo Lispu).

Benchmarků se dá najít kupa.

http://dan.corlan.net/bench.html

Java (do nativniho kodu): 25 radku kodu, 3.03s
Java (bytekod): 8.23s
Lisp: 22 radku kodu, 4.69s

Java-nativni kod o 35% rychlejší.

A z toho tvyho odkazu:

http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=sbcl&lang2=java

Lisp 2x (median) pomalejší než bytecode java.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 31. 03. 2011, 11:46:00
JS:
ad tail rekurze - pokud jsem to spravne pochopil, ten nastrel neni ciste funkcionalni (setf), coz popira puvodni duvod pro pouziti tail rekurze..

"Ano, existuji veci, ktere se i s velmi silnym makrosystemem delaji nesikovne. Je to tak prekvapive?"

ne, je to dukaz, ze jine jazyky nabizeji jine abstrakce v Lispu nedostupne a stejne efektivne neimplementovatelne; ta makra proste jen poskytuji urcity pristup a jine jazyky poskytuji jine pristupy k reseni problemu, makra nejsou nadmnozinou a vselek, jak se Lispari snazi tvrdit




Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Zofos 31. 03. 2011, 13:06:48
...
K bodu 5: Souhlasím s tím, že párování závorek pomůže "rozšifrovat" zdrojový text, nicméně to neznamená, že se tím program stane výrazně čitelnějším. Čitelnost znamená "kouknu se a vidím" a ne "otevřu si editor, jezdím kurzorem sem a tam a hledám".

char*x(char*s,int c){char*r=0;while(*(*s-c?s++:r=s++));return r;}


Kouknu a vidím není vlastností jazyka, ale vlastnost konkrétního programu a programátora. Funkce x kterou uvádím pro pobavení je napsaná v jazyce C, který syntaktický cukr obsahuje, přesto není na první pohled vidět, že je ekvivalentní jedné standardní knihovní funkci.

K bodu 6: Prefixová notace sice má svoje výhody, ale zrovna u aritmetických operací a podobných akcí to prostě je handicap. Výhody existují, ale například násobnou aplikaci operátoru lze v jiných jazycích vyjádřit pomocí fold/reduce. S problémem infixových funkcí si z jazyků, které jsem viděl, asi nejelegantněji poradily Haskell a Scala.

Je to podobný typ handicapu jako to, že v Pascalu je pro tisk výstupu procedura write/writeln, zatímco v C je to funkce printf/puts/fputs/fwrite/..., v C++ operátor << na ostreamech, v jazyce Java je to metoda print/println atd. Je to jen nezvyk a nechuť učit se nové věci.

Zkrátka a dobře, vždycky je to něco za něco. Obrovská flexibilita LISPu je výhoda, o tom není sporu. Problém "metajazyků" typu LISP je dvojí:

1. Zhoršená čitelnost kvůli jednoduché syntaxi - syntaxe LISPu je computer friendly a ne human friendly. Syntaktický cukr je z hlediska čtenáře kódu výhoda, ne že ne.

2. Rozšiřitelnost a určitý paradigmatický agnosticismus (proč je, u všech všudy, potřeba do LISPu přidávat další a další konstrukce?) tento problém ještě zvětšuje.

1. Jde jen o zvyk. Když jsem přešel z Pascalu na C, tak mi přišlo { a } místo begin a end  podobně nepřátelské. Dokonce jsem si myslel, že na = a == místo := a = si nikdy nezvyknu. Příčinou zdánlivé nečitelnosti je jen nezvyk a nechuť učit se nové věci.

2. Proč v okamžiku kdy je potřeba zpracovávat text programátoři raději sáhnou po Perlu než po C? Protože v Perlu je práce s řetězci pohodlnější a snazší. Proč? Protože má Perl specializované konstrukce pro regulární výrazy a programátor se nemusí starat o to, aby pro řetězec naalokoval správný počet bajtů. Kdyby byla jedna sada syntaktických konstrukcí vhodná pro všechna použití, tak by nebyly potřeba různé jazyky, stačil by INTERCAL. Lispeři na to jdou z jiného úhlu než jiní programátoři. Když mají problém, u kterého si řeknou: pro zjednodušení práce by se mi hodil jazyk, který má konstrukce A, B a C, tak si konstrukce A, B a C dopíšou do svého standardního překladače. Když je před stejný problém postaven programátor v jazyce C, tak buď si ty konstrukce doplní tak, že napíše jiný překladač (yacc, lex). Nebo, pokud se nepodaří oddělit ty konstrukce do nějakých separátních modulů jako v případě yaccu a lexu, tak napíše překladač pro nový jazyk (Perl). No a konečně pokud není dost zdatný na psaní překladačů, tak práci toho překladače vykonává ručně a místo toho, aby mohl používat nějakou konstrukci typu match(/regex/,string), tak volá příslušné funkce regcomp, regexec, regerror, regfree v pořadí a s argumenty, které by dokázal doplnit překladač automaticky.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 13:47:42
char*x(char*s,int c){char*r=0;while(*(*s-c?s++:r=s++));return r;}


Kouknu a vidím není vlastností jazyka, ale vlastnost konkrétního programu a programátora. Funkce x kterou uvádím pro pobavení je napsaná v jazyce C, který syntaktický cukr obsahuje, přesto není na první pohled vidět, že je ekvivalentní jedné standardní knihovní funkci.

To je klasická polopravda. Kdybych chtěl být ostřejší, tak řeknu (dost zjevná a chabá) manipulace.
Z tvrzení "v každém jazyce se dá psát nečitelně" totiž nijak neplyne, že "v každém jazyce se dá psát čitelně" a tedy ani "čitelnost je (JEN) vlastnost programátora".

Celá pravda je, že syntaxe jazyka přinejmenším stanovuje horní mez čitelnosti, kterou je pisatel schopen dosáhnout.

V některých jazycích se totiž NEDÁ psát tak čitelně jako v jiných i kdyby se pisatel přetrhl a na druhé straně některé jazyky čitelné a strukturované psaní dokonce částečně vynucují (např. python syntaxe vynucující odsazování bloků).
 
1. Jde jen o zvyk. Když jsem přešel z Pascalu na C, tak mi přišlo { a } místo begin a end  podobně nepřátelské. Dokonce jsem si myslel, že na = a == místo := a = si nikdy nezvyknu.

Opět podobná věc: z toho, že se ti zdálo X o Y a pak jsi zjistil, že X nebyla pravda, nijak neplyne, že když se někomu zdá X o Z, tak to taky není pravda.

Příčinou zdánlivé nečitelnosti je jen nezvyk a nechuť učit se nové věci.

Takže např. binární výpis programu je vlastně čitelný - a jestli si někdo myslí, že ne, tak se jenom nechce učit nové věci.

Dokonce je "čitelný" i program ve zvukové podobě: cat binarka >/dev/dsp

Ach jo. Možná by to chtělo vzít v úvahu, že člověk není stroj, který se může naprogramovat na libovolný způsob komunikace. My lidi prostě máme některé věci zažité a přijdou nám "přirozené" (i když přirozené nejsou, museli jsme se je naučit), proto ke srozumitelnosti přispívá, když jde jazyk těmhle zažitým věcem naproti a ne zcela proti nim.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 31. 03. 2011, 14:55:36
Benchmarků se dá najít kupa.

http://dan.corlan.net/bench.html

Java (do nativniho kodu): 25 radku kodu, 3.03s
Java (bytekod): 8.23s
Lisp: 22 radku kodu, 4.69s

Java-nativni kod o 35% rychlejší.

Mel jsem na mysli spis studie porovnavajici produktivitu nez benchmarky. Nicmene, nemuzes uplne 100% porovnavat opensource kompilator (SBCL) a komercni JIT kompilator (JRE). Myslim, ze na to, ze je CL dynamicky jazyk, ma dost slusnou rychlost.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 31. 03. 2011, 15:08:17
ad tail rekurze - pokud jsem to spravne pochopil, ten nastrel neni ciste funkcionalni (setf), coz popira puvodni duvod pro pouziti tail rekurze..

Ale to je prece hloupost. Jak je to vevnitr naimplementovane je prece lhostejne. To bys musel tvrdit, ze cele funkcionalni programovani je k nicemu, protoze pocitace jsou vzdy stavove (a kompilator preklada tail-rekurzi jako smycku). A makra nejsou v podstate nic jineho, nez urcita nadstavba nad kompilatorem.

"Ano, existuji veci, ktere se i s velmi silnym makrosystemem delaji nesikovne. Je to tak prekvapive?"

ne, je to dukaz, ze jine jazyky nabizeji jine abstrakce v Lispu nedostupne a stejne efektivne neimplementovatelne; ta makra proste jen poskytuji urcity pristup a jine jazyky poskytuji jine pristupy k reseni problemu, makra nejsou nadmnozinou a vselek, jak se Lispari snazi tvrdit

No takove veci, jako optimalizace celeho programu (nebo treba jen typova inference) jsou skutecne z programovaciho jazyka samotneho dostupne jen obtizne. To ze funkcionalni jazyky poskytuji jine abstrakce je diskutabilni. Podle me spis vyuzivaji toho, ze zadaly urcite omezeni (treba na cistotu funkci). Je pro me tezko predstavitelne, ze by bylo mozne neco takoveho do Lispu pridat, aniz bychom se nemuseli nekde jinde omezit.

Nicmene, to ze si myslim, ze je to tezke, neznamena, ze je to nemozne. Ty jazyky stale jsou Turingovsky uplne, a Lisp vam stale umoznuje definovat k vasim potrebam pekne DSL. Ze to DSL muzete obejit, a tim jeho "vyhody" nabourat, je uz vec jina, a je velmi diskutabilni, zda je to vyhoda ci nevyhoda.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 15:08:39
Myslim, ze na to, ze je CL dynamicky jazyk, ma dost slusnou rychlost.

Souhlasím. Rozdíl oproti třeba tomu Pythonu je obrovský. To je rozhodně zajímavé a jsem rád, že jsem se to dozvěděl.

Ale na druhou stranu třeba se C#em Lisp co do paměti prohrává a co do rychlosti je to nastejno:

http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=sbcl&lang2=csharp

takže za předpokladu, že Boo bude co do výkonu stejné jako C# (není žádný důvod, proč by nebylo), volím jednoznačně Boo a ne Lisp - z důvodu dynamičnosti kdy-je-potřeba a statičnosti jinak (->kontrola), obrovského množství knihoven a nástrojů a snadné integrovatelnosti.

Lisp mě prostě nemá čím oslovit - a makra to jednoduše nemůžou zachránit...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Petr Mejzlík 31. 03. 2011, 17:31:56
Takže Lisp je funkcionální jazyk, ale nedá se v něm pořádně programovat čistě funkcionálně? Čtu to tady a nevím, co si o tom mám myslet, zatím mě to taky moc nezaujalo. Třeba stránky o Haskellu se jeho hlavním výhodám oproti jiným jazykům (lenost, žádné vedlejší efekty, silný statický typový systém atd.) věnují hodně.

Největší výhodou Lispu jsou makra a možnost jednoduše zpracovávat program jako data... je to tak? Taky myslím, že něco takového je prakticky použitelné hlavně pro programování věcí, kde se pracuje s lispovým kódem (např. IDE pro Lisp). Generovat kód za běhu a spouštět ho (exec, eval) se považuje za nebezpečné, ale v Lispu se tak programuje normálně. Není to špatný a nebezpečný způsob programování? Dívám se na to nějak špatně?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 17:36:20
Největší výhodou Lispu jsou makra a možnost jednoduše zpracovávat program jako data...

...což je jedno a to samé :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Petr Mejzlík 31. 03. 2011, 17:59:35
Největší výhodou Lispu jsou makra a možnost jednoduše zpracovávat program jako data...

...což je jedno a to samé :)
To úplně není. Třeba v C si můžu udělat makro, ale v parsování C-čkového kódu mi to nepomůže.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 18:39:27
To úplně není. Třeba v C si můžu udělat makro, ale v parsování C-čkového kódu mi to nepomůže.

No ale bavíme se o makrech v Lispu. A to není (nakolik jsem to zatím pochopil) nic jiného, než funkce, která bere "nespuštěný" Lispový kód* a vrací spustitelný objekt (v případě Lispu "vyhodnotitelnou formuli" nebo jak by se to správně řeklo).

Čili v podstatě dělá to samé jako eval, akorátže sympatičtějším způsobem, protože do kódu můžu "elegantněji" šahat, protože ho nemám jako string, ale jako už rozparsovanou strukturu.

Nevidím žádný velký důvod, proč by totéž nešlo udělat u libovolného jiného (i čistě procedurálního) jazyka, který je schopen svými vlastními prostředky manipulovat s rozparsovanou strukturou. Akorát to asi nikdo nepotřebuje, protože 99.9% situací, kde by se to hodilo, si stejně vystačí s lambdou...

Ale možná se pletu - jak jsem říkal, programovací jazyky nejsou žádný můj koníček...

-------

* já bych nespuštěný kód nazval třeba "citát", protože pracuji jakoby nad TEXTEM (strukturou) algoritmu, nikoli nad HODNOTOU VRÁCENOU algoritmem, ani nad algoritmem jako celkem. Čili algoritmus nespouštím, ale dělám nad jeho strukturou nějaké operace. Zmínil jsem tady transparentní intenzionální logiku - ta má to samé: jednak umí rozlišit mezi "de dicto" a "de re" (což asi v programování nemá ekvivalent) [1] a navíc umí rozlišit spuštěnou a nespuštěnou konstrukci [2] (což je přesně rozdíl mezi normální funkcí a makrem).

(Ovšem sluší se dodat, že TIL vznikl až po Lispu, takže s klidem můžeme lispisty poplácat po rameni, což ji zjevně dělá tak moc dobře :)

[1] http://til.phil.muni.cz/text/duzi_homonymie_dedicto_dere.php
[2] http://til.phil.muni.cz/text/tichys_fivemodes.php - viz hlavně trivializace
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 31. 03. 2011, 18:44:48
JS:
ad rekurze - doted jsem si myslel, ze kompilator preklada tail rekurzi jako prosty skok, ne smycku (coz v imperativnim - jakem jinem v tomto kontextu - pojeti obvykle znamena zmenu nejakeho akumulatoru nekde v pameti + skok; ostatne instrukce smycka alespon na x86 funguje presne takhle), kdo z nas dvou to nepochopil? ze mi vadi stav? nevadi, jen proste standard CL nezarucuje funkcnost ciste funkcionalniho kodu, cele me tvrzeni; pointa je, ze pokud kompilator tail rekurzi podporuje, tak se destrukce "stareho" mista a vytvareni "noveho" deje prirozene a ne tim zplostenim problemu na imperativni iteraci, jak to dela ono makro, vzdyt preci v trochu slozitejsich pripadech tohle nebude fungovatt! viz toto http://www.ats-lang.org/DOCUMENTATION/PROGINATS/HTML/x677.html
co to tedy placas ty?

chci tu hned ted priklad na traverzovani stromu potencialne obrovske hloubky, ciste funkcionalne a prenositelne v CL..  tozn. pokud to jde, zajima me jak, opravdu

zbytek vylevu nema cenu komentovat
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 31. 03. 2011, 18:59:11
Tak jsem tak nejak koukal na ty makra a chtel bych se na neco zeptat. Neni to nic konkretne praktickeho, ale ciste teoreticky. Muzu si nadefinovat takova makra, ze ve vysledku pak budu psat takovehle veci? (opakuji ciste teoreticky):

Kód: [Vybrat]
(circle x y r)nebo
Kód: [Vybrat]
(rekni v "Dobry den, jmenuji se Jack")kde v je vyska tonu hlasu, nebo
Kód: [Vybrat]
(moveto (map "Praha") x y)apod.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 31. 03. 2011, 19:09:03
novomente: to vsechno vypada jako typicke priklady na pouziti funkce, k cemu makro?

ad rekurze jeste - beru zpet ten svuj priklad na mutual tail recursion, to makro to patrne zvladne, zbytek vytek plati

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 31. 03. 2011, 19:31:06
novomente: to vsechno vypada jako typicke priklady na pouziti funkce, k cemu makro?
No jo, vlastne funkce a ne makro (uz jsem nejakej pretazenej, celou noc jsem skoro nespal :) )
No ale jestli to tak jde, tak to je parada. A jeste vetsi parada je, ze si ty funkce muzu nadefinovat za behu programu. Nebo ne?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 19:51:10
No ale jestli to tak jde, tak to je parada.

Co presne je na tom parada? :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 31. 03. 2011, 20:09:21
Co presne je na tom parada? :)
Parada je na tom to, Mirku, ze obcas zapremyslim nad jednim napadem, o kterem jsem se zminil v diskusi "IT inovace od neprogramatora" (neco jako programatorske LEGO). Ale prosim te, nechtej vedet o co jde, protoze o tom nechci mluvit, dokud nezjistim, jestli uz to nekdo nejak nezkousel. Presne jak jsem psal v te diskusi (IT inovace...).

No a jestli to nikdo jeste nezkousel to tak resit, jak myslim, tak to pro mne bude skvela motivace, abych se ucil programovat. Ale na to je jeste cas, stale hledam.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 20:20:37
Parada je na tom to, Mirku, ze obcas zapremyslim nad jednim napadem, o kterem jsem se zminil v diskusi "IT inovace od neprogramatora" (neco jako programatorske LEGO).

No to mě napadlo, právě proto se tě jako neprogramátora ptám: co ti přijde bezva na tom, že můžeš NĚKAM NAPSAT třeba "(moveto (map "Praha") x y)"?

Mělo by tě spíš zajímat, jestli to taky něco udělá - a proč a jak to to něco udělá.

Např.  když napíšeš u sebe v pokoji na zeď "(moveto (map "Praha") x y)", tak to zřejmě udělá to samý, jako kdybys tam napsal "Pepa je vůl!" - a možnost někam napsat "Pepa je vůl!" by tě asi tak nezaujala, ne?

:)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 31. 03. 2011, 20:29:50
No a jestli to nikdo jeste nezkousel to tak resit, jak myslim, tak to pro mne bude skvela motivace, abych se ucil programovat. Ale na to je jeste cas, stale hledam.

Já rozhodně nechci tvrdit, že nemá smysl učit se Lisp (podle mě patří k jazykům, ke kterým by programátor aspoň trochu přičichnout měl). Nicméně když srovnám Lisp jako první jazyk pro programátora třeba s Pythonem (sorry), je ta učící křivka daleko obtížnější. A pokud chceš rychlé výsledky, tak obzvlášť. No a pokud chceš tvořit nějakou knihovnu pro programátory nebo něco podobného a chceš ji co nejvíc rozšířit mezi lidi, není podle mě Lisp moc dobrá volba. To ale samozřejmě nevím.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 20:49:26
Nicméně když srovnám Lisp jako první jazyk pro programátora třeba s Pythonem (sorry), je ta učící křivka daleko obtížnější.

Nehledě na to, že postupy, který se naučí v Lispu, moc neuplatní jinde...

Ale já jsem ho nechtěl odrazovat od Lispu, mě jenom fakt zaujalo to nadšení nad samotným příkazem, bez jakýhokoli komentáře co jako by měl dělat a jak :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Petr Mejzlík 31. 03. 2011, 21:08:11
Myslím, že to, že mám kód jako strukturu a ne jen hloupý text (ten mám u evalu), je dost podstatná výhoda. Parsování lispu jde snadno, na to myslím má tu syntaxi co má, s protivným množstvím závorek.

* já bych nespuštěný kód nazval třeba "citát", protože pracuji jakoby nad TEXTEM (strukturou) algoritmu, nikoli nad HODNOTOU VRÁCENOU algoritmem, ani nad algoritmem jako celkem. Čili algoritmus nespouštím, ale dělám nad jeho strukturou nějaké operace. Zmínil jsem tady transparentní intenzionální logiku - ta má to samé: jednak umí rozlišit mezi "de dicto" a "de re" (což asi v programování nemá ekvivalent) [1] a navíc umí rozlišit spuštěnou a nespuštěnou konstrukci [2] (což je přesně rozdíl mezi normální funkcí a makrem).

(Ovšem sluší se dodat, že TIL vznikl až po Lispu, takže s klidem můžeme lispisty poplácat po rameni, což ji zjevně dělá tak moc dobře :)

[1] http://til.phil.muni.cz/text/duzi_homonymie_dedicto_dere.php
[2] http://til.phil.muni.cz/text/tichys_fivemodes.php - viz hlavně trivializace
Ten první článek jsem jen tak proběhl, kdybych to celé četl a snažil se to pochopit, strávil bych nad tím hodně dlouho. Tohle mě překvapilo:
Citace
(P1) Karel si myslí, že papež je v nebezpečí

(P2) Karel si o papeži myslí, že je v nebezpečí
Tvrdí tam, že ty dvě věty mají různý význam. Jak to, že to má různý význam? Může snad existovat nějaká situace, kdy platí P1 a neplatí P2 nebo naopak?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 31. 03. 2011, 21:16:11
Mirku@: Teda ty vsechno tak zevseobecnujes...nekdy nektery veci tak zevseobecnis, ze me to v dobrem smyslu uprime rozesmeje, proste tomu nekdy das takovou stavu, ze se proste nemohu udrzet a rozesmeju se na cely kolo. Ted me prosimte nechytej za slovo, tu stavu si tomu obcas dal v predeslych prispevcich. Ale abych ti odpovedel...

Samozrejme se budu zajimat o to jak to cele funguje a to az na uroven mikroprocesorovych technologiich vcetne hardwaru. Jde mi o rychlost, ktera je klicovym problemem. A LISP nepouziji jako hlavni. Hlavnim zrejme bude C, dale asi C++ a pak bude v baliku (nikoliv nad tim vsim, ale soucasti) mozna LISP a to prave diky sve univerzalnosti.

Nechci fakt ted nic probirat, protoze jak vydis z mych reakci, vsechno je to jenom zatim jen teoreticky, i kdyz musim se priznat ze zas az takovej zacatecnik nejsem. Mam za sebou hratky s BASICem, Pascalem, Assemblerem, a dalsich zejmena webovych technologii. Nejsem ani v jednom pokrocily uzivatel (krom webovych technologii), zatim jsem si jen tak hral. Ale nastupuji na CVUT a potrebuji patricnou motivaci, ktera u mne znamena neco uzitecneho udelat.

Tohle je sice uz vetsi projekt, ale mam i mensi takovy v podstate prkotinky. To jsou mezimotivace.

@Inkvizitor: Nechci rychle vysledky, nebudu delat knihovnu a LISP nebude mym primarnim jazykem. Tim asi bude C a C++, mozna take Java. Ale to se jeste uvidi.

Jinak zatim o tom napadu spis uvazuji jako o takove hracce na hrani pro programatory v Linuxu. No a casem, az dokoncim skolu a budu uz slusne programovat, uvidim, jestli by se to dalo pouzit pro opravdove profi veci. Ale zatim jsem ve stadiu, kdy hledam, jestli uz se tim nekdo nezabyval nekdy v minulosti, takze nechci predbihat veci.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 21:50:23
Myslím, že to, že mám kód jako strukturu a ne jen hloupý text (ten mám u evalu), je dost podstatná výhoda.

Samozřejmě. Ale není to žádná diametrální odlišnost, která by přinášela jazyku nějakou magickou sílu - jedno z druhého lze snadno udělat: prostě se to vyparsuje ;)

Parsování lispu jde snadno, na to myslím má tu syntaxi co má, s protivným množstvím závorek.

Já bych tipoval, že ho vymysleli tak, aby se dobře parsoval - a že se bude blbě číst, to byla podružnost - kdyby si na to náhodou někdo stěžoval, tak mu řekneme, že to není chyba syntaxe, ale jeho chyba, protože je moc línej ;)

Ten první článek jsem jen tak proběhl, kdybych to celé četl a snažil se to pochopit, strávil bych nad tím hodně dlouho.

Jasně, však u nás jsou na to taky dva semestry :) (ne na tyhle dva texty, ale na seznameni se s TILem :) Já jsem to sem dal spíš jako takovou zajímavost, že ten samej (imho) princip se objevuje i někde jinde...


Tohle mě překvapilo:
Citace
(P1) Karel si myslí, že papež je v nebezpečí

(P2) Karel si o papeži myslí, že je v nebezpečí

Tvrdí tam, že ty dvě věty mají různý význam. Jak to, že to má různý význam? Může snad existovat nějaká situace, kdy platí P1 a neplatí P2 nebo naopak?

Může. Vidíš svýho kamaráda Pepu Ratzingera, jak na něj někdo míří pistolí. Hlavou se ti mihne "Pepa je v nebezpečí!", ale nemyslíš na to, že papež je v nebezpečí, protože jsi byl pár let v Paraguai a nevíš, že mezi tím Pepu zvolili papežem. P2 platí (protože ty si to skutečně myslíš o muži, který JE papežem, akorát to nevíš) a P1 neplatí, protože myšlenku "papež je v nebezpečí" prostě v hlavě nemáš.

Neboli (teď se možná v něčem spletu, už je to nějakou dobu, co jsem se tím zabýval...) ve větě "Karel si o X myslí, že je v nebezpečí" můžeme za X dosadit libovolné výrazy, které mají stejný denotát a pravdivostní hodnota se tím nezmění. Totéž ale neplatí o větě "Karel si myslí, že X je v nebezpečí". Z toho plyne, že ty věty nemůžou být ekvivalentní.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 22:07:45
Nechci fakt ted nic probirat, protoze jak vydis z mych reakci, vsechno je to jenom zatim jen teoreticky

Já bych ani tak neřekl "teoreticky" jako spíš "básnicky" :) Tak to na mě zatím působí. Když nechceš, nebudu z tebe samozřejmě nic tahat, jen mi přišlo, že by sis třeba mohl ušetřit nějakou zbytečnou námahu, kdyby ses zeptal někoho, kdo to umí posoudit, jestli ta básnická představa vůbec dává nějaký smysl a je vůbec převoditelná do teorie a poté do praxe, nebo jestli v praxi už náhodou dávno neexistuje.

Na druhou stranu před Tebou ale smekám, moc se mi líbí, s jakou vervou do toho jdeš! Jednou k té vervě určitě přidáš ještě opatrnost, abys s vervou nešel proti zdi nebo do septiku :) ... a pak budeš (nebo možná už jsi, to já nevím) bezva parťák, takže fakt upřímně a s radostí Ti držím palce!

Kdybys přece jenom chtěl něco konzultovat, tak se na mě můžeš obrátit - klidně i s nějakou tou "mezimotivací" - na m.prymek na gmailu. Nic Ti ale nemůžu slíbit :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 31. 03. 2011, 22:58:51
ad rekurze - doted jsem si myslel, ze kompilator preklada tail rekurzi jako prosty skok, ne smycku (coz v imperativnim - jakem jinem v tomto kontextu - pojeti obvykle znamena zmenu nejakeho akumulatoru nekde v pameti + skok; ostatne instrukce smycka alespon na x86 funguje presne takhle), kdo z nas dvou to nepochopil? ze mi vadi stav? nevadi, jen proste standard CL nezarucuje funkcnost ciste funkcionalniho kodu, cele me tvrzeni; pointa je, ze pokud kompilator tail rekurzi podporuje, tak se destrukce "stareho" mista a vytvareni "noveho" deje prirozene a ne tim zplostenim problemu na imperativni iteraci, jak to dela ono makro, vzdyt preci v trochu slozitejsich pripadech tohle nebude fungovatt! viz toto http://www.ats-lang.org/DOCUMENTATION/PROGINATS/HTML/x677.html
co to tedy placas ty?

Promin, ale tomu nerozumim. Makro prevede tu rekurzivni funkci na smycku (v Lispu) a jak si s tou poradi dal kompilator (jestli je prelozi s JMP nebo DJNZ) je uz na nem. A i kdyby, Lisp ma goto (dokonce jako primitivum, zabudovane operatory smycek se typicky implementuji jako makra), takze to makro muze klidne prevest na to tagbody rovnou.

Veril bych tomu, ze se pomoci maker da udelat i vzajemna tail rekurze, ale samozrejme, jak uz jsem rekl, cim vic chceme porusovat lokalitu (chceme aby makra sahala do veci definovanych jinde, coz kompilator prirozene muze), tim je to komplikovanejsi.

Ale predevsim, moje otazka zni: Proc to chces? Proc chces napsat funkci rekurzivne? Muzes mit 2 duvody. Jeden je elegance zapisu. Pak nevim, proc by ti melo vadit, jak se ta funkce prelozi uvnitr (samozrejme, za predpokladu, ze se provede tail-recursion optimalizace). Druhy duvod jsou potencialni vyhody spojene s optimalizaci ciste funkcionalnich programu (treba line vyhodnocovani). To druhe ale Lisp mit proste nebude, pokud tyto optimalizace nebude umet kompilator, a take uz proto, ze zkratka nema pure funkce. Slo by jiste takova makra napsat, ale to uz bychom v podstate psali kompilator Haskellu nebo ceho.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 31. 03. 2011, 23:06:00
Čili v podstatě dělá to samé jako eval, akorátže sympatičtějším způsobem, protože do kódu můžu "elegantněji" šahat, protože ho nemám jako string, ale jako už rozparsovanou strukturu.

To ze je to stejne jako eval je omyl, ktery se vam snazim od zacatku vymluvit. Vy totiz muzete vysledek vyhodnoceni makra pak nechat zkompilovat, nemusite ho jen interpretovat. Jak to chcete provest s retezcem do eval mi tedy neni jasne. A to je dost podstatne - znamena to, ze pomoci maker muzete v podstate rozsirit kompilator.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 23:15:30
Vy totiz muzete vysledek vyhodnoceni makra pak nechat zkompilovat, nemusite ho jen interpretovat. Jak to chcete provest s retezcem do eval mi tedy neni jasne.

A co vám na tom není jasné?

Když napíšete textový soubor se zdrojákem v Lispu a spustíte ho, tak se stane co? Udělá se jeden velký eval. Takže nám jde jenom o to, jestli jazyk má prostředky na to, aby to samé provedl v rámci běhu programu.

To je celé.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 31. 03. 2011, 23:27:00
Takže Lisp je funkcionální jazyk, ale nedá se v něm pořádně programovat čistě funkcionálně? Čtu to tady a nevím, co si o tom mám myslet, zatím mě to taky moc nezaujalo. Třeba stránky o Haskellu se jeho hlavním výhodám oproti jiným jazykům (lenost, žádné vedlejší efekty, silný statický typový systém atd.) věnují hodně.

Zaprve, vyznam slova "funkcionalni" se za 50 let existence Lispu ponekud zmenil. Na zacatku to proste znamenalo, ze Lisp ma funkce (v porovnani s Fortranem, ktery je nemel, o assembleru nemluve).

Dneska to spis znamena, ze ma ten jazyk pure funkce, tzn. nemeni sve argumenty a nemaji vedlejsi efekty. Samozrejme, muzete takove funkce napsat v kazdem jazyce, ale jen v tech funkcionalnich toho umi kompilator vyuzit, protoze tam mu to explicitne rikate.

Lisp takto omezeny neni (ze by predpokladal, ze funkce jsou pure) a bylo by to asi a priori nespravne (i kdyz nevidim duvod, proc by nejaka implementace CL nemohla definovat takovy declare). Lisp je zkratka stavebnice, a proto uz z filozofickeho principu nemuze programatora nutit, aby psal jen pure funkce. (Pokud hledate funkcionalnejsi druh Lispu, zkuste Clojure.)

Největší výhodou Lispu jsou makra a možnost jednoduše zpracovávat program jako data... je to tak? Taky myslím, že něco takového je prakticky použitelné hlavně pro programování věcí, kde se pracuje s lispovým kódem (např. IDE pro Lisp). Generovat kód za běhu a spouštět ho (exec, eval) se považuje za nebezpečné, ale v Lispu se tak programuje normálně. Není to špatný a nebezpečný způsob programování? Dívám se na to nějak špatně?

Ano, divate se na to spatne, protoze makra nejsou eval. Ten kod se negeneruje za behu, ale pred tim, nez se funkce kompiluje nebo interpretuje. Jak uz jsem psal, z jineho pohledu (uzivatele) makra nejsou zase tak odlisne od funkci, akorat nevyhodnocuji sve argumenty a nelze je predavat. Tim chci rict, ze dobre napsane makro nekomplikuje cteni kodu vic, nez jakakoli funkce. Je pravda, ze se makra obtizneji ladi, ale i tomu se da pomoci.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 31. 03. 2011, 23:31:04
Vy totiz muzete vysledek vyhodnoceni makra pak nechat zkompilovat, nemusite ho jen interpretovat. Jak to chcete provest s retezcem do eval mi tedy neni jasne.
A co vám na tom není jasné?

Zrejme jste prehledl ono "zkompilovat". To co pisete je interpret.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 31. 03. 2011, 23:40:00
Zrejme jste prehledl ono "zkompilovat". To co pisete je interpret.

Tak když už jsme se dostali do vyloženě takhle komické roviny, tak dám taky jednu k dobru: Víte, pro jaký jazyk je nejjednodušší napsat interpret?

Kupodivu pro Céčko - hele:

Kód: [Vybrat]
#!/bin/sh

while true; do
  vim makro.c
  gcc -o makro makro.c
  ./makro
  read
done
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 01. 04. 2011, 00:35:23
ta diskuze je jeste zoufalejsi nez vcera... ale neposled neco zkusim.

makra v lispu vic nez nejakemu evalu jsou podobne preprocesoru, ktery je treba v cecku. stejne jako v cecku se nejdriv vyresi veci tykajici se podmineho prekladu a provede se expanze maker a az pak se preda kod prekladaci. tak stejne to funguje i v LISPu. nejdriv se provede expanze maker a pak se kod zkompiluje pripadne interpretuje.

vyhodou je, ze makro jazyk v LISPu je taky LISP takze jde vyuzit v plne mire jeho vyjadrovacich schopnosti a funkci (to v C nejde) a navic makra jsou zapsana stejnou formou jako bezne funkce, takze v principu v kodu vubec nerusi. makra v takovem pripade slouzi k rozsireni vyjadrovacich schopnosti jazyka. to umoznuje uzpusobit si jazyk potrebam dane situace a tudiz zefektivnit psani. vezmete si takoveho matemetiky, pravniky, doktory... vsechny tady tito lide pouzivaji k dorozumivani obecnou cestinu (LISPu), ale jsou situace, kdy je pro ne obecna cestina zoufale ukacena, proto si svuj jazyk rozsirili o spousty vyrazu (makra), ktere jim umoznuji efektivne komunikovat v jejich domene
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 01. 04. 2011, 00:38:10
JS: zase ta rekurze :-)
proc? protoze pro nektere problemy je to prirozeny zpusob (v tve reci tedy elegantni), napr. ono traverzovani stromu; bez tail rekurze to nebude obecne

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 01. 04. 2011, 00:56:30
ta diskuze je jeste zoufalejsi nez vcera... ale neposled neco zkusim.

To je bohužel pravda.

makra v lispu vic nez nejakemu evalu jsou podobne preprocesoru, ktery je treba v cecku. stejne jako v cecku se nejdriv vyresi veci tykajici se podmineho prekladu a provede se expanze maker a az pak se preda kod prekladaci. tak stejne to funguje i v LISPu. ***nejdriv se provede expanze maker a pak se kod zkompiluje pripadne interpretuje***.

Shodou okolností jsem tenhle aha-zážitek právě teď udělal při čtení čehosi... Takže ok, přiznávám se, že jsem to vůbec nepochopil. 

Když jsem totiž slyšel, že "makrem se dá měnit překladač" a "makro je jako funkce", měl jsem prostě za to, že defmacro může figurovat kdekoli v kódu a odkazovat se na svůj kontext, nebo si třeba tahat parametry ze sítě a jánevímco... a tímpádem záleží až na běhu programu, kde a jak se spustí a co vyprodukuje. 

Přemýšlím, na čí straně byla chyba... Jestli na vaší, že jste nebyli schopní ze sebe tuhle jednu větu (***) vypotit dřív, nebo na mé straně, že jsem si nedokázal domyslet, že "změna překladače" znamená "změna textu programu".

V tom případě teda musím upravit tvrzení, že eval je stejně silný nástroj, jen trochu neohrabanější na tvrzení "eval je daleko silnější nástroj, i když trochu neohrabaný" - všechno, co se dá udělat makrem, se dá udělat evalem, ale ne naopak - a jediný rozdíl makra od evalu je v tom, že makro se spustí těsně před překladem, zatímco eval se spustí až v době běhu.

Tak to je škoda, myslel jsem, že ty makra jsou zajímavější...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 01. 04. 2011, 06:44:58
JS: zase ta rekurze :-)
proc? protoze pro nektere problemy je to prirozeny zpusob (v tve reci tedy elegantni), napr. ono traverzovani stromu; bez tail rekurze to nebude obecne

No vzdyt ano! Ja s tim souhlasim (i kdyz funkcionalni programovani ma i dalsi vyhody nez jen v mnoha pripadech elegantni zapis). Ale pak tedy nechapu, proc by ti melo vadit, ze se to vnitrne prevede na neco, co funkcionalni neni (stezoval sis tam na to setf). Pokud se to prevede korektne, neni v tom zadny problem.

O tom to cele prece je. Makra dovoluji urcite dalsi abstrakce, a ty abstrakce mame jen proto, abychom dosahli elegantniho zapisu. O tom je mimochodem cela ta Grahamova knizka On Lisp.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 01. 04. 2011, 06:59:33
Shodou okolností jsem tenhle aha-zážitek právě teď udělal při čtení čehosi... Takže ok, přiznávám se, že jsem to vůbec nepochopil. 

No konecne. Jenom skoda, ze jste pri tom stihl urazit vsechny okolo, jak jsou arogantni, pritom se vas jen snazili upozornit na fakt, ze to nechapete. (Jen na vysvetlenou - ja osobne necitim potrebu snazit se vysvetlovat neco nekomu, kdo si a priori mysli, ze necemu rozumi. On k tomu musi dojit nejdriv sam, ze udelal chybu - coz se nakonec zde stalo. Proto lze tezko udelat vic nez odkazat na literaturu. Stejny argument jako vam dal deda.jabko je i na zacatku kapitoly o makrech v Practical Common Lisp.)

Tak to je škoda, myslel jsem, že ty makra jsou zajímavější...

No a tady je zase stejna chyba jako predtim. Vy jste ted zjistil o co jde, ale uz predpokladate, co se s tim da vsechno delat. Zase jde o neznalost. Klasicke priklady na makra podava knizka On Lisp, a knizka Let Over Lambda jde jeste o neco dal. A to jsme jeste nediskutovali reader makra..
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: podlesh 01. 04. 2011, 10:41:01
Já bych řekl, že jste v tom akorát udělali ještě větší zmatek.

No ale takhle to dopadne vždy, když se lidé hádají o věcech z principu iracionálních (v tomto případě: kdo je z čeho nadšený a proč) a navíc si ještě drze namlouvají že jen formulují racionální argumenty.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: podlesh 01. 04. 2011, 10:58:11
V tom případě teda musím upravit tvrzení, že eval je stejně silný nástroj, jen trochu neohrabanější na tvrzení "eval je daleko silnější nástroj, i když trochu neohrabaný" - všechno, co se dá udělat makrem, se dá udělat evalem, ale ne naopak - a jediný rozdíl makra od evalu je v tom, že makro se spustí těsně před překladem, zatímco eval se spustí až v době běhu.

Tak to je škoda, myslel jsem, že ty makra jsou zajímavější...
Já bych řekl že zásadní chyba je v pocitu že je tu eval NEBO makra - to je absurdní, eval je tam vždy, bez něj se v LISPu nic neprovádí. Zda se překládá nebo interpretuje není moc relevantní a je to spíš matoucí.
Spíš bych se zamyslel nad tím, kolikrát se vlastně provádí...

Jak jsem ale napsal v předchozím příspěvku, tady není moc věcí k diskusi - každý si sám musí najít vlastní důvod proč by z toho měl být nadšen a někdo prostě nadšen nebude. To je normální, viz např. umění.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Jakub Daněk 01. 04. 2011, 11:29:38
O LISP jsem jen zavadil a jelikož jsem pro něj neměl využití, moc do hloubky jsem nešel.

Nicméně z debaty...

Mirek vám tu přece netvrdí, že LISP je špatný jazyk. Jen nesouhlasí (nebo řekněme chce se dozvědět, proč by to byla pravda), že je to super - uber - ultra - mega krutopřísný jazyk hodící se na vše a vždy a ostatní jazyky jsou pro pitomce.

Z mého pohledu - jazyk má svou sílu, tou je univerzálnost, rychlost... (doplňte už zmíněné v diskuzi). Ale má i velké slabiny (malá komunita, nejsou knihovny, kvalitní nástroje jsou placené).

Co mi z toho vyjde? Asi LISP nezvolím ve většině případů jako hlavní programovací jazyk. Proč si psát něco, co dobře funguje jinde? Nejde o to, jestli to svedu nebo ne, ale o tom, že se snad taky chceme někam posunout, tedy nevymýšlet kolo. Samozřejmě, pokud LISP znám, pak ho mohu použít jako část programu tam, kde se to hodí (zde záleží na náročnosti na propojení s ostatními jazyky, což si samozřejmě musím nastudovat sám).

A co tomu tady chybí? Příklad. Vždyť to nemusí být ani ukázka kódu. Reálný příklad z praxe složitého problému, popsaný slovy. Nástin implementace (opět, bez ukázky kódu) v lispu. V běžných jazycích si to jistě představíme sami. Věřím, že takové příklady z oboru UI existují (stejně jako například k Prologu, i když X server bych v něm asi nepsal). A nezlobte se na mě, učebnicové příklady na 10 řádků nikomu nic neřeknou.

Tahle diskuse by byla mnohem věcnější, kdyby si tu pár fanatiků hned na začátku nezačalo honit triko. Co si k takové komunitě totiž říct? "Hm... jazyk je to jiný (záměrně nepíši těžký), nějaká literatura k tomu je, ale co když něco nepoberu a budu se chtít zeptat? Dozvím se, že jsem cvičená opice s lepidlem?"

Neměla by komunita, obzvláště pak komunita malá, vítat každého případného nováčka, člověka, co se chce něco dozvědět? Nač to elitářství? Není to kontraproduktivní (a také bezdůvodné)?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 01. 04. 2011, 11:36:28
Kdybys přece jenom chtěl něco konzultovat, tak se na mě můžeš obrátit - klidně i s nějakou tou "mezimotivací" - na m.prymek na gmailu. Nic Ti ale nemůžu slíbit :)
Beru na vedomi :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 01. 04. 2011, 12:42:07
JS:
Common Lisp neznam, cili z toho kodu nejsem nijak zvlast moudry a tudiz otazka: *current-tail-marker* mi nebude branit v tom traverzovat 2 stromy paralelne zaroven (= paralelne spustit 2 nesouvisejici tail rekurze zaroven; na me urovni uvazovani a na urovni syntaxe makra, o jehoz vnitrnosti se "nemusim" zajimat, to jsou preci 2 naprosto nesouvisejici cinnosti), ze ne?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 01. 04. 2011, 13:18:15
No konecne. Jenom skoda, ze jste pri tom stihl urazit vsechny okolo, jak jsou arogantni, pritom se vas jen snazili upozornit na fakt, ze to nechapete.

No tak zase prrrrr, jo? Domníval jsem se, že makra umí NĚCO, přičemž to NĚCO je nadmnožinou toho, co makra umí SKUTEČNĚ.

Čili pokud jsem říkal, že mi to nijak krutopřísné (jak píše kolega) nepřijde, a že mi to nepřijde jako důvod mluvit o uživatelích ostatních jazyků jako o cvičených opicích a všemožně z nich dělat chudáky, kteří nic nechápou narozdíl od kasty lisp-superheroes, tak to pořád platí. Dokonce to platí ještě víc, jak jistě lehce nahlédnete. Jestli ne, napiště si na to makro. Bude to takový DSL a na to jsou přece makra boží! :)

Ten aha-zážitek spočívá v tém, že jsem teprve teď pochopil, proč se tak bráníte srovnání s evalem - no není divu, když eval je daleko silnější nástroj než makro:

Kód: [Vybrat]
def KlidneNejakaStatickaInicializace():
   pass

def GenerateFlexibleClass(name,classhosting):
   classCode = """class %s:    # bez problemu pouzijeme lokalni kontext
   def __init__():
      KlidneNejakaStatickaInicializace()  # bez problemu volame normalni funkce
"""%(name,)
   classCode+=NactiKodZeSite(classhosting)  # bez problemu nacteme kod odkud chceme, nejsme omezeni jenom na samotny zdrojak...
   globals = {}
   exec classCode in globals
   return globals[name]

# tomuhle taky muzu rikat "upravil jsem si syntaxi jazyka" a "vytvoril jsem DSL"?
myFlexibleGeneratedClass = GenerateFlexibleClass("SuperClass","classfactory.testing.cz")

Kdyz jste nebyli schopni tu genialnost maker popsat strucne sami, tak jsem se na to teda trochu vic kouknul a treba za hezky povidani (i kdyz zbytecne moc dlouhy) povazuju tohle: http://www.defmacro.org/ramblings/lisp.html

Celou dobu jsem cekal, jaka bomba teda prijde - a po klasickem honeni trika, jak ho Lisp spasil a osvitil, prislo jenom tohle:

Citace
We can create macros for our to-do list items that will get called by lisp compiler and will transform the to-do list into code. Now our to-do list will be treated as code and will be executed. Suppose all we want to do is print it to standard output for the user to read:

(defmacro item (priority note)
    '(block
         (print stdout tab "Priority: "
             ~(head (tail priority)) endl)
         (print stdout tab "Note: " ~note endl endl)))

Na tom je pěkně vidět, že v jakémkoli jazyce jde udělat to samé pomocí evalu* - jednoduše z dat vygenerovat kód a ten evalovat. Akorát v tom jiném jazyce to není tak elegantní, zejména proto, že jiné jazyky se nezapisují jako derivační strom a taky proto, že nikdo neměl potřebu na to napsat nějaký elegantní vyjadřovací nástroj. Nikdo to totiž nepotřebuje.

(mimochodem - pořád nechápu, proč jste takový praktický příklad nemohli uvést hned na začátku, abysme si ušetřili tohle strašné martyrium...)

* a do jakéhokoli jazyka by se dal přidat preprocesor fungující v tom samém jazyce, kdyby to někdo byl býval chtěl

Uznávám, že je to rozhodně zajímavý koncept, ale přijde mi poněkud nebezpečný (hlavně pro znovupoužitelnost) a dost nepraktický pro ladění. Kupodivu mi to nepřijde ani nijak zvlášť zlepšující čitelnost (což má být ta hlavní výhoda)*. Není to ale hlavně nic, co by principielně nešlo v jiném jazyce - a to ***TÍM SPÍŠ***, že se to nespouští za běhu.

* protože místo abych se na jedno místo koukl, jak vypadá třeba třída, musím se koukat na deset maker, která jsou v tom zapojená.

Jinak podobně se vyjadřuje Pavel Tišnovský: http://www.root.cz/clanky/lispova-makra-aneb-programovatelny-programovaci-jazyk/nazory/153290/ - hlavně pěkně stručně vyjádřil, jak značně přeháníte v těch svých superlativech o "vytvareni noveho jazyka" apod...

Takže tak asi no... Tak jsme si to vyjasnili a nemá asi smysl se v tom dál patlat...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 01. 04. 2011, 13:32:55
Mirek vám tu přece netvrdí, že LISP je špatný jazyk. Jen nesouhlasí (nebo řekněme chce se dozvědět, proč by to byla pravda), že je to super - uber - ultra - mega krutopřísný jazyk hodící se na vše a vždy a ostatní jazyky jsou pro pitomce.

Jsem rád, že to aspoň někdo pochopil. Snad těch, co to čtou a pochopili, je víc, akorát nemají potřebu se vyjadřovat...

Taky jsem rád, že jsi doplnil to "chce se dozvědět". O nesouhlas primárně nešlo, jen o "tak mi tu krutopřísnost teda ukažte, já ji nikde nevidím".

(zde záleží na náročnosti na propojení s ostatními jazyky, což si samozřejmě musím nastudovat sám).

Tohle je třeba zásadní věc, ke které jsme se mohli dostat, kdyby ta "debata" nebyla tak ujetá. Zkoušel jsem jednou třeba propojovat CLI s Prologem a moc daleko jsem se nedostal... Pokud by to s Lispem šlo líp, byly by to pro něj nezanedbatelné body, možná i víc bodů než za celá ta nešťastná makra - jenže to jsme se nedozvěděli kvůli přehršli plků a poetických přirovnání :(

A co tomu tady chybí? Příklad. Vždyť to nemusí být ani ukázka kódu. Reálný příklad z praxe složitého problému, popsaný slovy. Nástin implementace (opět, bez ukázky kódu) v lispu.

Bylo nám řečeno, že bysme to stejně nepochopili...

Tahle diskuse by byla mnohem věcnější, kdyby si tu pár fanatiků hned na začátku nezačalo honit triko. Co si k takové komunitě totiž říct? "Hm... jazyk je to jiný (záměrně nepíši těžký), nějaká literatura k tomu je, ale co když něco nepoberu a budu se chtít zeptat? Dozvím se, že jsem cvičená opice s lepidlem?" Neměla by komunita, obzvláště pak komunita malá, vítat každého případného nováčka, člověka, co se chce něco dozvědět? Nač to elitářství? Není to kontraproduktivní (a také bezdůvodné)?

Přesně tak. Dost nemile mě překvapilo, že to samé se objevuje skoro ve všech textech o Lispu, které jsem prošel.

Třeba z toho textu, co jsem odkazoval výš:
Citace
The enlightenment came instantaneously. One moment I understood nothing, and the next moment everything clicked into place. I've achieved nirvana. Dozens of times I heard Eric Raymond's statement quoted by different people: "Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot." I never understood this statement. I never believed it could be true. And finally, after all the pain, it made sense! There was more truth to it than I ever could have imagined. I've achieved an almost divine state of mind, an instantaneous enlightenment experience that turned my view of computer science on its head in less than a single second.

That very second I became a member of the Lisp cult. I felt something a ninjitsu master must feel: I had to spread my newfound knowledge to at least ten lost souls in the course of my lifetime. I took the usual path. I was rehashing the same arguments that were given to me for years (only now they actually made sense!), hoping to convert unsuspecting bystanders. It didn't work. My persistence sparked a few people's interest but their curiosity dwindled at the mere sight of sample Lisp code. Perhaps years of advocacy would forge a few new Lispers, but I wasn't satisfied. There had to be a better way.

Z takové "komunity" se mi dělá špatně a představa, že bych se takových lidí měl na něco ptát, mě upřímně děsí...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 01. 04. 2011, 13:42:15
Neměla by komunita, obzvláště pak komunita malá, vítat každého případného nováčka, člověka, co se chce něco dozvědět? Nač to elitářství? Není to kontraproduktivní (a také bezdůvodné)?

Znovu opakuji, ze nevidim duvod, proc nekomu, kdo mi nakonec stejne patrne rekne "je to blbost" (a navic mi tvrdi, ze tomu rozumi, kdyz vidim, ze tomu nerozumi), vymyslet nejake vlastni priklady, kdyz ho muzu odkazat na literaturu, kde jsou prikladu tuny, velkych i malych, lepsich nez ja vymyslim a je to tam i lepe vysvetlene. To neni elitarstvi, to je pragmatismus. Ja na ty knizky neodkazuji z lenosti, ale protoze si myslim, ze jsou dobre (a pristupne pro zacatecnika).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 01. 04. 2011, 13:53:34
JS:
Common Lisp neznam, cili z toho kodu nejsem nijak zvlast moudry a tudiz otazka: *current-tail-marker* mi nebude branit v tom traverzovat 2 stromy paralelne zaroven (= paralelne spustit 2 nesouvisejici tail rekurze zaroven; na me urovni uvazovani a na urovni syntaxe makra, o jehoz vnitrnosti se "nemusim" zajimat, to jsou preci 2 naprosto nesouvisejici cinnosti), ze ne?

Priznam jsem, ze jsem to moc nestudoval, protoze me to tema prilis nezajima. Ale pri zbeznem pohledu si troufam tvrdit, ze *current-tail-marker* problem predstavovat nebude, protoze je to dynamicka promenna.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 01. 04. 2011, 14:02:46
Z takové "komunity" se mi dělá špatně a představa, že bych se takových lidí měl na něco ptát, mě upřímně děsí...

Hypoteticky, predpokladejme, ze ten citat je naprosto pravdivy. Co s tim podle vas ta komunita ma jako delat? Jestlize je neco tezke na pochopeni, je to proste tezke na pochopeni. Jestlize dosahnete osviceni, proste dosahnete osviceni, co s tim kdo nadela?

Ale rikat, ze o zadne osviceni se nejedna, pokud jste to sam nezkusil a neprecetl si alespon jednu z tech knizek, je dost troufale. Asi ne kazdeho osviceni ceka, stejne jako kazdy neni osviceny z matematicke analyzy, prestoze je to nesporne mozne.

(Ale ja si nemyslim, ze je to takova hruza. Obe knizky co zminuji porad dokolecka jsou velice ctive, rozhodne bych rekl ctivejsi nez rekneme dokumentace k nekterym Javovym vynalezum.)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 01. 04. 2011, 14:05:08
Milý NM,
ono asi opravdu není moc smysluplné klást otázky typu "Na co všechno je dobrý LISP", když tak koukám na tu debatu. I když jsem byl za následující argument pohaněn, přesto jsem přesvědčen o tom, že zesměšňovat nebo zpochybňovat tento typ argumentů může - sorry - jedině ignorant. Proto znova opakuji - kdyby pro žádný jiný důvod, tak Lisp stojí za pozornost přinejmenším kvůli tomu, že ho za pozoruhodný jazyk považují lidé, kteří počítačovým vědám udávají směr a přeci jen vidí o něco dále a o něco hlouběji, než my všichni tady dohromady (aniž bych se chtěl někoho tady dotknout).
Zkus si přečíst o Lispu nějaký text - třeba od Grahama - a pak nějakou učebnici - třeba Seibela. Třeba tomu přijdeš na chuť, třeba ne, třeba sám objevíš to, co ti tu nikdo není schopen zprostředkovat takhle přes diskusi. Ztracený čas to určitě nebude. Ztracený čas je spíš tato diskuse. Ono totiž právě to je největší umění - dokázat něco netriviálního vystihnout několika slovy tak, aby to pochopil každý - a pokud to tu někteří neustále požadují, nejspíš si ani sami neuvědomují, jak náročný požadavek ve skutečnosti mají.

P.S.: Když tě na Lispu tak zaujala především ta forma zápisu (make circle x y r), tak by tě možná mohly z podobného důvodu zaujmout i jazyky Forth:
x y r circle make

a Smalltalk:
Circle makeAt: x y withRadius: r.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 01. 04. 2011, 14:06:47
Jestlize dosahnete osviceni, proste dosahnete osviceni, co s tim kdo nadela?

Krásná tečka za tímhle tématem. Víc už skutečně není potřeba...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 01. 04. 2011, 14:17:47
Ono totiž právě to je největší umění - dokázat něco netriviálního vystihnout několika slovy tak, aby to pochopil každý - a pokud to tu někteří neustále požadují, nejspíš si ani sami neuvědomují, jak náročný požadavek ve skutečnosti mají.

Jednoduchý příklad z výše zmíněného textu:

Mám data v xml:
Kód: [Vybrat]
<todo name="housework">
    <item priority="high">Clean the house.</item>
    <item priority="medium">Wash the dishes.</item>
    <item priority="medium">Buy more soap.</item>
</todo>

Lispovsky je zapíšu trochu stručněji:
Kód: [Vybrat]
(todo "housework"
    (item (priority high) "Clean the house.")
    (item (priority medium) "Wash the dishes.")
    (item (priority medium) "Buy more soap."))

Tak a teď ta data chci nějak hezky vypsat. Běžný postup by byl vytvořit "složitou" soustavu smyček, které ta data budou postupně procházet a vypisovat, zatímco v Lispu napíšu "jednoduché" makro a tím "vytvořím nový jazyk". Makro vlastně jakoby magicky (SPEL) data promění přímo v kód, který můžu spustit a který ta data vypíše. Makro vypadá takhle:
Kód: [Vybrat]
(defmacro item (priority note)
    '(block
         (print stdout tab "Priority: "
             ~(head (tail priority)) endl)
         (print stdout tab "Note: " ~note endl endl)))

Takže žádné příkazy na procházení, sám strom, obsahující data, se stal stromem data vypisujícím.

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

To bylo opravdu tak těžké takovýhle příklad uvést a ušetřit si tři dny plácání? A myslíte si, že vám někdo uvěří, jakého osvícení jste s lispem dosáhli, když o takhle jednoduchém úkolu (stručně vystihnout povahu maker) napíšete "jak *náročný požadavek* ve skutečnosti mají"?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 01. 04. 2011, 14:28:19
To bylo opravdu tak těžké takovýhle příklad uvést a ušetřit si tři dny plácání? A myslíte si, že vám někdo uvěří, jakého osvícení jste s lispem dosáhli, když o takhle jednoduchém úkolu (stručně vystihnout povahu maker) napíšete "jak *náročný požadavek* ve skutečnosti mají"?

Ano, bylo to tezke, protoze jste nam tu tvrdil, ze makrum rozumite. Co porad po nas chcete? Abychom Ctrl+C,Ctrl+V zkopirovali neco z jine stranky? Neumite pouzivat prohlizec?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 01. 04. 2011, 14:32:46
Ano, bylo to tezke, protoze jste nam tu tvrdil, ze makrum rozumite.

Říkal jsem, že se domnívám, že základnímu principu rozumím - a nerozumím tomu, co je na něm tak kulervoucího - a proto bych tu kulervoucnost chtěl vidět na nějakém konkrétním příkladě.

A zákadnímu principu jsem skutečně rozuměl, jen jsem si myslel, že je trochu mocnější než jenom normální preprocesor.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 01. 04. 2011, 14:42:43
To bylo opravdu tak těžké takovýhle příklad uvést a ušetřit si tři dny plácání? A myslíte si, že vám někdo uvěří, jakého osvícení jste s lispem dosáhli, když o takhle jednoduchém úkolu (stručně vystihnout povahu maker) napíšete "jak *náročný požadavek* ve skutečnosti mají"?

Opět sorry, ale já ti fakt do hlavy nevidím, abych dokázal posoudit, který příklad budeš akceptovat a který odmítneš, protože se ti nelíbí. Nikde tu nikdo z nás netvrdil, že jsme pedagogové. Proto jsme odkazovali na jiné texty (což jsi usilovně odmítal) nebo tu padly asi pro člověka, který o tom nic neví, nevhodné příklady. Právě proto trvám na svém - jo, fakt to je náročný požadavek - vymyslet vhodný příklad nebo posoudit vhodnost příkladu z hlediska jeho pochopitelnosti. Ale to tvrdil už Komenský, že to není žádná legrace.
Ano, ten tebou uvedený příklad je pěkný a snad je z něj také patrno, že v Lispu člověk musí myslet trochu jinak, chce-li využít jeho potenciál a taky to, jak se ta makra dají také použít.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 01. 04. 2011, 14:46:25
ten priklad s tim XML je divny... ta kombinace dat/maker/vystupu neni zrovna ukazkovy priklad na makra, ale budiz, jestli jsi chtel videt toto...

Citace
A zákadnímu principu jsem skutečně rozuměl, jen jsem si myslel, že je trochu mocnější než jenom normální preprocesor.

...rika clovek, co si mysli, ze funkce eval je lepsi vynalez :-]] FYI, je to ,,normalni preprocesor'', ktery ma vyjadrovaci schopnosti a funkce stejne jako jazyk, coz z neho dela vcelku ,,nenormalni preprocesor''
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 01. 04. 2011, 14:47:53
Nikde tu nikdo z nás netvrdil, že jsme pedagogové.

Ne, vy jste jenom tvrdili, že jste osvícení a že nejste cvičené opice. Jak už jsem řekl, vypadá to teď ex post trochu směšně ve světle toho, že jste nebyli schopní vypotit takovýhle triviální praktický příklad.

Ale to je jedno, nechme to být...

...koneckonců něco pravdy na tom je, že když je někdo osvícený, má ho největšího a nejdál dočůrá, tak to ještě neznamená, že dokáže stručně a srozumitelně vysvětlit triviální věc ;)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 01. 04. 2011, 14:48:56
...rika clovek, co si mysli, ze funkce eval je lepsi vynalez :-]]

Přečti si pořádně, co jsem napsal. A pak použij svou osvícenou mysl.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 01. 04. 2011, 15:03:37
ehm...

Citace
V tom případě teda musím upravit tvrzení, že eval je stejně silný nástroj, jen trochu neohrabanější na tvrzení "eval je daleko silnější nástroj, i když trochu neohrabaný" - všechno, co se dá udělat makrem, se dá udělat evalem, ale ne naopak
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 01. 04. 2011, 15:04:40
ehm...

Citace
V tom případě teda musím upravit tvrzení, že eval je stejně silný nástroj, jen trochu neohrabanější na tvrzení "eval je daleko silnější nástroj, i když trochu neohrabaný" - všechno, co se dá udělat makrem, se dá udělat evalem, ale ne naopak

No a? Na tom trvám.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 01. 04. 2011, 15:13:53
JS:
"Priznam jsem, ze jsem to moc nestudoval, protoze me to tema prilis nezajima. Ale pri zbeznem pohledu si troufam tvrdit, ze *current-tail-marker* problem predstavovat nebude, protoze je to dynamicka promenna."

moc ti to neverim :-)
rovnez jsem to nijak nestudoval, navic Lisp, na rozdil od tebe (resp. v te roli tu vystupujes), neznam, ale prijde mi, ze v pripade mutually recursive (sakra, jak cesky?) volani to ty funkce (napr. licha, suda) musi nejakym zpusobem sdilet, neb do te promenne ukladaji misto skoku (resp. kontinuaci)
jak s tim asi zahybe nejaka jina rekurze spustena ve stejnou dobu?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 01. 04. 2011, 15:22:56
tak to ještě neznamená, že dokáže stručně a srozumitelně vysvětlit triviální věc ;)

...nebo třeba i dokáže, ale z toho ještě neplyne, že to každý je schopen pochopit. :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 01. 04. 2011, 15:26:19
jak s tim asi zahybe nejaka jina rekurze spustena ve stejnou dobu?

Myslim, ze nezahybe, protoze jak rikam, je to dynamicka promenna. (Neni mi jasne, jestli tomu prikladu ve skutecnosti rozumis, jen se me snazis chytit za slovo, nebo nevis, co je dynamicka promenna.) To znamena, ze jeji redefinice pomoci let v dalsim scope jen zastini jeji predchozi hodnotu (zmeni se binding, nikoli hodnota).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: koroptev 01. 04. 2011, 15:30:41
aha, tak opet beru zpet, vypada to, ze to to makro zvladne; holt neznam zpusob prace s promennymi v CL
porad se mi nelibi fakt, ze nekde opakovane prirazuji do stejneho mista, ale v tomto pripade me nenapada dobry duvod/priklad, kterym bych demonstroval "zavadnost" tohoto jiny nez nejaky fundamentalismus, cili - diky za link, paklize se na CL budu divat, toto makro se mi bude velmi libit
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 01. 04. 2011, 18:21:12
Dovolte mi abych na okamzik vyrusil diskusi, ktera se z nazorove vyhraneneho za slova chytajiciho souboje (kdy jsem musel uz zasahnout) zmenila v programatorsko-politicke klani. Predeslou vetu prosim berte z nadhledem a nechytejte me prosim vas za slova, chtel jsem ve vas vzbutit jemny usmev.

Ale zda se, ze nase diskuse se stala druhou nejdiskutovanejsi diskusi na rootu (viz. uvodni stranka root.cz -> okenko Forum -> zalozka Nejdiskutovanejsi) a za jeste asi tak 15 prispevku bude na prvnim miste. A prilakala priblizne na 4000 zhlednuti, coz je asi tak vyssi prumer.

No ale, jak jsem uz zde rikal, snazim se z diskuse si vzdycky neco odnest. Takze co si odnasim. Nazory vynecham, to me moc nezajima a nechci nad tim premyslet, snad jen to, ze jsem se obcas dobre pobavil. Ale z uzitecnych veci si odnasim spoustu odkazu na spoustu stranek o Lispu (cca 1, 2, 3...pockat...um...zatim je to 37 odkazu). Vsechny nejsou primo z diskuse, ale z diskuse prameni a spusta z nich obsahuje spoustu materialu a dalsich odkazu, takze budu mit co delat.

Jinak jsem si odnesl i to, ze me ve skole ceka teda spusta prace, naucit se ruzny pojmy a ruzny veci, jako lambda kalkul, turinguv stroj, line lenosive ja nevim co, atd. To jsem zvedav, jestli tu skolu vubec dokoncim :)

Mezitim, co jsme tady ze sebe doslova zdimali nejake ty schopne odpovedi, tak jsem zahajil jeste na ABCLinuxu anketu o tom, v jakych programovacich jazycich tam navstevnici stranek programuji (podobnou anketu jsem zahajil i zde na rootu) a take jsem si precetl kratkou diskusi o LISPu take na ABCLinuxu, tak pro toho, koho by to zajimalo jsou zde odkazy:

anketa: root.cz...http://forum.root.cz/index.php?topic=1990.msg15433;topicseen#new (http://forum.root.cz/index.php?topic=1990.msg15433;topicseen#new)

anketa: ABCLinuxu.cz...http://www.abclinuxu.cz/blog/novomente/2011/4/anketa-v-jakych-jazycich-programuji-duben-kveten-2011 (http://www.abclinuxu.cz/blog/novomente/2011/4/anketa-v-jakych-jazycich-programuji-duben-kveten-2011)

o Lispu na ABCLinuxu.cz...http://www.abclinuxu.cz/poradna/programovani/show/306322 (http://www.abclinuxu.cz/poradna/programovani/show/306322)

Z tech anket je zatim dost videt, jak malo LISParu navstevuje ty stranky.

Zaverem bych se jeste zeptal, jestli nekdo nema nejaky tip na dalsi stranky, jako jsou root nebo abclinuxu, o programovani, kam chodeji zkuseny programatori diskutovat?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 01. 04. 2011, 22:16:27
Zaverem bych se jeste zeptal, jestli nekdo nema nejaky tip na dalsi stranky, jako jsou root nebo abclinuxu, o programovani, kam chodeji zkuseny programatori diskutovat?

Nic ve zlem, ale mne se to spamovani anketou moc nelibi. Kazdopadne, dobre stranky o programovani jsou http://stackoverflow.com/ (http://stackoverflow.com/). Co se tyce ponekud akademickeho pohledu na programovaci jazyky, http://lambda-the-ultimate.org/ (http://lambda-the-ultimate.org/). A konecne, existuje CL wiki http://www.cliki.net/index (http://www.cliki.net/index).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 02. 04. 2011, 04:56:24
Nic ve zlem, ale mne se to spamovani anketou moc nelibi.
Nemyslel jsem to jako spam. Myslel jsem, ze by to mohlo tady nekoho zajimat (zejmena ty cisla u Lispu). Ale budiz, priste si dam na ty odkazy vetsi pozor.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blizz 02. 04. 2011, 14:10:41
Zaverem bych se jeste zeptal, jestli nekdo nema nejaky tip na dalsi stranky, jako jsou root nebo abclinuxu, o programovani, kam chodeji zkuseny programatori diskutovat?

root a abclinuxu nie sú stránky o programovaní, ale o linuxe a open source. o programovaní sa tu veľa nedozvieš(max o programovaní v linuxe), nechodia sem totiž programátori, ale správcovia serverov.

cz dikusie o programovaní:

http://forum.builder.cz/

http://forum.zive.cz/forum-922/Programovani.html

http://programujte.com/?akce=diskuze
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 02. 04. 2011, 17:07:21
root a abclinuxu nie sú stránky o programovaní, ale o linuxe a open source. o programovaní sa tu veľa nedozvieš(max o programovaní v linuxe), nechodia sem totiž programátori, ale správcovia serverov.

No to bych tedy rozhodne netvrdil. Zminene stranky jsem sice neznal, ale ani me (jako programatora) nejak zvlast neoslovily.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: karel 02. 04. 2011, 17:57:31
Ty fóra jsou spíš pro začátečníky. Převážně se tam řeší zadání domácích úkolů a na builderu se exhibuje pár šílenců. Stránky pro programátory obecně asi nejsou, ale dají se najít mail konference nebo blogy co se vážou k technologii co tě zajímá. např. pro javu, .NET a související technologie je celkem dobrá stránka (spíš takový výběr z blogů) http://www.dzone.com/ (http://www.dzone.com/).
Jinak s tím, že se o programování na root.cz nebo abclinuxu moc nedozvíš se dá určitě souhlasit. Kromě článků od P.Tišnovského (a ty jsou zase hodně technologicky zaměřené) jsou to jenom tutoriály. Flamy ve fóru taky moc informativní nejsou.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 02. 04. 2011, 18:15:40
Říkal jsem, že se domnívám, že základnímu principu rozumím - a nerozumím tomu, co je na něm tak kulervoucího - a proto bych tu kulervoucnost chtěl vidět na nějakém konkrétním příkladě.

Muzes jeste zkusit http://stackoverflow.com/questions/267862/what-makes-lisp-macros-so-special (http://stackoverflow.com/questions/267862/what-makes-lisp-macros-so-special).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 04:14:40
Muzes jeste zkusit http://stackoverflow.com/questions/267862/what-makes-lisp-macros-so-special (http://stackoverflow.com/questions/267862/what-makes-lisp-macros-so-special).

No konečně odkaz na někoho, kdo mluví o lispu a nemastí si při tom ego. Hned ta první zvýrazněná věta pěkně a věcně vyjadřuje podstatu:

Citace
A Lisp macro is not handed a string, but a preparsed piece of source code in the form of a list, because the source of a Lisp program is not a string; it is a list.

Souhlasím, v tomhle je lispová koncepce skutečně zajímavá, však jsem to tady taky několikrát psal.

Žádné plky o "vytváření vlastního jazyka", ale stručný a jasný popis reality. Palec nahoru, klobouk dolů!

...a autor pokračuje ve stejném stylu:
Citace
What is really happening here is that "setf" is a macro. **At compile time**, it examines its arguments, [...] And it quietly **rewrites the code** in place to:

Opět žádné nesmysly o cvičených opicích, lepidlech, žádná komixová pohádka o lispu, který zachraňuje planetu před zhroucením. Žádné vznešenosti o rozšiřování překladače a osvícení. Jen jednoduchá a strohá pravda: "přepisuje zdroják".

Díky! Jen škoda, že to nepřišlo dřív...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 03. 04. 2011, 11:54:07
Muzes jeste zkusit http://stackoverflow.com/questions/267862/what-makes-lisp-macros-so-special (http://stackoverflow.com/questions/267862/what-makes-lisp-macros-so-special).

No konečně odkaz na někoho, kdo mluví o lispu a nemastí si při tom ego. Hned ta první zvýrazněná věta pěkně a věcně vyjadřuje podstatu:

Citace
A Lisp macro is not handed a string, but a preparsed piece of source code in the form of a list, because the source of a Lisp program is not a string; it is a list.

Souhlasím, v tomhle je lispová koncepce skutečně zajímavá, však jsem to tady taky několikrát psal.

Žádné plky o "vytváření vlastního jazyka", ale stručný a jasný popis reality. Palec nahoru, klobouk dolů!

...a autor pokračuje ve stejném stylu:
Citace
What is really happening here is that "setf" is a macro. **At compile time**, it examines its arguments, [...] And it quietly **rewrites the code** in place to:

Opět žádné nesmysly o cvičených opicích, lepidlech, žádná komixová pohádka o lispu, který zachraňuje planetu před zhroucením. Žádné vznešenosti o rozšiřování překladače a osvícení. Jen jednoduchá a strohá pravda: "přepisuje zdroják".

Díky! Jen škoda, že to nepřišlo dřív...

Ty jsi tedy opravdu případ... Vždyť tohle ti tu bylo řečeno asi dvacet krát! Ale jak praví klasik, "to už říkal starej hostinskej Rampa na Vinohradech, když mu chtěl někdo zůstat dlužen, že přijde někdy na člověka takovej moment, že je ke všemu hluchej jako pařez."
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 12:10:37
Ty jsi tedy opravdu případ... Vždyť tohle ti tu bylo řečeno asi dvacet krát! Ale jak praví klasik, "to už říkal starej hostinskej Rampa na Vinohradech, když mu chtěl někdo zůstat dlužen, že přijde někdy na člověka takovej moment, že je ke všemu hluchej jako pařez."

No právě že nebylo. Minimálně ne takhle stručně a jasně. Kdyby někdo na otázku "A co je na lispu tak zajímavého?" odpověděl "Docela zajímavá jsou makra - je to použití samotného lispu v preprocesoru k potenciálně složitému přepisování zdrojáku před jeho překladem, s čímž se pak dají dělat zajímavá kouzla", tak jsme si všichni mohli ušetřit dost času a nervů...

...páč bysme to asi během chvilky zhodnotili tak, že to je zajímavé, ale těžko to může vyvážit praktické nevýhody reálného nasazení lispu...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Petr Mejzlík 03. 04. 2011, 13:00:18
No právě že nebylo. Minimálně ne takhle stručně a jasně. Kdyby někdo na otázku "A co je na lispu tak zajímavého?" odpověděl "Docela zajímavá jsou makra - je to použití samotného lispu v preprocesoru k potenciálně složitému přepisování zdrojáku před jeho překladem, s čímž se pak dají dělat zajímavá kouzla", tak jsme si všichni mohli ušetřit dost času a nervů...
Souhlasím.
...páč bysme to asi během chvilky zhodnotili tak, že to je zajímavé, ale těžko to může vyvážit praktické nevýhody reálného nasazení lispu...
Jak to můžeš vědět?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 13:05:37
Jak to můžeš vědět?

Máš pravdu, měl jsem mluvit za sebe. Takže se opravuju: já bych to zhodnotil tak, že to nemůže praktické nevýhody vyvážit. A samozřejmě to nevím, ale odhaduju.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blizz 03. 04. 2011, 13:15:44
..
Takove veci samozrejme existuji, ale nejsou zadarmo (LispWorks, Allegro CL). Co se tyce OSS knihoven, quicklisp.org. V podstate oboji uz tu padlo, co takhle precist si nejdriv poradne diskusi?

Omlúvam sa, ale na to fakt nemám čas.

Jinak pokud budete mit dobre programatory, bude to rychleji a za nizsi cenu. Pokud budete mit lepice, vyjde to nastejno.

Dobrý programátor je lepič kódu. Práca kvalitného vývojára je založená na kooperácii a deľbe práce. nebude znovu onbjavovať koleso keď ho už objavil niekto pred ním a vyladil ho k dokonalosti, dobrý programátor sa sústredí len na riešenie problému. Väčšinu času venuje štúdiu, knižníc, frameworkov a návrhových vzorov. Je lacný rýchly a efektívny.

Zlý programátor sa nevenuje štúdiu knižníc a frameworkov lebo je lenivý, zlý programátor, nepoužíva mozog, zlý programátor len produkuje zlý kód, programuje všetko sám a odznova, a preto je pomalý, drahý a neefektívny. Takého programátora nikto nechce.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 03. 04. 2011, 13:30:37
Citace
No právě že nebylo. Minimálně ne takhle stručně a jasně. Kdyby někdo na otázku "A co je na lispu tak zajímavého?" odpověděl "Docela zajímavá jsou makra - je to použití samotného lispu v preprocesoru k potenciálně složitému přepisování zdrojáku před jeho překladem, s čímž se pak dají dělat zajímavá kouzla", tak jsme si všichni mohli ušetřit dost času a nervů...

vazne? kdosi, kdysi tu napsal...

Citace
vyhodou je, ze makrojazyk v LISPu je taky LISP takze jde vyuzit v plne mire jeho vyjadrovacich schopnosti a funkci (to v C nejde) a ... makra v takovem pripade slouzi k rozsireni vyjadrovacich schopnosti jazyka. to umoznuje uzpusobit si jazyk potrebam dane situace a tudiz zefektivnit psani.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 03. 04. 2011, 13:35:02
Citace
Dobrý programátor je lepič kódu. Práca kvalitného vývojára je založená na kooperácii a deľbe práce. nebude znovu onbjavovať koleso keď ho už objavil niekto pred ním a vyladil ho k dokonalosti, dobrý programátor sa sústredí len na riešenie problému. Väčšinu času venuje štúdiu, knižníc, frameworkov a návrhových vzorov. Je lacný rýchly a efektívny.

a uvedomujes si, ze podle tve logiky autori tech knihoven, frameworku a navrhovych vzoru jsou prave ti spatni programatori? :-]]
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 13:37:42
Citace
No právě že nebylo. Minimálně ne takhle stručně a jasně.

vazne? kdosi, kdysi tu napsal...

Citace
vyhodou je, ze makrojazyk v LISPu je taky LISP takze jde vyuzit v plne mire jeho vyjadrovacich schopnosti a funkci (to v C nejde) a ... makra v takovem pripade slouzi k rozsireni vyjadrovacich schopnosti jazyka. to umoznuje uzpusobit si jazyk potrebam dane situace a tudiz zefektivnit psani.

Schválně, jestli si uděláš představu o přínosnosti ZDRBUGU pro tvoje auto:

Výhodou je, ze ZDRBUG je taky součástí auta, takže jde využít v plné míře jeho schopností a funkcí (to třeba s přídavným vozíkem nejde) a ... ZDRBUG v takovém případě slouží k rozšíření schopností auta. To umožňuje přizpůsobit si auto potřebám dané situace a tudíž zefektivnit ježdění. 

Prodám ti ZDRBUG za padesát tisíc. Vyplatí se ti to?

Nebudeš mít potřebu ze mě vytáhnout, v čem je kurnik teda ten ZDRBUG tak dokonalý a jedinečný?

Asi jsem teda blbej, že ten výše uvedený odstavec nepovažuju za stručný a výstižný popis...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 13:39:28
a uvedomujes si, ze podle tve logiky autori tech knihoven, frameworku a navrhovych vzoru jsou prave ti spatni programatori? :-]]

Ne. Oni totiž taky používají knihovny a frameworky, pokud je to v dané situaci vhodné.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blizz 03. 04. 2011, 13:40:28
Citace
Dobrý programátor je lepič kódu. Práca kvalitného vývojára je založená na kooperácii a deľbe práce. nebude znovu onbjavovať koleso keď ho už objavil niekto pred ním a vyladil ho k dokonalosti, dobrý programátor sa sústredí len na riešenie problému. Väčšinu času venuje štúdiu, knižníc, frameworkov a návrhových vzorov. Je lacný rýchly a efektívny.

a uvedomujes si, ze podle tve logiky autori tech knihoven, frameworku a navrhovych vzoru jsou prave ti spatni programatori? :-]]

Asi si to nepochopil, zaujímavý článok na túto tému je: http://vbnet.cz/blog-clanek--131-dva_programatorske_pristupy.aspx
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 13:45:28
Asi si to nepochopil, zaujímavý článok na túto tému je: http://vbnet.cz/blog-clanek--131-dva_programatorske_pristupy.aspx

Tohle je naprostá pravda:
Citace
Na Matfyzu nám říkali, že programování je hlavně o teorii a algoritmech, že jazyk nebo technologii se už naučíme za týden. S tím bych si dovolil polemizovat, základy .NET frameworku se za týden pochytit dají, pokud člověk má obecné programátorské znalosti, ale aby člověk programoval pořádně a elegantně, musí mít s touto technologií alespoň půl roku zkušeností.

Programování je už dávno nejenom o znalosti algoritmů a jazyka, ale především o znalosti dostupných nástrojů. Někdo ale má v dané technologii k dispozici tak zoufale málo nástrojů, že má potřebu ostatní ohromovat tím, že má nástroje k vytváření nástrojů...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 03. 04. 2011, 13:47:52
Asi si to nepochopil, zaujímavý článok na túto tému je: http://vbnet.cz/blog-clanek--131-dva_programatorske_pristupy.aspx

Nic proti, ale nejak v tom clanku nevidim ty dva pristupy. O algoritmech toho vim troufam si tvrdit pomerne dost, a presto pokud v praci predpokladam, ze C# neco umi, hledam to v Google. Me prijde, ze vyuzivat uz napsaneho dava smysl vzdy. O tom ale debata "Lisp vs. to ostatni" vubec neni.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blizz 03. 04. 2011, 13:48:03
...

presne (http://s.aimg.sk/projects/css/diva/img/smiles/506.gif)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 03. 04. 2011, 14:30:15
Citace
Dobrý programátor je lepič kódu. Práca kvalitného vývojára je založená na kooperácii a deľbe práce. nebude znovu onbjavovať koleso keď ho už objavil niekto pred ním a vyladil ho k dokonalosti, dobrý programátor sa sústredí len na riešenie problému. Väčšinu času venuje štúdiu, knižníc, frameworkov a návrhových vzorov. Je lacný rýchly a efektívny.

a uvedomujes si, ze podle tve logiky autori tech knihoven, frameworku a navrhovych vzoru jsou prave ti spatni programatori? :-]]

To právě záleží na situaci. Pokud už adekvátní knihovna existuje, je psaní nové (uděláme si to po svém, ať to stojí, co to stojí) holý nesmysl. Pokud adekvátní knihovna neexistuje, ale existuje přijatelný základ, je nejlepší udělat další abstrakci. Až jako poslední instanci beru vytvoření celé nové knihovny od začátku do konce.

U jazyků to vidím podobně. Pokud je majoritní jazyk (třeba Java) použitelný a máme k dispozici vyspělou platformu a lidi, kteří jazyk ovládají, zůstaňme u ní. Pokud si můžeme zvolit jiný jazyk nad dobrou platformou a je to oprávněné (velikost projektu, schopní vývojáři, zkušenosti s novým jazykem), použijme ten jiný jazyk. Pokud máme  velký existující projekt v Lispu, nebudeme ho přepisovat do jiného jazyka, ale rozšíříme Lisp podle potřeby o nové konstrukce pomocí maker. Ale pokud ta makra mají pouze vytvářet konstrukce, které novější jazyky dávno mají, nevidím moc důvodů pro nový projekt nepoužít jiný jazyk.

Dosud jsme se bavili vesměs na teoretické rovině. Jediné dva praktické příklady, které jsem tu viděl, bylo opožděné vyhodnocení výrazu (uzávěr s pamětí - protiargumentoval jsem lambdou s dekorátorem), uzamykání vstupu do funkce (protiargument opět dekorátor) a viděl jsem dva odkazy (simulace LINQ pomocí Lispu a parsování binárních souborů). Podle mě vesměs nic, co by nešlo v jiných jazycích udělat také za srovnatelných obtíží. Věřím například, že ta lispovská řešení s makry budou po překladu pomocí SBCL/rychlého Scheme kompilátoru rychlejší než třeba Python (u Scaly nebo haskellovské monády už bych byl k tomu zrychlení skeptičtější). Ale pouze v kontextu většího projektu by se vidělo, jak velká je skutečně výhoda použití maker (obdoba Amdahlova zákona).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 14:40:46
Jediné dva praktické příklady, které jsem tu viděl [...] Podle mě vesměs nic, co by nešlo v jiných jazycích udělat také za srovnatelných obtíží.

No ještě jsem sem dával ten příklad s vypsáním xml, to je hezká hříčka, ale o praktičnosti takového řešení by se dalo diskutovat...

Kromě toho tady zaznělo, že pomocí maker by se daly stručně napsat třeba definice spousty tříd, které mají dostatečný společný základ.

Něco jako (pseudokód)
Kód: [Vybrat]
defmacro MyHandler (name)
{
   class ${name}: XYZHandler {
     ...
   }
}

MyHandler(JabberMessageHandler)
MyHandler(ConsoleMessageHandler)
MyHandler(TcpMessageHandler)

handler = JabberMessageHandler()

Jako jo, no... v hodně divokých snech si dovedu představit, že by se to k něčemu mohlo hodit...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 03. 04. 2011, 15:03:32
Kromě toho tady zaznělo, že pomocí maker by se daly stručně napsat třeba definice spousty tříd, které mají dostatečný společný základ.

Něco jako (pseudokód)
Kód: [Vybrat]
defmacro MyHandler (name)
{
   class ${name}: XYZHandler {
     ...
   }
}

MyHandler(JabberMessageHandler)
MyHandler(ConsoleMessageHandler)
MyHandler(TcpMessageHandler)

handler = JabberMessageHandler()

Jako jo, no... v hodně divokých snech si dovedu představit, že by se to k něčemu mohlo hodit...

Mně to přijde jako typická násobná dědičnost, snad dokonce pouhý mixin (trait v terminologii Scaly). Ano, pár znaků se při vytvoření každé nové třídy ušetřit dá, ale...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 15:31:52
Mně to přijde jako typická násobná dědičnost, snad dokonce pouhý mixin (trait v terminologii Scaly). Ano, pár znaků se při vytvoření každé nové třídy ušetřit dá, ale...

V tomhle jednoduchym pripade jo, ale samozrejme by se to asi dalo pouzit nejak vychytraleji. Nicmene cim vychytralejsi pouziti, tim tezsi bude precist, co vlastne ten kod dela a tim horsi bude i ladeni... Takze to zas takova bomba neni...

P.S. jen tak ze srandy trochu priblbla implementace v Pythonu :)

Kód: [Vybrat]
# cat test.py
#!/usr/bin/python

def defmacro(name,code):
   # pomocna funkce
   def macrodef(params,code):
      exec code%params in globals()
   globals()[name]=lambda params: macrodef(params,code)

# ukazeme, ze muzeme v klidu dedit z normalniho kodu
class XYZHandler(object):
   def test(self):
      print "XYZHandler.test()"
      print "    self=%s"%(self,)

# timhle nadefinujeme FUNKCI MyHandler, jejimz spustenim
# nadefinujeme konkretni (parametrizovanou) tridu
defmacro("MyHandler","""
class %(className)s(%(superClass)s):
   def test(self):
      super(%(className)s,self).test()
      print "%(className)s.test()"
      print "    self="+str(self)
""")

# nadefinujeme tridu JabberMessageHandler
MyHandler({'className':'JabberMessageHandler','superClass':'XYZHandler'})

# nadefinujeme tridu SuperJabberMessageHandler, ktera dedi z predchozi
MyHandler({'className':'SuperJabberMessageHandler','superClass':'JabberMessageHandler'})

handler1 = JabberMessageHandler()
print "=====> Testuju handler1"
handler1.test()

handler2 = SuperJabberMessageHandler()
print "\n=====> Testuju handler2"
handler2.test()
Kód: [Vybrat]
# ./test.py
=====> Testuju handler1
XYZHandler.test()
    self=<__main__.JabberMessageHandler object at 0x1004cc890>
JabberMessageHandler.test()
    self=<__main__.JabberMessageHandler object at 0x1004cc890>

=====> Testuju handler2
XYZHandler.test()
    self=<__main__.SuperJabberMessageHandler object at 0x1004cc8d0>
JabberMessageHandler.test()
    self=<__main__.SuperJabberMessageHandler object at 0x1004cc8d0>
SuperJabberMessageHandler.test()
    self=<__main__.SuperJabberMessageHandler object at 0x1004cc8d0>

:)

P.P.S. člověk musí mít hodně drzosti, aby tvrdil, že takhle "vlastně vytvořil nový jazyk"...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 03. 04. 2011, 17:39:22
Citace
Schválně, jestli si uděláš představu o přínosnosti ZDRBUGU pro tvoje auto:

jelikoz jsi prohlasoval, ze vis, co jsou makro, tak jsem tak nejak predpokladal, ze vis, ze se pouzivaji k prepisovani kodu. uznavam, byla to ma chyba.

Citace
Nebudeš mít potřebu ze mě vytáhnout, v čem je kurnik teda ten ZDRBUG tak dokonalý a jedinečný?

nevim, ale urcite nebudu prohlasovat, ze vim, co to je... a kdyz mi nekdo nabidne materialy k nastudovani, tak si je prectu a nebudu se tvarit povysene, protoze ostatni jsou takovi idioti a neumi mi to vysvetlit

Citace
U jazyků to vidím podobně. Pokud je majoritní jazyk (třeba Java) použitelný a máme k dispozici vyspělou platformu a lidi, kteří jazyk ovládají, zůstaňme u ní.

...s takovym pristupem dodnes piseme kod v assembleru :-]]

Citace
simulace LINQ pomocí Lispu

LINQ je hezky priklad. Aby sel pridat LINQ do C#, tak bylo potreba udelat zasadni zasahy do specifikace jazyka, kterou navic musel udelat microsoft... a ty to zmeny tam budou trcet navzdy, kvuli zpetne kompatibilite. V LISPu by to byla jen knihovna maker, kterou by pouzivali jen ti co ji chcou/potrebuji a technicky by sis ji mohl napsat ty sam.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 17:42:37
@deda.jabko: je to furt dokola, nemám potřebu v tom pokračovat po 101ní
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 03. 04. 2011, 17:46:33
@deda.jabko: je to furt dokola, nemám potřebu v tom pokračovat po 101ní

No vidis, a pritom by stacilo, aby jsi uznal, ze s tim LINQ ma deda.jabko uplnou pravdu.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 17:52:39
No vidis, a pritom by stacilo, aby jsi uznal, ze s tim LINQ ma deda.jabko uplnou pravdu.

Jasne, vsichni mate pravdu. Kdyz jste osviceni, tak co holt mate delat :)

Jen tak pro osvezeni znovu citat Pavla Tišnovského (cvičená opice?):
Citace

Pridani nove syntakticke kategorie je tedy velmi jednoduche, protoze vlastne samotna syntaxe zustava nezmenena (treba smycky v LISPu neni nic jineho nez specialni forma)
http://www.root.cz/clanky/lispova-makra-aneb-programovatelny-programovaci-jazyk/nazory/153290/

(pochopitelne zustalo bez odpovedi...)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 03. 04. 2011, 18:08:18
Citace
U jazyků to vidím podobně. Pokud je majoritní jazyk (třeba Java) použitelný a máme k dispozici vyspělou platformu a lidi, kteří jazyk ovládají, zůstaňme u ní.

...s takovym pristupem dodnes piseme kod v assembleru :-]]

To právě ne. Domény, které se pomocí výpočetní techniky řeší, přerostly použitelnost assembleru už v době Lispu. Kdyby ne, jazyky vyšší úrovně by nerostly jako houby po dešti.

Citace
simulace LINQ pomocí Lispu

LINQ je hezky priklad. Aby sel pridat LINQ do C#, tak bylo potreba udelat zasadni zasahy do specifikace jazyka, kterou navic musel udelat microsoft... a ty to zmeny tam budou trcet navzdy, kvuli zpetne kompatibilite. V LISPu by to byla jen knihovna maker, kterou by pouzivali jen ti co ji chcou/potrebuji a technicky by sis ji mohl napsat ty sam.

Bezesporu. Jenže podobné DSL lze dnes napsat i ve Scale, v Ruby nebo v Pythonu, dokonce i v C++. Akorát syntaxe bude trochu jiná.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 03. 04. 2011, 18:18:37
Citace
Jasne, vsichni mate pravdu. Kdyz jste osviceni, tak co holt mate delat

to je smutne

Citace
Citace
Pridani nove syntakticke kategorie je tedy velmi jednoduche, protoze vlastne samotna syntaxe zustava nezmenena (treba smycky v LISPu neni nic jineho nez specialni forma)

http://www.root.cz/clanky/lispova-makra-aneb-programovatelny-programovaci-jazyk/nazory/153290/

to s rozsirovanim syntaxe je bezne zkratka, protoze vysvetlovat nekomu, kdo nezna lisp, co je to specialni forma, by nemelo smysl.

jinak syntaxe jako takova v LISPu rozsirit opravdu jde, protoze v LISPu jde preprogramovat i reader, ktery se stara o nacteni jednotlivych vyrazu. imho, by me zajimalo, kolik dalsich jazyku jeste neco takoveho umi. :-]]
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 18:23:14
jinak syntaxe jako takova v LISPu rozsirit opravdu jde, protoze v LISPu jde preprogramovat i reader, ktery se stara o nacteni jednotlivych vyrazu. imho, by me zajimalo, kolik dalsich jazyku jeste neco takoveho umi. :-]]

Gratuluju.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 03. 04. 2011, 18:48:19
jinak syntaxe jako takova v LISPu rozsirit opravdu jde, protoze v LISPu jde preprogramovat i reader, ktery se stara o nacteni jednotlivych vyrazu. imho, by me zajimalo, kolik dalsich jazyku jeste neco takoveho umi. :-]]

No, není jich asi tolik, ale něco podobného lze dělat v jiných jazycích (různým způsobem): http://nemerle.org/wiki/index.php?title=Features (http://nemerle.org/wiki/index.php?title=Features), http://www.cs.utah.edu/flux/papers/pldi02-maya-base.html (http://www.cs.utah.edu/flux/papers/pldi02-maya-base.html) a koneckonců i http://lampsvn.epfl.ch/trac/scala/browser/compiler-plugins (http://lampsvn.epfl.ch/trac/scala/browser/compiler-plugins). Jasně že tam chybí tradice a zřejmě i vyzrálost Lispu, ale pracuje se na tom. Ve světě Pythonu bych čekal, že se něco podobného brzy objeví kolem projektu PyPy (pokud to už neexistuje).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 18:54:38
No, není jich asi tolik, ale něco podobného lze dělat v jiných jazycích (různým způsobem): http://nemerle.org/wiki/index.php?title=Features (http://nemerle.org/wiki/index.php?title=Features), http://www.cs.utah.edu/flux/papers/pldi02-maya-base.html (http://www.cs.utah.edu/flux/papers/pldi02-maya-base.html) a koneckonců i http://lampsvn.epfl.ch/trac/scala/browser/compiler-plugins (http://lampsvn.epfl.ch/trac/scala/browser/compiler-plugins). Jasně že tam chybí tradice a zřejmě i vyzrálost Lispu, ale pracuje se na tom. Ve světě Pythonu bych čekal, že se něco podobného brzy objeví kolem projektu PyPy (pokud to už neexistuje).

http://boo.codehaus.org/Syntactic+Macros

V Lispu je to ale samozřejmě daleko osvíceněji udělaný...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 03. 04. 2011, 21:46:35
:-]] to jsou hezke priklady... ale popisuji priblizne to, co v LISPu delaji makra. preprogramovani readeru jde jeste o uroven niz a umoznuje zmenit, jak se bude vstup parsovat.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 03. 04. 2011, 21:58:06
http://boo.codehaus.org/Syntactic+Macros

V Lispu je to ale samozřejmě daleko osvíceněji udělaný...

Tak na tomto se shodneme. :-)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 03. 04. 2011, 22:02:08
Tak na tomto se shodneme. :-)

A máme konečně klid.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: P.S. 04. 04. 2011, 11:45:05
A to už je vážně konec? :(
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 04. 04. 2011, 20:08:12
A to už je vážně konec? :(

Tak ne, no :)

Citace
Runtime code generation is a useful technique but most really interesting metaprogramming opportunities manifest themselves at compile time through one of the extension points provided by boo: attributes, macros, metafunctions and the compilation pipeline which shall all be covered next.

http://bamboo.github.com/2010/07/11/boo-meta-programming-facilities-I-the-ast.html

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Petr Mejzlík 04. 04. 2011, 20:41:04
Myslím, že Boo je s ohledem na rozšířenost horší volba než LISP. LISP je sice i přes dlouhou historii málo používaný, ale Boo je na tom ještě hůř - nikdo ho nezná.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 04. 04. 2011, 20:46:32
Myslím, že Boo je s ohledem na rozšířenost horší volba než LISP. LISP je sice i přes dlouhou historii málo používaný, ale Boo je na tom ještě hůř - nikdo ho nezná.

Jenže Boo funguje nad CLI, takže v něm jde používat všechno, co v C#. A když někomu dám .dll napsané v Boo, tak nepozná, že jsem ho nenapsal v C#.

Boo má ale jinou podstatnou nevýhodu: člověk jeho používáním nedojde osvícení a nenaučí se ostatní ohromovat poetickými báchorkami. Je to totiž úplně normální programovací jazyk, který se na něco hodí a na něco ne. Není to spása lidstva :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Jakub Danek 04. 04. 2011, 20:49:29
Abych doplnil tuto debatu o relevantní názor... Schválně jsem tento dotaz (k čemu je dobrý LISP) poslal uznávané osobě na Katedře informatiky Fakulty aplikovaných věd na Západočeské univerzitě v Plzni.

Cituji:
Citace
Můj názor je jednoduchý. Úžasných jazyků, "řešících všechny problémy lidstva" je mnoho a možná mezi ně patří i Lisp. Až ale komunita jeho uživatelů dosáhne toho, že bude obecně akceptovaný (sw) průmyslem, pak teprve bude mít "vyhráno".

Upozorňuji, že se jedná pouze o osobní názor onoho vědeckého pracovníka, nikoliv stanovisko KI FAV ZČU. Nemám výslovné povolení uvést jméno, proto prosím omluvte jeho absenci.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 04. 04. 2011, 20:57:29
Abych doplnil tuto debatu o relevantní názor... Schválně jsem tento dotaz (k čemu je dobrý LISP) poslal uznávané osobě na Katedře informatiky Fakulty aplikovaných věd na Západočeské univerzitě v Plzni.

No a? Pan učitel prostě taky ještě není spasen a osvícen...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 04. 04. 2011, 21:25:52
http://bamboo.github.com/2010/07/11/boo-meta-programming-facilities-I-the-ast.html

Ano, kdyz se na to podiva clovek, co zna Lisp, je mu jasne, cim se inspirovali. :-) (Maly hint: [| je ` a $ je ,@ .)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 04. 04. 2011, 21:30:15
Ano, kdyz se na to podiva clovek, co zna Lisp, je mu jasne, cim se inspirovali. :-) (Maly hint: [| je ` a $ je ,@ .)

A právě proto to lispovské implementaci nesahá ani po kotníky!
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Petr Mejzlík 04. 04. 2011, 21:30:52
No a? Pan učitel prostě taky ještě není spasen a osvícen...
Jak se říká v GTA2:
No donation - no salvation!
;D
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 04. 04. 2011, 21:43:10
Citace
Můj názor je jednoduchý. Úžasných jazyků, "řešících všechny problémy lidstva" je mnoho a možná mezi ně patří i Lisp. Až ale komunita jeho uživatelů dosáhne toho, že bude obecně akceptovaný (sw) průmyslem, pak teprve bude mít "vyhráno".

Kdyz pominu, ze "akceptace SW prumyslem" je ponekud slaboduche kriterium (podle nej by mel byt COBOL lepsim jazykem nez puvodni Lisp, nebo VB lepsim jazykem nez Python), tak to neni historicky celkem pravda, ze by Common Lisp nebyl akceptovany prumyslem. Ale zabila ho, jako radu veci, AI zima, mikropocitacova revoluce a fragmentace komercnich implementaci.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Jakub Danek 04. 04. 2011, 21:49:55
Hele, oni přiznali, že LISP je v současností mrtvý :-D
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 04. 04. 2011, 21:52:39
Hele, oni přiznali, že LISP je v současností mrtvý :-D

Taky mě to překvapilo.

Co bude dál? Přiznání, že tohle téma nebylo ničím jiným než nekrofilií, nebo vyzdvihování krás exhumace, coby kratochvíle na dlouhé večery?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 04. 04. 2011, 22:21:55
Hele, oni přiznali, že LISP je v současností mrtvý :-D

Common Lisp se stale dost pouziva, ale vetsina zajimavych (a komercnich) projektu v Lispu vznikla v 70.-90. letech.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: jehovista 04. 04. 2011, 22:32:08
Citace
Můj názor je jednoduchý. Úžasných jazyků, "řešících všechny problémy lidstva" je mnoho a možná mezi ně patří i Lisp. Až ale komunita jeho uživatelů dosáhne toho, že bude obecně akceptovaný (sw) průmyslem, pak teprve bude mít "vyhráno".

Kdyz pominu, ze "akceptace SW prumyslem" je ponekud slaboduche kriterium (podle nej by mel byt COBOL lepsim jazykem nez puvodni Lisp, nebo VB lepsim jazykem nez Python), tak to neni historicky celkem pravda, ze by Common Lisp nebyl akceptovany prumyslem. Ale zabila ho, jako radu veci, AI zima, mikropocitacova revoluce a fragmentace komercnich implementaci.

Jinymi slovy... zabil ho pokrok
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: deda.jabko 04. 04. 2011, 23:10:03
Citace
Abych doplnil tuto debatu o relevantní názor... Schválně jsem tento dotaz (k čemu je dobrý LISP) poslal uznávané osobě na Katedře informatiky Fakulty aplikovaných věd na Západočeské univerzitě v Plzni.

neni nad to, kdyz se k problematice muze vyjadrit i takova ta spravna anonymni autorita.

k dokonalosti uz chybi jenom prispevek: ,,My vsichni zaci 8.B si myslime, ze LISP je k nicemu.''
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 06:38:39
Jinymi slovy... zabil ho pokrok

Pokrok? V cem konkretne? Zabila ho (a to jeste neni jiste, ja myslim, ze dnes vidime novy zajem o Lisp a dalsi jazyky, s tim, jak jsou lide rozcarovani se striktne OOP pristupem) evoluce, coz neznamena nutne pokrok. To je prave omyl lidi jako toho zmineneho anonymniho akademika, ze vsechno nove je nutne lepsi.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Jakub Daněk 05. 04. 2011, 10:53:59
Common Lisp se stale dost pouziva, ale vetsina zajimavych (a komercnich) projektu v Lispu vznikla v 70.-90. letech.

Mno a vracíme se k původní otázce. O síle LISPu třeba já osobně nepochybuji, ale jaký je důvod se ho učit (a teď míním do hloubky, ne základy) dnes? Pomineme-li onen jiný přístup k řešení problémů (ano, rozhodně je dobré si tímto směrem rozhledy rozšířit). Ale co ta praxe?

deda.jabko: Nechce se mi psát další email s žádostí o svolení k uvedení jména. Ostatně, ty a mnoho dalších tu taky nevystupujete pod svým jménem.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 11:41:21
Mno a vracíme se k původní otázce. O síle LISPu třeba já osobně nepochybuji, ale jaký je důvod se ho učit (a teď míním do hloubky, ne základy) dnes? Pomineme-li onen jiný přístup k řešení problémů (ano, rozhodně je dobré si tímto směrem rozhledy rozšířit). Ale co ta praxe?

No, ja myslim, ze uz to tu padlo. Prymek tu citoval Erica Raymonda, ktery rekl, ze Lisp ma smysl studovat, i kdyz ho nebudete pouzivat. A ja, i kdyz ho pouzivat chci, musim uznat, ze knizka On Lisp je opravdu zajimava a da cloveku novy pohled na programovani.

Tech veci, ktere jsem drive neznal nebo ne zcela chapal, byla cela rada - lexikalni vs. dynamicke promenne, uzavery, makra, restarty, genericke funkce, REPL, vice navratovych hodnot, anaforicka makra, kontinuace, ... Proste kamkoli se do Common Lispu podivate, vidite nejake elegantni reseni.

deda.jabko: Nechce se mi psát další email s žádostí o svolení k uvedení jména. Ostatně, ty a mnoho dalších tu taky nevystupujete pod svým jménem.

Ano, ale on se neohani tim, jaka je autorita. Pokud uz se nekdo chce stavet za svoji autoritu, asi by to bylo vhodnejsi. Jinak to opravdu neni nic jineho, nez nazor jako kazdy jiny.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 11:50:34
Tech veci, ktere jsem drive neznal nebo ne zcela chapal, byla cela rada - lexikalni vs. dynamicke promenne, uzavery, makra, restarty, genericke funkce, REPL, vice navratovych hodnot, anaforicka makra, kontinuace, ... Proste kamkoli se do Common Lispu podivate, vidite nejake elegantni reseni.

Otazka je, jestli si chce člověk hrát, učit se, žasnout nad elegantním řešením, nebo potřebuje pracovat a něco produkovat.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Jakub Daněk 05. 04. 2011, 12:54:27
Ano, ale on se neohani tim, jaka je autorita. Pokud uz se nekdo chce stavet za svoji autoritu, asi by to bylo vhodnejsi. Jinak to opravdu neni nic jineho, nez nazor jako kazdy jiny.

Autor odpovědi tuto diskusi předpokládám ani neviděl. Za autoritu se tu nikdo nestaví. Chtěl jsem do diskuse přispět názorem člověka, u kterého se dá očekávat, že o tom něco ví. V emailu s dotazem jsem si opomněl vyžádat povolení k publikaci toho názoru pod jeho jménem, moje chyba.
Nikdo to tu nevydává za pravdu. Mimochodem, stejnou odpověď mi dal i vedoucí architekt našeho týmu - jazyk to může být sebesilnější, ale bez knihoven, podpory a dostatku vývojářů v něm těžko můžeš začít něco pořádného dělat.

A když bych chtěl "diskutovat" jako někteří zde, tak mohu říct, že se deda.jabko staví za svou božskou autoritu LISPaře.

Ale k té podstatné části tvé odpovědi:
Otázka nezněla zda má cenu LISP studovat, na tom se myslím většina z nás shodne, že není co řešit. LISP do takové skupiny patří, stejně jako milion dalších věcí. Otázka zněla Na co všechno je dobrý LISP? Jak já to chápu - pro jaký případný projekt / část projektu se LISP hodí výrazně více než alternativy?

Ale to je pořád dokola :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 13:29:33
Nikdo to tu nevydává za pravdu. Mimochodem, stejnou odpověď mi dal i vedoucí architekt našeho týmu - jazyk to může být sebesilnější, ale bez knihoven, podpory a dostatku vývojářů v něm těžko můžeš začít něco pořádného dělat.

To je dost diskutabilni (viz treba Linux), krome toho Lisp ma knihoven pomerne dost, a i solidni komercni implementace.

A když bych chtěl "diskutovat" jako někteří zde, tak mohu říct, že se deda.jabko staví za svou božskou autoritu LISPaře.

Ne, on mluvi jako nekdo, kdo Lisp (pokud vim) zna a patrne pouziva. O tom jake ma autority nelze nic rict.

Otázka nezněla zda má cenu LISP studovat, na tom se myslím většina z nás shodne, že není co řešit. LISP do takové skupiny patří, stejně jako milion dalších věcí. Otázka zněla Na co všechno je dobrý LISP? Jak já to chápu - pro jaký případný projekt / část projektu se LISP hodí výrazně více než alternativy?

Ta otazka tak jasne znela, precti si znovu svuj prispevek. :-) Co se tyce toho, na co je dobry, napsal jsem uz na zacatku, ze se v nem da napsat temer cokoliv, a to stale plati. Treba vcera jsem (ciste nahodou pri brouzdani knihoven na quicklisp.org) narazil na commandline prehravac mp3 v Common Lispu http://vintage-digital.com/hefner/software/shuffletron/ (http://vintage-digital.com/hefner/software/shuffletron/). Apropos, koukal jsem do zdrojaku a i kdyz pouzivaji makra, jsou docela prehledne (i kdyz to neni zadny zazrak).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 13:33:00
Jak já to chápu - pro jaký případný projekt / část projektu se LISP hodí výrazně více než alternativy?

Mimochodem, tahle otazka je zavadejici - alternativy se necemu rika proto, ze to muzete pouzit take. Kdyby se to pouzit nedalo, nejde o alternativu.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 13:50:52
Mimochodem, tahle otazka je zavadejici - alternativy se necemu rika proto, ze to muzete pouzit take. Kdyby se to pouzit nedalo, nejde o alternativu.

Co to je za argument? Samozřejmě, že ke kopání výkopu *můžu* použít hřebík, ale lopata je výrazně efektivnější *alternativa*.

Pochopitelně, že se dá lisp použít na cokoli. To se dá i assembler. Každý trochu rozumný člověk tu otázku snad čte jako "Na co je *rozumné* použít lisp?" A tím se dostáváme k té asi nejdůležitější otázce, kterou jste zatím pořád ignorovali: "Jak je to s integrací lispu do projektů v jiných jazycích/frameworcích?" Jde třeba nějak rozumně použít lisp jako  vysokoúrovňové skriptovací rozhraní pro projekty v nejpoužívanějších (a výkonnějších) jazycích jako je C/C++/C#/java? Bude to stejně snadné jako s Lua/Python/Boo? Zatím jsme tady slyšeli o Closure - ok, integraci s Javou už máme - a dál?

Teď třeba zrovna píšu jakousi věc v Boo, kde dost významnou roli hraje pattern matching a dovedu si představit, že by se custom pravidla psala v lispu. Bude snadné takovou věc, která se má překládat za běhu, integrovat do projektu v CLI? Bude mi ta integrace trvat kratší dobu než s Boo (cca hodinu včetně projití dokumentace)?

Co teda konkrétně *mně* může lisp přinést pro **můj konkrétní projekt**?  (osvícení, prozření a cvičení mozku prosím nechme stranou, to už jsme si dostatečně vyjasnili...)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Jakub Daněk 05. 04. 2011, 13:57:07
Ne, on mluvi jako nekdo, kdo Lisp (pokud vim) zna a patrne pouziva. O tom jake ma autority nelze nic rict.

Souhlasím. Nenarážím přímo na něj, ale na některé další zde v "diskusi".

Otázka vycházela z toho, o čem je tohle celé vlákno (přečti si nadpis :) ). Kdyby nenesla ono doplnění o "Ale co ta praxe?" souhlasil bych, že jsem svůj příspěvek špatně formuloval.

Ad alternativy - to, že něco v něčem JDE, neznamená, že je to vhodné. A alternativa právě znamená, že něco JDE. V LISPu jde zřejmě téměř cokoliv. To neznamená, že to bude rozumné, čitelné či efektivní. S náklaďákem můžeš i jako programátor denně jezdit do práce. Ale bude to drahé, problémy s parkováním... ale jde to, že... Na motorce se dá jezdit i v zimě, ale je to extrémně nepohodlné, občas si rozbiješ hubu na ledě a za 10 let tě budou bolet klouby při každém kroku. Tak si asi nakonec vybereš to auto, ne? I když ho má každá opice (A když ne, tak je to láska a ne objektivní důvod).

Já proti lispu nic nemám, až bude víc času, chci se do něj hlouběji zabrat, protože mi přijde zajímavý. Tuhle diskusi jsem před pár dny s chutí otevřel, že se dozvím, v jaké oblasti lidské činnosti je LISP neskutečně efektivní a užitečný. Dozvěděl jsem se, že v každé (a že jsem debil, protože to nevím). Mě by ale skutečně zajímal nějaký větší projekt, kde se LISP ve velké míře používá.

O velkých jazycích typu C, Java, C# se nemá cenu bavit. Python, Perl, Ruby taktéž. Webová verze Guardianu přešla na Scallu. Na univerzitě jsem viděl v praxi Prolog. Ale v jaké souvislosti můžu slyšet o LISPu?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 14:01:07
Co teda konkrétně *mně* může lisp přinést pro **můj konkrétní projekt**?  (osvícení, prozření a cvičení mozku prosím nechme stranou, to už jsme si dostatečně vyjasnili...)

Ano, takova otazka uz smysl ma. O rozhrani mezi CL a CLR nic nevim, ale stacilo to zadat do Google a vypadlo http://stackoverflow.com/questions/110433/are-there-any-common-lisp-implementations-for-net (http://stackoverflow.com/questions/110433/are-there-any-common-lisp-implementations-for-net) a http://weitz.de/rdnzl/ (http://weitz.de/rdnzl/).

Co se tyce pouziti CL obecne jako skriptovaciho jazyka, to se moc nehodi (CL je prilis velky). Na to je lepsi pouzit Scheme (a GNU projekt to take tak puvodne planoval).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Jakub Daněk 05. 04. 2011, 14:02:50
Treba vcera jsem (ciste nahodou pri brouzdani knihoven na quicklisp.org) narazil na commandline prehravac mp3 v Common Lispu http://vintage-digital.com/hefner/software/shuffletron/ (http://vintage-digital.com/hefner/software/shuffletron/). Apropos, koukal jsem do zdrojaku a i kdyz pouzivaji makra, jsou docela prehledne (i kdyz to neni zadny zazrak).

Odpoveď na mou otázku to není (není velký projekt). Ale odkaz si schovám, možná ho vyzkouším a hlavně se bude hodit pro studijní účely :). Dík.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 14:03:32
Já proti lispu nic nemám, až bude víc času, chci se do něj hlouběji zabrat, protože mi přijde zajímavý.

Když už se zabývat nějakými laskominami, zkusil bych spíš Forth. Přijde mi zajímavé si portfolio jazyků doplnit o něco, co jde použít v až neuvěřitelně minimalistických scénářích. Člověk si udělá radost trochou exotiky a zároveň má aspoň nějakou šanci, že by to někdy v praxi mohl *rozumně* použít.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 14:08:45
Mě by ale skutečně zajímal nějaký větší projekt, kde se LISP ve velké míře používá.

http://en.wikipedia.org/wiki/Common_lisp#Applications (http://en.wikipedia.org/wiki/Common_lisp#Applications)

Fakt je to tak slozite?

Treba to ITA Software je zajimave:
Citace
Lisp at ITA Software

What does ITA use Lisp for? In a sense, this is the wrong question. Lisp is a programmable programming language, and one of the few languages that can be used for a wide range of applications. At ITA we have projects with vastly different focus, and it's precisely Lisp's versatility that makes it so useful to us.

Our QPX search engine is engineered for speeds that must not be lower than using C and where huge amounts of data must not be bigger than packing them in C structs. Still, QPX is very complicated, and driven by individuals who write large bodies of code. Lisp allows us to define a wide variety of abstractions to manage the complexity, and at the same time we get the speed we want - and our customers demand. Once QPX is compiled, one cannot easily tell the machine code from the machine code compiled from C.

In other projects we manage even larger collections of coded industry knowledge, and there we use all of Lisp's dynamic features to give us the maximum productivity. This allows us to re-implement airline codebases for use outside of their original scope (mainframes) for the first time.

Nebo ten DART jsem drive neznal.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 14:26:11
Fakt je to tak slozite?

Není složité něco najít, ale pro člověka, který nemá s danou věcí osobní zkušenost, je nemožné se vyznat v různých protichůdných informacích. Např. na odkazované stránce na Wiki:
Citace
the Yahoo! Store web-commerce site, which originally involved Paul Graham and was later rewritten in C++ and Perl

Když mi na jedné straně někdo tvrdí, jak je lisp nepřekonatelný, neuvěřítelný a nejgeniálnější jazyk s kulervoucí produktivitou což dokládá kniha od Paula Grahama - a na druhé straně dá velký projekt Grahamovi košem a odejde k hrůzám typu C++ a Perl, tak co si o tom mám myslet?

Myslím, že je celkem legitimní od lidí, kteří daný jazyk používají a účastní se diskuse o něm, očekávat nějaký *rozumný* shrnující komentář typu "no hele, jak bych ti to řekl - no lisp je super, protože v něm můžeš elegantně a rychle udělat třeba tohle [...] - ale na druhou stranu při praktickém nasazení narazíš zase problémy s [...]. To už musíš zvážit sám, co bude pro tebe v tom projektu důležitější... Ale podle toho, co píšeš, bych ti doporučil [...] - má sice trochu omezenější možnosti než [...], ale na tohle použití by měl stačit."

Sorry, ale odpověď typu "přečti si On Lisp" myslím každého leda odradí, nehledě na nadávání do cvičených opic a lepičů kódu - a konzolový přehrávač mp3 nabytý dojem fakt nemůže zachránit...

O rozhrani mezi CL a CLR nic nevim, ale stacilo to zadat do Google a vypadlo

Vygooglit si to umí každý sám. Horší je se ve všech různých alternativách zorientovat - proto se taky zakládají diskuse s takhle obecnými otázkami... protože se očekává odpověď od těch, kdo už mají danou oblast zmapovanou.

Ale aspoň teda jsem zjistil, že Clojure existuje i pro CLI. Kdych se náhodou chtěl někdy zbláznit ze závorek, něco si v něm zkusím :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 14:35:07
Myslím, že je celkem legitimní od lidí, kteří daný jazyk používají a účastní se diskuse o něm, očekávat nějaký *rozumný* shrnující komentář typu "no hele, jak bych ti to řekl - no lisp je super, protože v něm můžeš elegantně a rychle udělat třeba tohle [...] - ale na druhou stranu při praktickém nasazení narazíš zase problémy s [...]. To už musíš zvážit sám, co bude pro tebe v tom projektu důležitější... Ale podle toho, co píšeš, bych ti doporučil [...] - má sice trochu omezenější možnosti než [...], ale na tohle použití by měl stačit."

Takovou odpoved jsem ti dal hned na zacatku, kdyz jsem ti psal, ze pokud jsi kapitalista, bude rozhodujici kolik lidi najdes, co ten jazyk umi (nebo v pripade existujiciho projektu, v jakem jazyce byl napsan). Pokud mas tym, co umi Lisp, napis to v Lispu. Pokud ne, ta otazka je bezpredmetna.

Sorry, ale odpověď typu "přečti si On Lisp" myslím každého leda odradí, nehledě na nadávání do cvičených opic a lepičů kódu - a konzolový přehrávač mp3 nabytý dojem fakt nemůže zachránit...

Nikomu jsem nenadaval, to za prve, a za druhe, odpoved "On Lisp" jsem daval proto, ze jsi se porad ptal, v cem jsou tak uzasna makra. Na to ta knizka odpoved dava.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 14:45:06
Pokud mas tym, co umi Lisp, napis to v Lispu.

Takže kdo lisp umí, ten v něm píše a ostatní nemají důvod se ho učit. Tak ok teda...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 15:24:19
Jeste muzete zkusit:
http://lambda-the-ultimate.org/node/2491#comment-38434 (http://lambda-the-ultimate.org/node/2491#comment-38434)
http://postabon.posterous.com/why-i-chose-common-lisp-over-python-ruby-and (http://postabon.posterous.com/why-i-chose-common-lisp-over-python-ruby-and)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 05. 04. 2011, 15:40:33
Když mi na jedné straně někdo tvrdí, jak je lisp nepřekonatelný, neuvěřítelný a nejgeniálnější jazyk s kulervoucí produktivitou což dokládá kniha od Paula Grahama - a na druhé straně dá velký projekt Grahamovi košem a odejde k hrůzám typu C++ a Perl, tak co si o tom mám myslet?

Že lidská omezenost je neomezená. :)
Ostatně - když po Chuckovi Moorovi v NRAO přebírali jeho výtvory ve Forthu, tak první befehl taky zněl "vše přepsat do Fortranu." A v CERNu se teď zase o 106 přepisují letité knihovny z Fortranu do C++. Inu - svět prostě na starý kolena blbne.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 15:43:24
Jeste muzete zkusit:
http://postabon.posterous.com/why-i-chose-common-lisp-over-python-ruby-and (http://postabon.posterous.com/why-i-chose-common-lisp-over-python-ruby-and)

Hm :)

Citace
more obscure libraries like Thrift and OpenID support may be an issue in the future. The lack of libraries is, without a doubt, the biggest disadvantage of CL and one of the reasons Clojure is so appealing to me. I can usually just write my own foreign function interface into a C library – but that’s really time consuming compared to downloading an egg/gem/jar.

Aspoň že to přizná.

Inu - svět prostě na starý kolena blbne.

Ještě že existují lidi jako ty, kteří jsou normální, když už se všichni ostatní zbláznili :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 05. 04. 2011, 15:48:29
Ještě že existují lidi jako ty, kteří jsou normální, když už se všichni ostatní zbláznili :)

Svatá pravda. ;)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 16:18:10
Ostatně - když po Chuckovi Moorovi v NRAO přebírali jeho výtvory ve Forthu, tak první befehl taky zněl "vše přepsat do Fortranu." A v CERNu se teď zase o 106 přepisují letité knihovny z Fortranu do C++. Inu - svět prostě na starý kolena blbne.

Nebo tez http://www.flownet.com/gat/jpl-lisp.html (http://www.flownet.com/gat/jpl-lisp.html). Ja myslim, ze za tyhle veci mohou hlavne mikropocitace - puvodni jazyky nikdo neznal, ale znali nove, ktere byly bezne na PC. Proste nova generace programatoru diky tomu vynalezala kolo. Neco podobneho nas mozna ceka u webovych aplikaci.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Program 05. 04. 2011, 18:18:16
Mě by zajímalo, jestli byste se taky hádali, jestli je lepší kladivo, nebo štípačky, jen proto, že jedni umíte zatloukat hřebíky a druzí štípat dráty...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 18:26:53
Mě by zajímalo, jestli byste se taky hádali, jestli je lepší kladivo, nebo štípačky, jen proto, že jedni umíte zatloukat hřebíky a druzí štípat dráty...

Problém je v tom, že lispisti tady vehementně tvrdí, že štípačky jsou jedinečný nástroj na cokoli včetně utírání si [...] a kdokoli si utírá [...] čímkoli jiným, je cvičená opice.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 05. 04. 2011, 18:32:12
Problém je v tom, že lispisti tady vehementně tvrdí, že štípačky jsou jedinečný nástroj na cokoli včetně utírání si [...] a kdokoli si utírá [...] čímkoli jiným, je cvičená opice.

Joo? A to tu řekl kdy kdo?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 05. 04. 2011, 19:04:04
No tak co se tyka hadky, tak tohleto je asi nejdelsi hadka na soucasnym rootu, protoze je nase "diskuse" uz na prvnim miste s nejvetsim mnozstvim "odpovedi". Takze tohleto vitezstvi si uz muzeme pripnout na triko. Mozna by me zajimalo, jestli take netriumfujeme i v tom, ze je tu nejvetsi mnozstvi odpovedi, ktere neodpovidaji na otazky takovym zpusobem, jak by si zde mnozi prali. Ale tyhlety nazory ted necham stranou a budu se venovat tomu, cemu jsem se venovat chtel a to je zjistit, kde se LISP uplatni lepe, nez jine programovaci jazyky.

V tomto clanku: http://www.flownet.com/gat/jpl-lisp.html (http://www.flownet.com/gat/jpl-lisp.html) (ktery tu byl zminen) jsem se napriklad dozvedel, ze LISP byl uspesne pouzit v robotice, ktera uspesne plnila sve ukoly ve vesmiru. Ale kdyz to vztahnu na nas, tak je tam napsano, ze LISP je velmi dobre pouzitelny (krome jineho) s malymi mikroprocesory a dokonce s mikrokontrolery s malou RAM/ROM v radu nekolika kilobyte - napr. 8kB). Ale s tim, ze s tak malou pameti se zas az tak toho moc napsat neda.

Ale vypada to, ze se konecne vracime k puvodni otazce, ktera znela jako: "Kde se LISP uplatni lepe, nez jine jazyky?".

Strucnych odpovedi je cela rada, tak bych si vybral konkretnejsi otazku a zeptal se...

LISP a GIMP. V GIMPu je LISP pouzit ve script-fu pluginech. A me by zajimalo, jak to v tom GIMPu funguje, jakym zpusobem je LISP implementovany a jak spolupracuje s jazykem, ve kterem je GIMP napsany. Jestli to nekdo vi, nebo ma nekdo odkazy, kde se to lze dozvedet, tak je uvedte. A pripadne jestli nekdo pise script-fu pluginy, tak jak se pisou, a neco kolem nich (nejaky kratky povidani, nebo odkazy).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blizz 05. 04. 2011, 19:08:07
Problém je v tom, že lispisti tady vehementně tvrdí, že štípačky jsou jedinečný nástroj na cokoli včetně utírání si [...] a kdokoli si utírá [...] čímkoli jiným, je cvičená opice.

Joo? A to tu řekl kdy kdo?

nedávno si napísal že:

...
Stále si nerozumíme. LISP je jazyk určený lidem k programování, ne cvičeným opicím k lepení kódu. :D

1. programovanie je synonymum lepenia kódu.
2. 99% vývojárov neprogramuje v LISPe, sú teda cvičené opice?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Program 05. 04. 2011, 19:11:56
To tvrdíte všichni, akorát jeden o kladivu, druzí o štípačkách. LISP nemusí být na všechno ideální, na něco je bezva a je jednoduchý na naučení... Nikdo v něm psát nemusí, pokud nechce, někomu třeba vyhovuje. A ti kdo v něm dělají a chtěli by ho více rozšířit by udělali určitě více psaním tutoriálů a konstruktivní diskuzí... Tady se autor ptal k čemu se dá LISP využít. Odpověď "LISP je na h*vno" nebo "LISP je super a basta" asi není to, co chtěl vědět...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 05. 04. 2011, 19:17:50
No tak co se tyka hadky, tak tohleto je asi nejdelsi hadka na soucasnym rootu, protoze je nase "diskuse" uz na prvnim miste s nejvetsim mnozstvim "odpovedi". Takze tohleto vitezstvi si uz muzeme pripnout na triko. Mozna by me zajimalo, jestli take netriumfujeme i v tom, ze je tu nejvetsi mnozstvi odpovedi, ktere neodpovidaji na otazky takovym zpusobem, jak by si zde mnozi prali. Ale tyhlety nazory ted necham stranou a budu se venovat tomu, cemu jsem se venovat chtel a to je zjistit, kde se LISP uplatni lepe, nez jine programovaci jazyky.

V tomto clanku: http://www.flownet.com/gat/jpl-lisp.html (http://www.flownet.com/gat/jpl-lisp.html) (ktery tu byl zminen) jsem se napriklad dozvedel, ze LISP byl uspesne pouzit v robotice, ktera uspesne plnila sve ukoly ve vesmiru. Ale kdyz to vztahnu na nas, tak je tam napsano, ze LISP je velmi dobre pouzitelny (krome jineho) s malymi mikroprocesory a dokonce s mikrokontrolery s malou RAM/ROM v radu nekolika kilobyte - napr. 8kB). Ale s tim, ze s tak malou pameti se zas az tak toho moc napsat neda.

Ale vypada to, ze se konecne vracime k puvodni otazce, ktera znela jako: "Kde se LISP uplatni lepe, nez jine jazyky?".

Strucnych odpovedi je cela rada, tak bych si vybral konkretnejsi otazku a zeptal se...

LISP a GIMP. V GIMPu je LISP pouzit ve script-fu pluginech. A me by zajimalo, jak to v tom GIMPu funguje, jakym zpusobem je LISP implementovany a jak spolupracuje s jazykem, ve kterem je GIMP napsany. Jestli to nekdo vi, nebo ma nekdo odkazy, kde se to lze dozvedet, tak je uvedte. A pripadne jestli nekdo pise script-fu pluginy, tak jak se pisou, a neco kolem nich (nejaky kratky povidani, nebo odkazy).

Přesně tohle jsme tu zmiňovali hned na začátku - robotiku a důvod, že je to taky poměrně minimalistický jazyk, podobně jako Forth, i když ne tak extrémně.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 05. 04. 2011, 19:21:19
http://postabon.posterous.com/why-i-chose-common-lisp-over-python-ruby-and (http://postabon.posterous.com/why-i-chose-common-lisp-over-python-ruby-and)

Jestli tomu dobře rozumím, tak prakticky jediná výtka proti Pythonu, která zůstala, je Guido nemá rád FP. Když tedy zdvořile opomenu to, že v jednom odstavci autor tvrdí, že jeho mysl funguje funkcionálně a zároveň brečí, že není v Pythonu možné udělat imperativní chlívárnu non plus ultra:

Kód: [Vybrat]
map(lambda each: if each.isManager: each.salary = 2000, employees)
Mně to v tomhle případě přijde dost málo vyargumentované a mám dojem, že si to autor prostě chtěl střihnout v CL nebo rozumné důvody má, ale neumí je vyjádřit.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 19:22:06
LISP a GIMP. V GIMPu je LISP pouzit ve script-fu pluginech. A me by zajimalo, jak to v tom GIMPu funguje, jakym zpusobem je LISP implementovany a jak spolupracuje s jazykem, ve kterem je GIMP napsany. Jestli to nekdo vi, nebo ma nekdo odkazy, kde se to lze dozvedet, tak je uvedte. A pripadne jestli nekdo pise script-fu pluginy, tak jak se pisou, a neco kolem nich (nejaky kratky povidani, nebo odkazy).

Co takhle zkusit Google? http://www.root.cz/clanky/gimp-scriptfu-skriptovani-nebo-bojove-umeni/
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Program 05. 04. 2011, 19:23:22
LISP a GIMP. V GIMPu je LISP pouzit ve script-fu pluginech. A me by zajimalo, jak to v tom GIMPu funguje, jakym zpusobem je LISP implementovany a jak spolupracuje s jazykem, ve kterem je GIMP napsany. Jestli to nekdo vi, nebo ma nekdo odkazy, kde se to lze dozvedet, tak je uvedte. A pripadne jestli nekdo pise script-fu pluginy, tak jak se pisou, a neco kolem nich (nejaky kratky povidani, nebo odkazy).

script-fu není LISP, ale Scheme (ale ono je to do značné míry jedno). Jinak nehledejte v LISPu něco tak diametrálně odlišného a pokud je LISP (Scheme) jako skriptovací jazyk nějakého programu, tak v tom jazyku máte prostě jen zpřístupněné proměnné, popř. nějaké funkce toho programu. Prostředky jazyka to jen přenastavujete a spouštíte (třeba máte obrázek a forem zvýšíte hodnotu jedné barevné složky každého pixelu)...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 05. 04. 2011, 19:24:06
Problém je v tom, že lispisti tady vehementně tvrdí, že štípačky jsou jedinečný nástroj na cokoli včetně utírání si [...] a kdokoli si utírá [...] čímkoli jiným, je cvičená opice.

Joo? A to tu řekl kdy kdo?

nedávno si napísal že:

...
Stále si nerozumíme. LISP je jazyk určený lidem k programování, ne cvičeným opicím k lepení kódu. :D

1. programovanie je synonymum lepenia kódu.
2. 99% vývojárov neprogramuje v LISPe, sú teda cvičené opice?

Tak to je hodně zlé, když programátoři dnes už mají potíže i s formální logikou...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 19:24:56
Přesně tohle jsme tu zmiňovali hned na začátku - robotiku a důvod, že je to taky poměrně minimalistický jazyk, podobně jako Forth, i když ne tak extrémně.

Problém je v tom, že jste nevyargumentovali, PROČ se v té robotice používá. To, že se něco někde používá nemusí znamenat, že je to na daný účel nejvhodnější. Může to být třeba z historických důvodů, ze zvyku, nebo proto, že v době největší slávy prostě nebyla rozumná alternativa.

To, že se třeba na mainframech používá z historických důvodů nějaký úchylný jazyk neznamená, že je lepší než dnešní alternativy.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 05. 04. 2011, 19:37:26
Pokud jde o ty roboty, tak tam se asi nejvíc uplatňují přednosti snadného prototypování, interaktivního vývoje a nenáročnosti LISPu.

Tak nevím...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 05. 04. 2011, 19:38:04
Problém je v tom, že jste nevyargumentovali, PROČ se v té robotice používá.
Jedním z pádných důvodů může být např. modifikace programu za provozu. Nemusím robota zastavovat jenom kvůli změně programu.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 05. 04. 2011, 19:39:37
script-fu není LISP, ale Scheme (ale ono je to do značné míry jedno). Jinak nehledejte v LISPu něco tak diametrálně odlišného a pokud je LISP (Scheme) jako skriptovací jazyk nějakého programu, tak v tom jazyku máte prostě jen zpřístupněné proměnné, popř. nějaké funkce toho programu. Prostředky jazyka to jen přenastavujete a spouštíte (třeba máte obrázek a forem zvýšíte hodnotu jedné barevné složky každého pixelu)...

Diky. Presne to jsem chtel vedet. :) a v programech typu CAD je to to same, nebo tam je to jinak?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 05. 04. 2011, 19:40:03
A tady je IMO jasná demonstrace, že Lisp (Scheme) se jako jazyk pro skriptování Gimpu moc neosvědčil a jeho volba byla dána pravděpodobně dobovým kontextem: http://forum.root.cz/index.php?topic=1884.0 (http://forum.root.cz/index.php?topic=1884.0) Zlatý Python, zlatá Lua...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 19:40:11
Jedním z pádných důvodů může být např. modifikace programu za provozu. Nemusím robota zastavovat jenom kvůli změně programu.

Tak na to já už nemám nervy...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blizz 05. 04. 2011, 19:43:35
Ale vypada to, ze se konecne vracime k puvodni otazce, ktera znela jako: "Kde se LISP uplatni lepe, nez jine jazyky?".

S lispom nemám žiadne skúsenosti, ale sú typy úloh na ktoré sú jazyky typu LISP ideálne. v LISPe sa dá veľmi jednoducho napísať trebárs parser programovacieho jazyka, veľmi silná valstnosť lispu a podobných jazykov (napr. aj F#, alebo Javascripu) je že sa nerobí rozdiel medzi kódom a dátami. V bežných jazykoch na tieto špecifické typy úloh musíme vytvoriť vlastný DSL alebo použiť XMLko.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 05. 04. 2011, 19:47:59
Jedním z pádných důvodů může být např. modifikace programu za provozu. Nemusím robota zastavovat jenom kvůli změně programu.

Tak na to já už nemám nervy...
V jiných jazycích to jde? Pokud vím, umí to například Erlang.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 19:49:08
Jestli tomu dobře rozumím, tak prakticky jediná výtka proti Pythonu, která zůstala, je Guido nemá rád FP. Když tedy zdvořile opomenu to, že v jednom odstavci autor tvrdí,

Nemuzu diskutovat za autora, akorat si myslim, ze je to zajimavy odkaz (predevsim diskuse u nej) - proto jsem to sem take vlozil.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 19:56:51
V jiných jazycích to jde? Pokud vím, umí to například Erlang.

To snad umí jakýkoli intepretovaný jazyk, ne?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Program 05. 04. 2011, 19:59:01
Diky. Presne to jsem chtel vedet. :) a v programech typu CAD je to to same, nebo tam je to jinak?

Pokud vím, tak LISP používal AutoCAD a osobně jsem v tom nedělal, ale čekal bych stejný princip. Jazyk je jenom nástroj. Co jsem teď zběžně našel:http://www.jtbworld.com/lisp.htm (http://www.jtbworld.com/lisp.htm)

Jinak tak nějak neformálně, kamarád třeba použil scheme, jako jazyk do jednoho celulárního automatu. Ono LISP a obvzlášť scheme má opravdu malý interpret a navíc je oproti třeba pythonu docela rychlý (právě pro svoji jednoduchost) a na druhou stranu, není to write-only jazyk, jako třeba forth :-) Dále se zkuste mrknout třeba sem: http://www.gigamonkeys.com/book/ (http://www.gigamonkeys.com/book/) ať si uděláte obrázek o tom, jak se v LISPu píše a v čem může být zajímavý.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 05. 04. 2011, 20:04:16
Pokud vím, tak LISP používal AutoCAD a osobně jsem v tom nedělal, ale čekal bych stejný princip. Jazyk je jenom nástroj. Co jsem teď zběžně našel:http://www.jtbworld.com/lisp.htm (http://www.jtbworld.com/lisp.htm)

JJ, to API v AutoLispu bylo v zásadě ekvivalentní API v C (ADS library). Pro zajímavost, někdo udělal podobnou podporu skriptování v Pythonu: http://pyacad.sourceforge.net/ (http://pyacad.sourceforge.net/)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 05. 04. 2011, 20:05:52
Jestli tomu dobře rozumím, tak prakticky jediná výtka proti Pythonu, která zůstala, je Guido nemá rád FP. Když tedy zdvořile opomenu to, že v jednom odstavci autor tvrdí,

Nemuzu diskutovat za autora, akorat si myslim, ze je to zajimavy odkaz (predevsim diskuse u nej) - proto jsem to sem take vlozil.

Jo, diskusi jsem přečetl, byla zajímavá; nic proti.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Kit 05. 04. 2011, 20:07:19
V jiných jazycích to jde? Pokud vím, umí to například Erlang.

To snad umí jakýkoli intepretovaný jazyk, ne?
Už jsi zkusil vyměnit funkci běžícímu programu? Každý interpretr to nepřekousne. Kromě toho tuto funkci zvládá Lisp atomicky - je možné tuto funkci změnit i v okamžiku, kdy je v ní proces.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: blizz 05. 04. 2011, 20:10:41
Tak to je hodně zlé, když programátoři dnes už mají potíže i s formální logikou...

To teda je. Ale v tvojich plkoch by som logiku nehľadal.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 20:15:27
Kromě toho tuto funkci zvládá Lisp atomicky - je možné tuto funkci změnit i v okamžiku, kdy je v ní proces.

To jo, to je dobrý.

(sorry, už mě to vážně nebaví)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Radovan Tucek 05. 04. 2011, 20:16:00
ad patter matchin
   hledal jsem knihovnu, která by mi umožňovala psát funkce podobně jako v erlang, nic uspokojivého jsem nenasel...

Kód: [Vybrat]
factorial(N) when N > 0 ->
N * factorial(N - 1);
factorial(0) -> 1.

ad mrtvý
   máme tu clojure, takže si nemyslím že by byl lisp mrtvý...
   krom toho je tu ještě scheme, a například takový chicken je docela živý... http://www.call-cc.org/ (http://www.call-cc.org/) http://wiki.call-cc.org/chicken-projects/egg-index-4.html (http://wiki.call-cc.org/chicken-projects/egg-index-4.html)

Pro inspiraci například sorce2sorce translator javascriptu nebo ruby je při použití sbcl rychlejší než interpreti těchto jazyků...  ;D
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Viky 05. 04. 2011, 20:31:39
Tak to je hodně zlé, když programátoři dnes už mají potíže i s formální logikou...

To teda je. Ale v tvojich plkoch by som logiku nehľadal.

Teď jsi mi to fakt nandal! :)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 05. 04. 2011, 21:11:18
Už jsi zkusil vyměnit funkci běžícímu programu? Každý interpretr to nepřekousne. Kromě toho tuto funkci zvládá Lisp atomicky - je možné tuto funkci změnit i v okamžiku, kdy je v ní proces.

Tak tohle bych považoval ještě za ten nejmenší problém. Objekt, který obsahuje kód funkce, leží někde na haldě a slovník symbolů na něj odkazuje. Objektu je nastaven příznak (zvedne se čítač), když je funkce vykonávána. V prvním vhodném okamžiku se slovník přesměruje na novou funkci a je vymalováno. Co se ale stane s funkcemi vyšších řádů, případně se změnou typu očekávaných parametrů? Co se stane se stavem, který může v nejhorším případě pořád cirkulovat někde v programu i po několika hot swapech? Bojím se, že přehnaná dynamičnost smrdí docela velikým průšvihem.

Každopádně bych řekl, že schopnost hot swapu není dána inherentně jazykem, ale musí ho umět především virtuální stroj. Pokud vím, umí to třeba i JVM. V Pythonu by bylo třeba to pořešit explicitně (reload modulu), ale představit si to dokážu.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 05. 04. 2011, 21:16:57
ad patter matchin
   hledal jsem knihovnu, která by mi umožňovala psát funkce podobně jako v erlang, nic uspokojivého jsem nenasel...

Kód: [Vybrat]
factorial(N) when N > 0 ->
N * factorial(N - 1);
factorial(0) -> 1.

Tenhle příklad je ještě v pohodě, to by zvládnul i cond. Hlavní sílu pattern matchingu vidím ve svazování hodnot se jmény (x:xs) pro seznam v Haskellu apod., @ patternech atd. Lisp naštěstí nemá algebraické typy, takže odpadají argumenty typu tahání vnitřků z ADT apod. Tohle je věc, která mi u Lispu chybí docela dost.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 05. 04. 2011, 21:28:53
Tenhle příklad je ještě v pohodě, to by zvládnul i cond. Hlavní sílu pattern matchingu vidím ve svazování hodnot se jmény (x:xs) pro seznam v Haskellu apod., @ patternech atd. Lisp naštěstí nemá algebraické typy, takže odpadají argumenty typu tahání vnitřků z ADT apod. Tohle je věc, která mi u Lispu chybí docela dost.

Myslis neco jako destructuring-bind? Jinak v knizce On Lisp jsou popsane ruzne typy pattern matchingu a destrukturovani, jestli je to silne jako Haskell netusim.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Radovan Tucek 05. 04. 2011, 21:30:02
Haskell? Jsem rád, že tu je někdo, kdo my poradí lamerskými dotazy až se  začnu učit haskell...  ;D
Erlang mě přivedl k funkcionálnímu programování, ale jednak není čistě funkcionální, a jednak na desktopové aplikace se zrovna moc nehodí...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 05. 04. 2011, 21:51:48
Myslis neco jako destructuring-bind? Jinak v knizce On Lisp jsou popsane ruzne typy pattern matchingu a destrukturovani, jestli je to silne jako Haskell netusim.

Jo, destructuring-bind dělá něco takového. Ale poradí si třeba s něčím takovým (předpokládám, že ten kód je poměrně pochopitelný)?

Kód: [Vybrat]
matchTest = matchTest' [1, 2, 3, 4, 5]
        where
                matchTest' []           = 0
                matchTest' [x]          = x
                matchTest' s@(x:xs)     = x * (length s) * matchTest' xs
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 05. 04. 2011, 21:55:22
Haskell? Jsem rád, že tu je někdo, kdo my poradí lamerskými dotazy až se  začnu učit haskell...  ;D
Erlang mě přivedl k funkcionálnímu programování, ale jednak není čistě funkcionální, a jednak na desktopové aplikace se zrovna moc nehodí...

Tak s vyloženě lamerskými dotazy klidně, ale guru nejsem. Ovšem jestli je zrovna Haskell ideální jazyk pro GUI aplikace, to nevím nevím...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 05. 04. 2011, 22:07:33
Jestli tomu dobře rozumím, tak prakticky jediná výtka proti Pythonu, která zůstala, je Guido nemá rád FP.

On k tomu nejspíš bude mít dobré důvody... Imho pokud se do procedurálního jazyka typu Pythonu zavedou takovéty základní funkcionální obraty, tak to lidi, kteří k funkcionálnímu programování někde přičichli, můžou začít používat bez rosmyslu, což může věst k sice kratšímu, ale méně čitelnému kódu (map), v horším případě (chybí funkcionální optimalizace) k zbytečně neefektivnímu kódu (reduce).

Já osobně tyhle "funkcionální" prvky v pythonu nepoužívám vlastně vůbec.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 05. 04. 2011, 23:00:58
Já osobně tyhle "funkcionální" prvky v pythonu nepoužívám vlastně vůbec.

Jestli jsem někdy v praxi použil reduce, to si ani nevzpomínám, ale v našich projektech se to jenom hemží věcmi typu list comprehension nebo ještě raději generator expression, používáme lambdy, generátory, asi před rokem kolega s úspěchem nasadil do GUI kódu "currying" (tu pythonní obdobu) pro předzpracování zobrazených dat. A to jsem ho na to ani moc nenavedl. Většina kódu v části produktů je i v tom Pythonu psána dost deklarativně a občas přepíšu nějaký kousek staršího kódu, aby byl funkcionálnější a je to znát na čitelnosti.

Za každou cenu tedy z Pythonu nedělám FP jazyk, ale jsem nakažený (a šíří se to, aspoň v našem týmu).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 06. 04. 2011, 02:36:43
Jo, destructuring-bind dělá něco takového. Ale poradí si třeba s něčím takovým (předpokládám, že ten kód je poměrně pochopitelný)?

No, destructuring-bind jako takovy pojmenovat podvyraz neumi, ale s trochou googleni jsem nasel http://common-lisp.net/project/cl-match/doc/clmatch.htm (http://common-lisp.net/project/cl-match/doc/clmatch.htm), ktere to patrne umi (prikaz "as").
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 06. 04. 2011, 21:39:29
asi před rokem kolega s úspěchem nasadil do GUI kódu "currying" (tu pythonní obdobu) pro předzpracování zobrazených dat.

Chápu to správně, že místo f(data1) -> data2; g(data2) -> data3 pouzil f(data1) -> g; g() -> data3? Má to nějaké významné výhody, převažující nevýhodu, že sa na data2 nemůžu kouknout?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 06. 04. 2011, 23:16:25
asi před rokem kolega s úspěchem nasadil do GUI kódu "currying" (tu pythonní obdobu) pro předzpracování zobrazených dat.

Chápu to správně, že místo f(data1) -> data2; g(data2) -> data3 pouzil f(data1) -> g; g() -> data3? Má to nějaké významné výhody, převažující nevýhodu, že sa na data2 nemůžu kouknout?

V konkrétním kontextu (přiřazení metody v konstruktoru objektu) to má dost velkou výhodu v tom, že prakticky celé chování objektu je zřejmé z jednoho rychlého pohledu. Žádný meziobjekt s vlastním jménem se nevytváří. Představ si, že máš pole slovníků s daty jednotlivých řádků (třeba z databáze) a GUI objekt, který z těchto řádků dokáže vybrat podmnožinu zobrazených údajů (z klíčů ve slovníku) do sloupců a transformovat ji dynamicky podle aktuálního nastavení sloupců. Z transformace vzejde dvojice (reprezentace, řadicí data) tak, že ze slovníku { 'jmeno': 'KaRel', 'vek': 23 } uděláme { JMENO: ('Karel', 'Karel'), VEK: ('23', 23) }. Konstruktor pro sloupec má hlavičku

Kód: [Vybrat]
def __init__(nazev, transformace):

Pro každý sloupec můžeš udělat samozřejmě udělat samostatnou funkci typu

Kód: [Vybrat]
def transformujVek(radek):
  return (str(radek[klic]), radek[klic])

a tu funkci přidat do konstruktoru. Pokud si ale uděláš funkci transformuj(), která obsahuje functools.partial(), vypadá deklarace sloupců pro danou transformaci třeba takto:

Kód: [Vybrat]
Sloupec(
 JMENO,
 transformuj('jmeno', lambda x: x.capitalize(), lambda x: x)
),
Sloupec(
 VEK,
 transformuj('vek',lambda x: x, lambda x: x)
)

Příklad jsem zjednodušil a upravil, ve skutečnosti dochází k transformaci různorodých dat, skutečný kód je psán trochu pěkněji a samozřejmě je možné při volání funkce transformuj() vynechat implicitní hodnoty (typu lambda x: x). Ale doufám, že je z příkladu jasné, k čemu to slouží. Na parametry funkce transformuj() nikdy nikdo nahlížet nepotřeboval.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 06. 04. 2011, 23:20:32
Oprava:

Kód: [Vybrat]
def transformujVek(radek):
  return (radek['vek'], radek['vek'])
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 10. 04. 2011, 12:26:19
@Inkvizitor: Takže šlo vlastně jenom o to, aby byl kód pěkný a přehledný?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 10. 04. 2011, 12:53:46
@Inkvizitor: Takže šlo vlastně jenom o to, aby byl kód pěkný a přehledný?

Tak nějak. Podle mě to ale není málo.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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 :)
Název: Re: Čitelnost
Přispěvatel: Program 10. 04. 2011, 13:41:18
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?
Název: Re: Čitelnost
Přispěvatel: Mirek Prýmek 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ě".
Název: Re: Čitelnost
Přispěvatel: JS 10. 04. 2011, 14:54:12
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ě".

Myslim, ze z kontextu je jasne, ze ten problem elegantneji proceduralne zapsat neslo, kdezto funkcionalne ano. Pokud chcete trivialni priklad takove situace, staci se podivat na Unixovou pipe. To je fakticky funkcionalni zapis zpracovani dat (definujete novou funkci jako slozeni existujicich pomoci operatoru "|"), ktery by se proceduralne zapisoval obtizneji.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 10. 04. 2011, 15:15:52
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 (http://www.macs.hw.ac.uk/~dsg/gph/papers/html/Strategies/strategies_23.html). Procedurální kód je obecně špatně paralelizovatelný, zatímco čistě funkcionální přístup je přirozeně přístupný paralelizaci.
Název: Re: Čitelnost
Přispěvatel: Mirek Prýmek 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.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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 (http://www.macs.hw.ac.uk/~dsg/gph/papers/html/Strategies/strategies_23.html). 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.
Název: Re: Čitelnost
Přispěvatel: JS 10. 04. 2011, 15:51:13
Elegance kódu je subjektivní záležitost.

Vidim, ze jsem po tydnu pozapomnel, jak je s vami tezka domluva. Samozrejme, mozna ze by to Prymek napsal Inkvizitorovi lepe, takze by nemusel pouzit funkcionalni zapis. Coz nemuzeme vedet, protoze nezname konkretni problem. Ale to neni prekazka. Proto jsem vam obratem predhodil neco podobneho (Unix pipe), na ktere nam muzete zkusit demonstrovat, ze vse, co lze elegantne zapsat funkcionalne, lze elegantne zapsat i proceduralne (pricemz kriterium elegance ponecham na vas). Hodne stesti.
Název: Re: Čitelnost
Přispěvatel: Mirek Prýmek 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.
Název: Re: Čitelnost
Přispěvatel: JS 10. 04. 2011, 17:13:49
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.

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 (ani cloveka, ktery by o sobe prohlasoval, ze ho zna, coz, jak rikate, jeste neznamena, ze by se musel nutne libit i me). 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.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 10. 04. 2011, 17:14:57
Eh, myslel jsem protipriklad.
Název: Re: Čitelnost
Přispěvatel: Mirek Prýmek 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.
Název: Re: Čitelnost
Přispěvatel: JS 10. 04. 2011, 18:10:03
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...)

V tomhle pripade se "funkcionalni" tyka moznosti mit funkce, ktere pracuji s funkcemi. Tedy, napriklad, umoznuje specializaci argumentu (currying) - vratit z funkce 2 argumentu funkci na 2. argumentu, pro kterou uz je ten 1. argument konstantni. Operator "|" z prikazove radky uz je pak jen operatorem slozeni tech specializovanych funkci.
Název: Re: Čitelnost
Přispěvatel: JS 10. 04. 2011, 18:13:08
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"?

Apropos, tohle neni skladani funkci. C takovy operator nema (a uprimne ani nevim, jak by bylo mozne ho - bez pouziti maker - zapsat). Skutecny operator skladani funkci vam umoznuje napriklad tu vyrobenou funkci nekam predat.
Název: Re: Čitelnost
Přispěvatel: Mirek Prýmek 10. 04. 2011, 18:15:42
V tomhle pripade se "funkcionalni" tyka moznosti mit funkce, ktere pracuji s funkcemi.

A roura pracuje s funkcemi?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Program 10. 04. 2011, 18:33:25
V tomhle pripade se "funkcionalni" tyka moznosti mit funkce, ktere pracuji s funkcemi.

A roura pracuje s funkcemi?

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...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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.
Název: Re: Čitelnost
Přispěvatel: JS 10. 04. 2011, 19:02:55
V tomhle pripade se "funkcionalni" tyka moznosti mit funkce, ktere pracuji s funkcemi.

A roura pracuje s funkcemi?

Da se to tak chapat. Kdyz napisu treba "sort -n -k 1" nebo "grep hello -", vytvorim tim funkci, ktera bere radky standardniho vstupu a transformuje je na standardni vystup. Program sort nebo grep sam o sobe takovou funkci neni, protoze ma jeste dodatecne argumenty; teprve spolu s jeho argumenty tvori tu funkci ze stdin na stdout. Muzeme tedy ten program grep chapat jako funkci, ktera vraci funkci konkretni operace pro zadany argument. Operator "|" pak takove funkce sklada. Jak uz tady nekdo naznacoval, neskodilo by vam podivat se na lambda kalkul.
Název: Re: Čitelnost
Přispěvatel: Mirek Prýmek 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.


Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 10. 04. 2011, 19:14:22
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)

Jenze to ma sve meze. Ja bych rad videl, jak do C zavedes funkci, ktera specializuje jeden argument zadane funkce (a vraci zase funkci), nebo jak tam zavedes funkci, ktera vrati funkci, ktera je slozenim 2 zadanych funkci. Oboji je potreba na implementaci neceho jako "|" v Unixu. V Pythonu se to udelat da, protoze ma uzavery. Takze, v jazyce jako C, jak takovou operaci, vyuzivajici "|", elegantne zapises?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: alefo 10. 04. 2011, 19:15:31
Neda sa nahodou funkcionalna paradigma ovela lahsie paralelizovat ,,pod kapotou", zatial co napr. for-cyklus nie?

Inak mam pocit, ze akonahle date vyvojarovi pracovat s funkciami ako plnopravnymi elementami a zacnete uvazovat vo funkciach, ich skladaniach, curryingoch, a pod., zacinate zavadzat elementy funkcionalneho programovania.

Mozete to spravit aj v Ccku cez pointre na funkcie a podobne, rovnako v Jave cez interfejsy, otazka bude, ako elegantne sa to bude pouzivat :-)


Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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í*.
Název: Re: Čitelnost
Přispěvatel: JS 10. 04. 2011, 20:02:35
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.

Nemuzu vedet, co vite a co ne. Me pripada analogie mezi curryingem a pipelinou zrejma, vam asi ne. Nemuzu ani vedet, zda vubec vite, co je currying. 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)

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í*.

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.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: alefo 10. 04. 2011, 20:04:21
Lenze keby niekto preimplementoval funkciu map() / reduce() v Pythone na nieco efektivnejsie, programy pobezia automaticky rychlejsie, zatialco klasicke for-cykly nie.

-------

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).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 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...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 10. 04. 2011, 20:44:29
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...

Myslim, ze uzaver (closure) je neco jineho, nez co si vy myslite, ze to je. Znovu nezbyva nez doporucit On Lisp, tam je to pekne popsane vcetne pripadu pouziti (ja jsem si az tam uvedomil, co jsou uzavery a k cemu jsou dobre).
Název: Re: Čitelnost
Přispěvatel: Mirek Prýmek 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...
Název: Re: Čitelnost
Přispěvatel: JS 10. 04. 2011, 21:38:00
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ě.

To se mozna prelozi stejne, ale ten funkcionalni bude v nekterych pripadech kratsi a citelnejsi. Takze to neni tak uplne jen "veci vkusu". Nehlede na to, ze treba zminene uzavery pomahaji i modularite.

ale ještě ze mě při tom děláte vola

Kdyz si to chcete myslet..
Název: Re: Čitelnost
Přispěvatel: Mirek Prýmek 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?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 10. 04. 2011, 21:45:54
Jenže ono to na "něco efektivnějšího" implementovat afaik nejde, protože ten jazyk prostě funkcionální *není* a *nikdy nebude*.

Jakto? Pokud mate uzavery, nic vam nebrani implementovat smycku nejak paralelne. Proste predefinujete tu funkci map() na neco vhodnejsiho. Mimochodem, to, ze se smycka da zapsat jako funkce nazyva Doug Hoyte v Let Over Lambda pripadem "syntakticke duality", a tvrdi, ze tyto duality jsou hlavni duvod, proc je Lisp tak dobry jazyk (a proc programatori snaseji ty zavorky).
Název: Re: Čitelnost
Přispěvatel: JS 10. 04. 2011, 21:47:55
http://forum.root.cz/index.php?topic=1978.msg15951#msg15951

Blik?

Ano, vim ze si to myslite, ale dokud mi nepredvedete podle vas subjektivne elegantnejsi zapis nejakeho pouziti Unixove pipe, nemuzu to fakt brat vazne.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 10. 04. 2011, 22:17:32
Mimochodem, to, ze se smycka da zapsat jako funkce nazyva Doug Hoyte v Let Over Lambda pripadem "syntakticke duality", a tvrdi, ze tyto duality jsou hlavni duvod, proc je Lisp tak dobry jazyk (a proc programatori snaseji ty zavorky).

Kde přesně to je?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 11. 04. 2011, 01:12:12
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.

No vida a zrovna na tohle je ideální funkcionální konstrukce
Kód: [Vybrat]
" ".join(["a", "b", "c", "d", "e"])Obě řešení navíc obsahují chybu (to není kritika, chápu, že jde o rychlý příklad), neboť na rozdíl od joinu si nedokáží poradit s prázdným vstupním seznamem. V takovém případě bych asi stejně nasadil funkci, samozřejmě s tím rizikem, že v Pythonu je volání funkce poměrně drahé. Jinak by tam musel ještě přibýt if a došli bychom k tomu, co nemám rád - procedurální/imperativní kód bobtná a stává se méně a méně přehledným. Tu funkcionální verzi lze zkrátit ve stylu
Kód: [Vybrat]
l = ["a", "b", "c", "d", "e"]
result = reduce(lambda x, y: x+" "+y, l) if l else ''
ikdyž samozřejmě zůstává otázkou, co je nakonec čitelnější. Já hlasuji pro one-liner.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 11. 04. 2011, 01:26:10
No vida a zrovna na tohle je ideální funkcionální konstrukce
Kód: [Vybrat]
" ".join(["a", "b", "c", "d", "e"])

Tak teď teda už vůbec nechápu, co se slovem "funkcionální" míní, pokud volání metody objektu je "funkcionální konstrukce" :)

Join jsem schválně vynechal, abych lacině netvrdil, že "procedurální" řešení je přehledný oneliner... Není to fér, protože to je knihovní funkce udělaná přesně na tuhle jednu věc. Každopádně jsem tohle řešení ale považoval za "procedurální".

...aspoň jsme hezky došli na to, na co jsem se JS neúspěšně ptal... co vlastně míní pojmem "funkcionální [obrat,konstrukce,postup,...]", jestliže se bavíme o procedurálním jazyku.

Obě řešení navíc obsahují chybu (to není kritika, chápu, že jde o rychlý příklad),
Jasně. V tom druhém případě jsem to tam i napsal.

Jinak by tam musel ještě přibýt if a došli bychom k tomu, co nemám rád - procedurální/imperativní kód bobtná a stává se méně a méně přehledným. Tu funkcionální verzi lze zkrátit ve stylu
Kód: [Vybrat]
l = ["a", "b", "c", "d", "e"]
result = reduce(lambda x, y: x+" "+y, l) if l else ''
ikdyž samozřejmě zůstává otázkou, co je nakonec čitelnější. Já hlasuji pro one-liner.

Pokud se shodneme na tom, že volba mezi hutným "funkcionálním" onelinerem a upovídanějším "procedurálním" forem je otázkou subjektivního vkusu, tak ok. Já rozhodně nebudu tvrdit, že for je hezčí - jen, že mně osobně přijde ve většině případů na první pohled přehlednější, což nikomu nevnucuju. For má jedinou objektivní výhodu: "procedurálních" programátorů je víc a tím bude kód srozumitelnější více lidem.

P.S. dáme závod o nejnečitelnější "funkcionální" oneliner? ;)

UPDATE: P.P.S. nevím, proč pořád píšu "procedurální", měl jsem samozřejmě celou dobu namysli "imperativní", omlouvám se. (Ale zjevně to všichni pochopili, tak se zas tak nestalo)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 11. 04. 2011, 01:33:08
P.S. dáme závod o nejnečitelnější "funkcionální" oneliner? ;)

Já už jsem jeden docela drsný kdysi napsal:
Kód: [Vybrat]
http://www.root.cz/clanky/perlicky-uvod-do-referenci/nazory/187499/
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 11. 04. 2011, 01:44:01
Já už jsem jeden docela drsný kdysi napsal:
Kód: [Vybrat]
http://www.root.cz/clanky/perlicky-uvod-do-referenci/nazory/187499/

Ten je moc hezkej. Hlavně na ilustraci, že v rámci nadšení z funkcionálního programování jde i do jinak hezkého pythonu zatáhnout dokonce i parenthesis hell* ;)

Ten asi netrumfnu, vzdávám se :)

* http://esoteric.voxelperfect.net/wiki/Parenthesis_Hell
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 11. 04. 2011, 02:08:58
No vida a zrovna na tohle je ideální funkcionální konstrukce
Kód: [Vybrat]
" ".join(["a", "b", "c", "d", "e"])

Tak teď teda už vůbec nechápu, co se slovem "funkcionální" míní, pokud volání metody objektu je "funkcionální konstrukce" :)

Napřed se omluvím, že jsem zas použil blbý tag v předchozím příspěvku.

Volání metody objektu je IMO funkcionální konstrukce právě v případě, že se chová, jakoby šlo o volání funkce s malinko jinou syntaxí. s.join(l) lze snadno převést na join(s, l) a funguje to úplně stejně dobře - to, že je ta implementace uvnitř třídy, v tomto případě nic moc nemění. K tomu bych chtěl poznamenat dvě věci. Vzhledem k tomu, že jsi poznal Haskell, asi víš, že v Haskellu se, až na dědičnost, celé OOP slušně nahrazuje typovými třídami (školní ukázka je funkce show). Takže kdybychom napsali
Kód: [Vybrat]
join :: String -> [String] -> String
join s [] = ""
join s [x] = x
join s (x:xs) = x ++ s ++ (join s xs)

main = print $ " " `join` ["a", "b", "c", "d", "e"]
dostali bychom se k podobné syntaxi a v zásadě i sémantice. A volání metody, která má jenom jeden parametr, lze ve Scale napsat ve stylu infixové funkce. Kdyby třída String měla metodu join(), bylo by možné psát normálně
Kód: [Vybrat]
" " join List("a", "b", "c", "d", "e")
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 11. 04. 2011, 02:29:10
Promiň, ale jestli budeme za "funkcionální obrat" považovat všechno, co nám *nějak* (v tomhle případě jenom pořadím "objektů") připomíná něco z nějakého funkcionálního jazyka, tak to už jsme ten pojem definitivně vyprázdnili a pro mě osobně ztrácí smysl ho vůbec používat...

(nic ve zlým, to není kritika, jenom takový povzdech)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 11. 04. 2011, 07:13:07
Mimochodem, to, ze se smycka da zapsat jako funkce nazyva Doug Hoyte v Let Over Lambda pripadem "syntakticke duality", a tvrdi, ze tyto duality jsou hlavni duvod, proc je Lisp tak dobry jazyk (a proc programatori snaseji ty zavorky).

Kde přesně to je?

Kvuli tomu tu knizku nema cenu cist.. V podstate tvrdi, ze cim vic ma jazyk regularnejsi syntaxi (napr. tedy pokud se specialni formy, makra i funkce zapisuji jako volani funkce, jako v Lispu, ale to neni jen tento pripad), tim je snazsi programy (zrejme mysli dobre napsane) v tom jazyce modifikovat. Nejsem si uplne jisty, ze s nim souhlasim, ale ta idea ma neco do sebe.

Priklady takovych syntaktickych dualit v Pythonu by byly napriklad moznost predefinovat si vlastni operatory v tridach (coz treba Java nema), nebo explicitni self v metodach.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 11. 04. 2011, 07:18:12
Promiň, ale jestli budeme za "funkcionální obrat" považovat všechno, co nám *nějak* (v tomhle případě jenom pořadím "objektů") připomíná něco z nějakého funkcionálního jazyka, tak to už jsme ten pojem definitivně vyprázdnili a pro mě osobně ztrácí smysl ho vůbec používat...

Musim rict, ze s Inkvizitorem v tomhle trochu nesouhlasim, a taky jsem ti dal lepsi definici, coz bylo pouzivaji se funkce vyssich radu (bere funkce jako argument a vraci zase funkci) nebo (coz je v podstate specialni pripad) provadi specializace argumentu (pro funkci a argument funkce 2 argumentu vraci funkci na 1 argumentu). Pricemz "funkcionalni" jazyk je takovy, ktery umoznuje takove funkce psat (a Python jim tedy je, protoze ten je, podobne jako Common Lisp, multiparadigmaticky).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 11. 04. 2011, 11:07:17
Kvuli tomu tu knizku nema cenu cist..

Já chci jenom vědět, kde to v té knížce je.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 11. 04. 2011, 11:20:30
Kvuli tomu tu knizku nema cenu cist..

Já chci jenom vědět, kde to v té knížce je.

http://letoverlambda.com/index.cl/guest/chap3.html#sec_7 (http://letoverlambda.com/index.cl/guest/chap3.html#sec_7)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 11. 04. 2011, 11:22:45
Oops, a jeste pak v kapitole 7, ktera neni na webu. Je to tam trochu roztahane, a jak rikam, kvuli tomu nema cenu to cist (i kdyz ta knizka je celkem pekna a originalni, ale nedoporucoval bych ji nekomu, kdo Lisp vubec nezna).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 11. 04. 2011, 11:31:14
http://letoverlambda.com/index.cl/guest/chap3.html#sec_7 (http://letoverlambda.com/index.cl/guest/chap3.html#sec_7)

No tohle jsem právě četl a nikde tam nevidím "to, ze se smycka da zapsat jako funkce". Takže je to v té 7mé kapitole? Kde přesně?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 11. 04. 2011, 11:48:41
No tohle jsem právě četl a nikde tam nevidím "to, ze se smycka da zapsat jako funkce". Takže je to v té 7mé kapitole? Kde přesně?

Myslel jsem si, ze do toho budes takto stourat. V te 7. kapitole je to vysvetlene, a v podstate jsem ti to shrnul. Nemam tu knizku ted po ruce, mam ji doma. Ale ta hlavni myslenka je, ze regularni syntaxe je dobra vec. Konkretne, aplikovano na smycky (nebo jiny syntakticky konstrukt) to znamena, ze je snadne nahradit smycku necim jinym.

Treba kdybych v Lispu napsal:
Kód: [Vybrat]
(loop for i from 1 to 10 do (print i))
Tak protoze ta smycka je vlastne volani funkce (nebo spis makra), neni problem pozdeji tu smycku zmenit a napsat tam my-loop misto loop, kde to my-loop muze treba tu smycku paralelizovat. Zatimco v Pythonu (nebo jinem jazyce) by to problem byl, protoze bych musel misto zapisu smycky pouzit volani funkce, nebo co ja vim, proste predelat cely ten kod. Takze v tomhle je videt, jak ta syntakticka dualita umoznuje menit kod na mene zasahu.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Nomen 11. 04. 2011, 11:51:37
je to v té 7mé kapitole? Kde přesně?

Když už se tu řeší ty programovací jazyky, tak jen připomínám, že v tom lidském, českém, se řadové číslovky označují tečkou. Připsaná pádová koncovka se připouští jen v místech, kdy může hrozit nedorozumění (záměna s nějakým symbolem atp.).
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 11. 04. 2011, 12:11:24
Tak protoze ta smycka je vlastne volani funkce (nebo spis makra), neni problem pozdeji tu smycku zmenit a napsat tam my-loop misto loop, kde to my-loop muze treba tu smycku paralelizovat.

Tak to jo :))) Tak kvůli tomu tu knížku opravdu není potřeba číst...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Ed 11. 04. 2011, 17:22:09
A tady je IMO jasná demonstrace, že Lisp (Scheme) se jako jazyk pro skriptování Gimpu moc neosvědčil a jeho volba byla dána pravděpodobně dobovým kontextem: http://forum.root.cz/index.php?topic=1884.0 (http://forum.root.cz/index.php?topic=1884.0) Zlatý Python, zlatá Lua...

Ja myslim, ze Scheme bylo v GIMPu pouzite z toho duvodu, ze je velice snadne pro nej napsat embedded interpreter. Pokud se nechces (nemuzes) spolehat na interface do jineho jazyka, je to vyborn volba. Ja jsem si ho kdysi naprogramoval jako skriptovaci jazyk do jednoho projektu v Pythonu, protoze v Pythonu nejde/neslo zarucit, ze cizi skripty jsou bezpecne. A interface do Lua je v Pythonu porad nejak moc obskurni.

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Ed 11. 04. 2011, 17:50:14
LISP a GIMP. V GIMPu je LISP pouzit ve script-fu pluginech. A me by zajimalo, jak to v tom GIMPu funguje, jakym zpusobem je LISP implementovany a jak spolupracuje s jazykem, ve kterem je GIMP napsany. Jestli to nekdo vi, nebo ma nekdo odkazy, kde se to lze dozvedet, tak je uvedte. A pripadne jestli nekdo pise script-fu pluginy, tak jak se pisou, a neco kolem nich (nejaky kratky povidani, nebo odkazy).

GIMP je napsany v C. V Script-fu skriptech pouzivas volani funkci ve stylu

Kód: [Vybrat]
(if (not (= shadow 0))
        (begin
          (gimp-image-add-layer img shadow-layer -1)
          (gimp-edit-clear shadow-layer)))

    (gimp-context-set-background '(0 0 0))

Na psani Script-fu skriptu se staci podivat na par skriptu (locate .scm|grep gimp) a potom pouzivat API browser, ktery je v GIMPu v menu Help. Teda aspon pokud pises skripty vicemene stejne, jako bys je psal treba v Perlu nebo Pythonu ;-).

Repozitory skriptu si najdi pres Google, pokud mas GIMP tak viz ten locate.

Jak je resene rozhrani do SF na strane GIMPu si uz nepamatuju, ale krome samotneho VM a definice typu uz staci vice mene napsat jenom funkci, ktera dostane jako parametr Lispovy list, podle car udela nejakou opraci a vrati list, nebo tak neco :). A to "nejakou operaci" je treba volani ceckoveho gimp_image_add_layer(list[1], list[2], list[3])

Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 11. 04. 2011, 23:34:45
Promiň, ale jestli budeme za "funkcionální obrat" považovat všechno, co nám *nějak* (v tomhle případě jenom pořadím "objektů") připomíná něco z nějakého funkcionálního jazyka, tak to už jsme ten pojem definitivně vyprázdnili a pro mě osobně ztrácí smysl ho vůbec používat...

(nic ve zlým, to není kritika, jenom takový povzdech)

Myslím, že si nerozumíme. Funkcionální řešení problému je u mě takové, které říká, co je třeba s daným vstupem udělat, aby na výstupu vyšla určitá hodnota závislá pouze na vstupních parametrech a na ničem jiném. Rovněž nemá funkcionální kód žádné vedlejší efekty, prostě jenom transformuje podle daného předpisu určitý vstup na nějaký výstup. Řečeno ještě jinak, definujeme matematicky určitou transformační funkci. Ta funkce je černá skříňka a naprosto nic neříká o reprezentaci mezivýsledků, o časové posloupnosti, o pořadí vyhodnocování operandů, protože na pořadí jejich vyhodnocení vzhledem k výsledku nezáleží. Proto tvrdím, že když zavolám s.join(l), jde o funkcionální zápis, zatímco pokud vytvořím cyklus, který postupně skládá podřetězec a na konci k němu připojí poslední prvek seznamu, nejde už o funkcionální zápis. Šlo by o něj pouze v případě, že bychom byli natolik tolerantní, že nám bude jedno, že nám Python kód zcela přeuspořádá a podle svého uvážení bude připojovat prvky seznamu odzadu dopředu. Nevěřím, že by existovalo mnoho imperativních programátorů, kteří by to přežili bez klení.

Z tohoto pohledu je mi jedno, jestli daný jazyk podporuje funkce vyšších řádů, zda dokáže skládat funkce tak, že vynechá mechanismus volání rutin a předávání parametrů přes zásobník atd. Jasně, že chci, aby program běžel co nejoptimálněji a neměl zbytečnou režii. Nicméně je pro mě důležité, abych mohl program psát (alespoň na nejvyšší úrovni) tak, že specifikuji co je třeba vypočítat a ne jak to má program/počítač udělat. Nakolik mi v tom daný jazyk/interpret/knihovny/virtuální stroj pomáhají, to je důležité, ale rozhodnutí, zda budu program záměrně strukturovat tak, abych se co nejvíce izoloval od fyzické implementace a reprezentace dat, je pouze na mně. Funkcionální přístup vychází z programátora a ne z jazyka. Doufám, že jsem svůj postoj dostatečně vysvětlil.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 11. 04. 2011, 23:46:42
Doufám, že jsem svůj postoj dostatečně vysvětlil.

Jo. Teď už tomu rozumím a dává to smysl.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 12. 04. 2011, 11:30:24
Nicméně je pro mě důležité, abych mohl program psát (alespoň na nejvyšší úrovni) tak, že specifikuji co je třeba vypočítat a ne jak to má program/počítač udělat.

Me prijde, ze tohle je obecny duvod, proc zavadime nejake jazyky (a nechavame optimalizovat kompilator). Pokud uz bych to musel nejak nazvat, tak spis deklarativnim programovanim nez funkcionalnim. To same by slo rict o OOP, ze nemusime rucne kodovat tabulky virtualnich metod. Nebo o Prologu - je funkcionalni? V podstate kazda abstrakce, kterou nam jazyk dava (a Lisp nam dava moznost tvorit nove) je krokem k tomu "co misto jak", protoze to jak schovava nekam pod kapotu.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Inkvizitor 13. 04. 2011, 22:30:31
Nicméně je pro mě důležité, abych mohl program psát (alespoň na nejvyšší úrovni) tak, že specifikuji co je třeba vypočítat a ne jak to má program/počítač udělat.

Me prijde, ze tohle je obecny duvod, proc zavadime nejake jazyky (a nechavame optimalizovat kompilator). Pokud uz bych to musel nejak nazvat, tak spis deklarativnim programovanim nez funkcionalnim. To same by slo rict o OOP, ze nemusime rucne kodovat tabulky virtualnich metod. Nebo o Prologu - je funkcionalni? V podstate kazda abstrakce, kterou nam jazyk dava (a Lisp nam dava moznost tvorit nove) je krokem k tomu "co misto jak", protoze to jak schovava nekam pod kapotu.

Samozřejmě, to je víceméně definice deklarativního přístupu, že definujeme, co se má spočítat a ne jak. Ovšem kromě logického a funkcionálního programování moc obecných deklarativních paradigmat neznám a logické programování vypadá jinak (pokud mohu soudit z malé zkušenosti, kterou jsem získal s Prologem na škole). Ale tomu příkladu s tabulkami virtuálních metod moc nerozumím. Je snad virtuální metoda součástí zadání? Mně přijde, že OOP jde jiným směrem a řeší jiné problémy než FP a přestože je daný jazyk založený na OO paradigmatu, pořád v něm lze používat konstrukce, které bych nazval funkcionálními. Jak jsem psal, důležitý je IMO zejména mentální model, způsob, jakým se na řešení úlohy díváme. Funkcionálně mohu programovat i v C přes globální proměnné. Pak je ale problém s ověřováním integrity a to FP má omezený dosah.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 13. 04. 2011, 23:06:24
Mně přijde, že OOP jde jiným směrem a řeší jiné problémy než FP a přestože je daný jazyk založený na OO paradigmatu, pořád v něm lze používat konstrukce, které bych nazval funkcionálními.

Na něco podobného už jsme tady taky narazili - říkal jsem, že je nesmysl vyčítat nějakému jazyku, že nemá nějaké konstrukce. Jediné, co by mělo smysl mu vyčítat, by bylo, že nějaký typ praktického problému se v tom jazyce dá těžko vyřešit.

Pokud bysme byli poctiví, musíme zákonitě nakonec přijít na to, že ve všech používaných jazycích se dají zhruba stejně dobře řešit všechny praktické problémy (jinak by ty jazyky nikdo nepoužíval) - s tím, že na některé specialitky je trochu lepší jeden, na druhé jiný, ale celkově mají ve finále všechny stejné možnosti. V jednom jazyce se praktický problém X vyřeší správnou OO dekompozicí, v jiném nadefinováním vlastního whilu, v dalším jánevímjakou logickou magií.

Tvrdit, že jazyk A je špatný, protože se v něm nedá nadefinovat vlastní while, nebo že B je špatný, protože nemá zabudované superrychlé lightweight procesy, je krávovina. Ten jazyk ty konstrukce nemá, protože nabízí jiné řešení *praktických* problémů.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 14. 04. 2011, 08:59:13
Pokud bysme byli poctiví, musíme zákonitě nakonec přijít na to, že ve všech používaných jazycích se dají zhruba stejně dobře řešit všechny praktické problémy (jinak by ty jazyky nikdo nepoužíval) - s tím, že na některé specialitky je trochu lepší jeden, na druhé jiný, ale celkově mají ve finále všechny stejné možnosti.

Klidne si to mysli, ale je dost lidi, chytrejsich nez ty, kteri si to nemysli. Ze je to "zakonite" bych z toho vynechal.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 14. 04. 2011, 11:34:50
Klidne si to mysli, ale je dost lidi, chytrejsich nez ty, kteri si to nemysli.

A co z toho plyne? Ze si to musim myslet taky?

A co kdyz jeden clovek chytrejsi nez ja si to mysli a druhy chytrejsi nez ja si to nemysli? Co ja chudacek pak mam delat?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 14. 04. 2011, 12:52:47
A co z toho plyne? Ze si to musim myslet taky?

Jak uz jsem psal, plyne z toho, ze to neni "zakonite" a ze si to nemusime myslet, i kdybychom "chteli byt poctivi". (To co je v uvozovkach jsi napsal vyse.)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: nm - novomente 14. 04. 2011, 15:55:45
Tak uz vim, co je to "flame". Nasel jsem si to na wikipedii. Tam se mluvi o "flame war", neboli "prilis ohniva diskuse". Tady v nasi diskusi o LISPu, podle mne sice flame nevznikl (nebo se pletu?), ale byla to docela dlouha hadka.

Nechci nikomu stranit, ani se pridavat na neci stranu (protoze, vsichni tady maji v necem pravdu), ale ted je to prave JS, kdo tady startuje dalsi hadku.

A co se tyka chytrosti? Ja teda nejsem zrovna genius. A kdybych byl, nejspis uz bych mel za sebou nejakou vysokou skolu a pracoval v nejaky dost dulezity firme. Nechci se hadat kvuli IQ. Co vim je to, ze jsou lidi chytrejsi nez ja a jsou lidi hloupejsi nez ja. A nikoho za to nijak neodsuzuju. Proste kazdy ma svoje a kazdy je v necem lepsi nez ten druhy i kdy je treba hloupejsi nez ten druhy.

Videl jsem nekolik dokumentu o vyznamnych firmach z ruznych oborun. Mluvili tam lidi z vyvojovych laboratori. A vypraveli ruzny prihody. A skoro pokazdy tam vypraveli, ze se schazeji nekde v baru nebo nejake te hospudce, kde probiraji tak nejak oddychove veci kolem nejakyho vyvoje. V te diskusi vzdycky nekdo placl nejakou hovadinu a kolikrat to myslel jen tak ze srandy. Jenomze z te hovadiny nakonec byla diskuse mnohem vaznejsi, pak z toho byl vyvoj v laboratorich a nakonec z nich vysel jeden z nejslavnejsich produktu te ci one firmy. Ja vim, ze ty pribehy jsou uz casem zkresleny, ale to placnuti hovadiny tam je porad. Dulezity je, ze ta hovadina padla na skupinu spolupracujicich kreativnich lidi.

A proc o tom mluvim prave ted?

Nepripada mi, ze by Mirek placl nejakou hovadinu. Spis naopak. Mluvi o tom, ze kazdy programovaci jazyk dokaze svym osobitym zpusobem resit zakladni problemy (jake to presne jsou sice nrekl, ale budiz). Dale rekl, ze urcite speciality dokaze jeden jazyk resit lepe nez ten druhy (opet nerekl, o jake speciality jde, ale opet budiz). A tim, podle mne, priznal, ze i LISP dokaze resit zakladni problemy svym osobitym zpusobem stejne, jako jine jazyky. A ze i LISP ma sve speciality, diky kterym dokaze jiste veci resit lepe nez jine jazyky. Stejne je na tom Python, Boo, Cecko, Java, Assembler atd.

Tak  jsem si tak rikal, ze diskuse konecne nabere konstruktivnejsi podobu, kde si lidi budou vymenovat svoje zkusenosti s tim ci onym jazykem a nebudou se hadat. Ale safra, nejak nam to nevychazi. To protoze tu porad jednu z hlavnich roli hraji emoce.

No ale budiz. Pokud je to dulezity, nebudu nejak zvlast do toho zasahovat. Konec koncu je to nase diskuse a jestli ma kdokoliv pocit nejakych nevyjasnenych veci, nebo emoci, at se jich tady zbavi hned. Je to lepsi, nez je drzet v sobe. A az se to vsechno tak nejak vyjasni a vyvazi, rad si prectu, co z toho nakonec ve finale vznikne.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 14. 04. 2011, 17:43:19
Mluvi o tom, ze kazdy programovaci jazyk dokaze svym osobitym zpusobem resit zakladni problemy (jake to presne jsou sice nrekl, ale budiz). Dale rekl, ze urcite speciality dokaze jeden jazyk resit lepe nez ten druhy (opet nerekl, o jake speciality jde, ale opet budiz).

Ani ne tak "zakladni", jako spis "bezne". V kazdem bezne pouzivanem jazyce jdou resit vsechny bezne problemy bezneho zivota. Jinak by to nebyl bezny jazyk, ale nejaka nepouzitelna akademicka hracka.

A co se tyce tech specialitek, treba ten nekolikrat tady zminovany Erlang umoznuje hezky stavet mnoho-procesove programy. Takze pokud potrebuju paralelne komunikovat mezi mnoha subjekty, zrejme sahnu po Erlangu a ne po Fortranu. Kdyz budu chtit co nejrychleji pocitat, sahnu po Fortranu a ne po Erlangu.

A tim, podle mne, priznal, ze i LISP dokaze resit zakladni problemy svym osobitym zpusobem stejne, jako jine jazyky.

No ale s tim nemam zadny problem od zacatku. Mozna doslo k mensimu nedoirozumeni, ktereho si vsimam casto: obcas lidi nechapou, ze kdyz s nekym nesouhlasim z toho duvodu, ze podle me na svoje tvrzeni nema narok (to tvrzeni je prilis silne), tak to je neco jineho, nez kdybych tvrdil opak, nez tvrdi on.

Proste kdyz se potkam s fanatikem, ktery tvrdi, ze Buh urcite existuje, tak s nim nebudu souhlasit a budu tvrdit, ze neco takoveho nema narok tvrdit, protoze nema dukaz. To ale neznamena, ze bych tvrdil, ze Buh neni...

Nemam zadny duvod tvrdit, ze Lisp se na nic nehodi, nebo ze je to spatny jazyk. Proc bych to delal? Naopak lisparum preju, at si s chuti s Lispem uzivaji. Kazdy at si pouziva to, co mu vyhovuje - co je mne do toho?

Akorat teda kdyz jsou takovi mistri sveta, ze z ostatnich delaji idioty, tak by mohli umet alespon cast svych prilis silnych tvrzeni nejak dolozit a ne vsechny pozurazet o potom na konkretni dotazy odpovedet jenom "to bys stejne nepochopil, protoze neznas Lisp"...
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 14. 04. 2011, 18:00:46
Jak uz jsem psal, plyne z toho, ze to neni "zakonite" a ze si to nemusime myslet, i kdybychom "chteli byt poctivi". (To co je v uvozovkach jsi napsal vyse.)

Tak jo, pojdme se teda handrkovat uz o uplnych pitomostech... aspon si udelame pekne cviceni z logiky, ktera nam tady v tom funkcionalne-imperativnim handrkovani trochu chybela.

----------

A odkud beres tu jistotu, ze vsichni lidi, kteri jsou chytrejsi nez ja, jsou POCTIVI? Nebo jak vis, ze vsichni ti z nich, kteri jsou poctivi, si nemysli to, co jsem rekl?

Pokud bysme byli poctiví, musíme zákonitě [...]

:)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 14. 04. 2011, 18:18:13
A odkud beres tu jistotu, ze vsichni lidi, kteri jsou chytrejsi nez ja, jsou POCTIVI? Nebo jak vis, ze vsichni ti z nich, kteri jsou poctivi, si nemysli to, co jsem rekl?

Ty jsi ten, kdo se v tom chce porad rypat. Ja myslim, ze to co jsi napsal, jsem pochopil jasne. Tedy, ze "kazdy rozumny clovek musi prijmout, ze vsechny jazyky maji stejnou vyjadrovaci silu". To zkratka neni pravda, viz napr. Paul Graham, a uz to tu v diskusi padlo. Je mi lito ze to NM pochopil spatne, ale nemohl jsem tohle (dost arogantni tvrzeni) nechat bez odezvy. Dost mi vadi, ze ostatni obvinujes z arogance, a pritom se tak sam chovas.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 14. 04. 2011, 18:25:54
Ja myslim, ze to co jsi napsal, jsem pochopil jasne. Tedy, ze "kazdy rozumny clovek musi prijmout, ze vsechny jazyky maji stejnou vyjadrovaci silu".

Mozna jsi to pochopil dle sveho nazoru jasne, ale dle meho nazoru spatne.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 14. 04. 2011, 18:39:20
Mozna jsi to pochopil dle sveho nazoru jasne, ale dle meho nazoru spatne.

Jak mam tedy chapat vetu "Pokud bysme byli poctiví, musíme zákonitě nakonec přijít na to, že ve všech používaných jazycích se dají zhruba stejně dobře řešit všechny praktické problémy (jinak by ty jazyky nikdo nepoužíval)"?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 14. 04. 2011, 18:47:04
Jak mam tedy chapat vetu "Pokud bysme byli poctiví, musíme zákonitě nakonec přijít na to, že ve všech používaných jazycích se dají zhruba stejně dobře řešit všechny praktické problémy (jinak by ty jazyky nikdo nepoužíval)"?

Snad se v tom nechces stourat?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: JS 14. 04. 2011, 18:49:52
Snad se v tom nechces stourat?

Ty jsi tvrdil, ze jsem te pochopil spatne, tak chci vedet, v cem? Ale muzeme to nechat byt, ja s tim problem nemam. Jen pridam (znovu) odkaz na toho Grahama: http://www.paulgraham.com/avg.html (http://www.paulgraham.com/avg.html) (kde zcela jasne polemizuje s moji interpretaci tvoji vety)
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 14. 04. 2011, 19:08:16
Ty jsi tvrdil, ze jsem te pochopil spatne, tak chci vedet, v cem?

Jeden clovek, zarucene chytrejsi nez ja, mi vytknul, ze se v tom porad stouram, tak bych ho rad poslechl a vyhnul se dalsimu stourani.

Jen pridam (znovu) odkaz na toho Grahama: http://www.paulgraham.com/avg.html (http://www.paulgraham.com/avg.html) (kde zcela jasne polemizuje s moji interpretaci tvoji vety)

To je sice od tebe hezke, ale nevim, jak s tim nasim stouranim souvisi nejaky text nejakeho pana, o kterem se domnivas, ze polemizuje s nejakou tvoji interpretaci neceho, co ten pan nikdy neslysel, tim spis, kdyz tu tvoji interpretaci autor vyroku vyslovne oznacil za chybnou.

Jestli si chces udelat stouraci cviceni, delej si ho sam. Mam par uloh pro zacatek:

Veta A: "Pokud bysme byli poctiví, musíme zákonitě nakonec přijít na to, že ve všech používaných jazycích se dají zhruba stejně dobře řešit všechny praktické problémy (jinak by ty jazyky nikdo nepoužíval)"

Veta B: kazdy rozumny clovek musi prijmout, ze vsechny jazyky maji stejnou vyjadrovaci silu".

1. Ve vete A najdete pojem "vyjadrovaci sila"
2. Pokud tam neni, zduvodnete ekvivalentnost obratu "[lze] *zhruba* stejne dobre resit *prakticke* problemy" a "vyjadrovaci sila [jazyka]"
2. Dokazte, ze kazdy rozumny clovek musi prijmout vse, na co poctivy clovek nakonec prijde.
3. Dokazte, ze kazdy rozumny clovek musi prijmout, ze nejvetsi vyjadrovaci silu ma strojovy kod.
4. Dokazte, ze z dukazu bodu 3. vyplyva, ze kazdy rozumny clovek musi psat programy ve strojovem kodu.
5. Jestli jste dosli az sem, zamyslete se nad tim, jestli kolem vas neni nejaka ponekud dulezitejsi prace, protoze takovy kraviny muze resit jenom magor.
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Mirek Prýmek 14. 04. 2011, 22:29:18
No nic, tak dame tecku, ne?

Paul uz je trochu otrepanej, tak z jinyho soudku:

http://secretgeek.net/lisp_truth.asp a znej citovany http://www.aaronsw.com/weblog/rewritingreddit

...at nekoncime tak smutne :))

Koneckoncu, muze byt i trochu smutno, kdyz je veselo!

Co myslite, je Paul Graham ve skutecnosti Chuck Norris? Co na to Jan Tleskac?
Název: Re: Na co všechno je dobrý LISP?
Přispěvatel: Jan Beno 19. 10. 2011, 19:50:43
našel sem pěkné textury pro gimp tak si to koukněte http://print24.com/blog/2011/08/50-inspiring-high-quality-textures/
Název: Re:Na co všechno je dobrý LISP?
Přispěvatel: PH 12. 07. 2015, 11:27:20
Nedávno jsem si trochu hrál s programovacím jazykem LISP. Docela mě překvapilo, jak je jednoduchý a přitom univerzální.

Rád bych se tady zeptal, na co všechno se LISP používá, případně na co všechno by se dal použít?

Z teoretického pohledu má Lisp výsadní postavení, neboť je něčím jakou limitou, jinými slovy "všechny jazyky k němu konvergují" (už nevím, kdo to řekl, a je to samozřejmě nadsázka, ale empiricky je vidět, jak se k němu mnohé jazyky koncepčně přibližují).