Odpověď
Navrhuji naučit se oba, nejprve Haskell, pak Common Lisp. Moje zkušenost s Haskellem spočívala v tom, že statické psaní se zpočátku zdálo jako omezující mrzutost, ale jakmile jsem si na to zvykl, všiml jsem si, že většina mých typů chyb měla schované logické chyby. Když se dostanete do tohoto bodu a dalšího milníku, kterým je naučit se myslet v typech a definovat své vlastní typy jako prostředek k vyjádření svého řešení, budete připraveni na Common Lisp.
S Common Lispe, od Haskella můžete přidat monády, kari a všechno, co se vám líbilo, ale také získáte několik dědičností, jako je zmínil Frank Shearar, a obecné funkce s vícenásobným odesláním a pokročilý systém zpracování výjimek.
Tak proč nejen se nejprve naučit Common Lisp? Pocházející z procedurálního a OOP pozadí, má zkušenost byla, že jsem opravdu nerozuměl funkčnímu programování, dokud jsem ho nemusel používat výhradně. Jakmile je funkční programování pohodlné, můžete přidat zbytek nástrojů, které Common Lisp zpřístupňuje, a použít jakýkoli nástroj, který je pro danou úlohu nejlepší.
Komentáře
- Myslím, že jste to přibil – to, co dělá Haskell a Smalltalk tak užitečné pro učení, je jejich čistota.
- I souhlasím s čistotou , díky které je učení jazyka mnohem jednodušší. Nemohl jsem ' nerozumět samotnému funkčnímu jazyku s LISP, protože v jazyce je všechno možné a já mám příliš imperativní OO pozadí. Ale v Haskellu neexistují žádné takové koncepty, které by narušovaly učení.
- Je to ' vtipné, ' ve měl opačný zážitek. Hlavní body funkčního programování jsem zachytil prostřednictvím Scheme, mého prvního jazyka. Příležitostně hackuji Haskell a nevyhnutelně zjišťuji, že se musím znovu naučit 90% + věcí, které jsem znal, kdykoli na chvíli opustím Haskell. Jak již bylo řečeno, Haskell je neuvěřitelně bohatý jazyk, s obrovským množstvím, které vás naučí (velmi násilně). Typy Typy Typy Typy! Postupujte podle typů!
Odpovědět
A prosím.
Haskell vás naučí nejčistšímu FP, pokud vím alespoň, stejně jako Smalltalk učí nejčistší OO. (Zmíním to, abych nenaznačoval, že OO a FP se nemohou „oženit, ale proto, že oba tyto jazyky jsou„ drahokamové “jazyky – a základní myšlenka přijatá do extrému.)
Lisp je opravdu rodina jazyků, takže budu mluvit o Common Lisp, protože to je konkrétní člen rodiny, kterou používám.
Lisp vás bude mít stále co učit:
- Je to multiparadigma, takže dsimcha vás upozorní , ukáže vám jak integrovat FP s jinými paradigmaty.
- Lisp vás naučí, že „code-is-data, data-is-code“, například prostřednictvím svých maker.
- CLOS je velmi zajímavá značka OO s několika funkcemi dědičnosti a obecnými funkcemi.
Odpověď
Haskell a Lisp jsou dvě naprosto odlišná zvířata.
Haskell je druh „čistě funkčního programování ve slonovinové věži“
Lisp je druh „code-is-data / data-is-code / make your own language constructs“. S kódem můžete manipulovat, jak si dokážete představit.
Liší se velmi odlišně. Oba sdílejí aspekt „funkčního programování“, ale to je ve srovnání s jejich rozdíly opravdu malý společný bod. Vyzkoušejte je a uvidíte, jak se liší!
Komentáře
- +1: Dobrá poznámka. Znám někoho Haskella a jiného Lispa. I když nejsem odborníkem ani na jeden z nich, myslím, že máte pravdu, že se velmi liší. V Haskellu nemáte myšlenku používat data jako kód. V Lispu nemáte (AFAIK) porovnávání vzorů. Pravděpodobně je seznam (!) rozdílů delší.
Odpověď
Naučit se později Lisp vám umožní přizpůsobit Emacs, což je pravděpodobně nejpokročilejší dostupný textový editor. To v Haskellu dělat nemůžete.
Komentáře
- [Zostří jeho závorky]
- Možná k tomu někdo může napsat textový editor. Slyšel jsem, že operační systém Emacs s žádným ' nepřichází. (Chlapče. Vím, že můžete získat Viperův režim. 🙂
- Ve skutečnosti existuje Emacsův klon zvaný Yi, který používá Haskell přesně stejným způsobem jako Emacs Lisp.Ve skutečnosti je ve srovnání s (GNU) Emacs Yi ještě čistší, protože jeho jádro je také napsáno v Haskellu, zatímco jádra Emacsu obecně nemají tendenci být napsána v Lispu. GNU Emacs ' jádro je napsáno v jazyce C, JEmacs ' například v jazyce Java.
- @J ö rg, pokud se jedná o částečnou reimplementaci namísto úplného klonu GNU Emacs nebo XEmacs, není to totéž. Podobně jako při porovnávání Wordu s Wordpadem nebo Poznámkovým blokem.
- @Thorbj ø rn Ravn Andersen: Ano, ale ne tak špatně. 🙂
Odpověď
Hlavní výhodou, kterou Lisp vidím, je naučit se integrovat FP do reálného -světově orientovaný multiparadigmový jazyk, místo aby se ho učil pouze v kontextu akademického jazyka, který zdůrazňuje čistotu.
Komentáře
- Myslím, že chcete " Haskell vs Lisp " válka!
- Haskell je akademický jazyk, který zdůrazňuje čistotu … a mnoho lidí ji používá v reálném světě. Smalltalk ' i v tom táboře.
- Mnoho lidí používá Haskell ve skutečném světě?
- @Jon Harrop: No, já používáte Haskell v reálném světě (a pro určité aplikace to funguje opravdu dobře), možná jsem jedním z mála (?)
odpověď
Také pocházím z prostředí C / C ++ / Python a v posledních letech jsem několikrát vyzkoušel FP. Zpočátku jsem se podíval na Haskella a nemohl jsem z toho udělat hlavu nebo ocas, pak jsem zkusil Ocaml, ale s tím jsem se nedostal mnohem dále. Nakonec jsem začal o Scale slyšet dobré věci, zkusil jsem to a zjistil jsem, že mi to velmi dobře vyhovuje (v minulosti jsem také dělal trochu Javy), až do té míry, že po roce tak fušování do Scaly (a odeslání 161 Problémy s projektem Euler), zdá se, že Haskell dává mnohem větší smysl. Ve skutečnosti jsem si objednal pár knih o Haskellovi a chci to zkusit znovu, i když je to do značné míry motivováno existencí Scalaze.
Takže jsem našel použití jazyka s více paradigmy (tj. Scala, ale Lisp by se k účtu pravděpodobně taky hodil), dobrá cesta do FP. Ale pokud jste šťastní, že se potápíte do Haskellu (nebyl jsem), jděte do toho.
Komentáře
- Zajímavé, že jste se Scalou dostali dále než OCaml. Jak to, že?
- @Jon: Dobrá otázka; těžko říct. Možná jsem nebyl ' připraven na " dostat se do " funkčního v té době. Možná jsem náhodou našel tutoriál Scala na správné úrovni. Možná, že Scala ' s C / C ++ / Java linie mi to udělala trochu méně cizí. Vzhledem k tomu, že by v dnešní době byla nějaká racionální sázka spíše na F # než na Scalu, pravděpodobně se v určitém okamžiku znovu vrátím k doméně OCaml, i když od té chvíle fušuji jen pro naprostou radost z dostávám se do jiného " programovacího myšlení " ke svému C ++ dayjobu, mám zvrácenou náklonnost znovu zkusit Haskella znovu.
- Plynulý pohybový přístup 🙂
Odpověď
Původně jsem pocházel z pozadí C / C ++ / Ruby a použil jsem koncepty FP v Ruby, kdykoli jsem mohl. Stát jen trochu zranil můj mozek. Jeden z mých kamarádů mě jednoho dne zavolal a požádal mě, abych něco napsal do Haskellu (moje první – a doufejme, že ne poslední – Haskellova práce!). Rychle jsem se naučil jazyk a dal jsem dohromady něco, co fungovalo. Nebylo to nic krásného, ale fungovalo to.
Vzal jsem si od Haskella měsíční pauzu, protože jsem pro ni neměl co používat. Ale když jsem se rozhodl, že potřebuji napsat svůj vlastní blogový software, použil jsem Haskell ( https://symer.io ). Haskell je opravdu skvělý, protože můžete rozdělit problém na části a implementovat tyto části odlišně na základě vstupu. Haskell také zvládá selhání mimořádně dobře díky inteligentnímu spojování hodnot. Existuje tolik nástrojů pro práci s těmito krabicemi, že jednoduše zapomenete, že existují.
Moje zkušenost s lisp (Scheme) byla zcela negativní. Nejen, že jazyku chyběly tyto inteligentní, jednoduché nástroje, cítil se stejně nebezpečně uvolněný jako Ruby nebo JavaScript. Byl to hrozný zážitek a kromě Ruby nebo Pythona nenabízí nic nového.
C ++ nemůže „držet svíčku Haskellovi mimo správu paměti. Haskell je stejně rychlý (ne-li rychlejší), podstatně přísnější a mnohem bezpečnější. Haskellova bezpečnost se ale nikdy nedostane dovnitř mimochodem.
TL; TR Haskell je závan čerstvého vzduchu a Lisp je o něco funkčnější Ruby.