Na co všechno je dobrý LISP?

nm - novomente

Na co všechno je dobrý LISP?
« kdy: 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?


Vin

Re: Na co všechno je dobrý LISP?
« Odpověď #1 kdy: 26. 03. 2011, 09:38:18 »
Slyšel jsem, že v CADech, taky se používá v rozšířeních pro gimp a emacs.

Re: Na co všechno je dobrý LISP?
« Odpověď #2 kdy: 26. 03. 2011, 10:14:08 »

JS

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

nm - novomente

Re: Na co všechno je dobrý LISP?
« Odpověď #4 kdy: 26. 03. 2011, 10:38:56 »
JJ, pohraval jsem si s Common Lisp. Ale zrovna tak jako jeho vyuziti me zajima vyuziti Scheme apod.


Inkvizitor

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

Kit

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

nm - novomente

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

JS

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

pavel

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

anonym

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

broukoid

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

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

Inkvizitor

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

Kit

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