Na co všechno je dobrý LISP?

Re: Na co všechno je dobrý LISP?
« Odpověď #180 kdy: 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?

:)


Inkvizitor

Re: Na co všechno je dobrý LISP?
« Odpověď #181 kdy: 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.

Re: Na co všechno je dobrý LISP?
« Odpověď #182 kdy: 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 :)

Re: Na co všechno je dobrý LISP?
« Odpověď #183 kdy: 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?

nm - novomente

Re: Na co všechno je dobrý LISP?
« Odpověď #184 kdy: 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.


Re: Na co všechno je dobrý LISP?
« Odpověď #185 kdy: 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í.

Re: Na co všechno je dobrý LISP?
« Odpověď #186 kdy: 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 :)

JS

Re: Na co všechno je dobrý LISP?
« Odpověď #187 kdy: 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.

JS

Re: Na co všechno je dobrý LISP?
« Odpověď #188 kdy: 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.

Re: Na co všechno je dobrý LISP?
« Odpověď #189 kdy: 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é.

JS

Re: Na co všechno je dobrý LISP?
« Odpověď #190 kdy: 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.

JS

Re: Na co všechno je dobrý LISP?
« Odpověď #191 kdy: 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.

Re: Na co všechno je dobrý LISP?
« Odpověď #192 kdy: 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

deda.jabko

Re: Na co všechno je dobrý LISP?
« Odpověď #193 kdy: 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

koroptev

Re: Na co všechno je dobrý LISP?
« Odpověď #194 kdy: 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