it-swarm-eu.dev

Haskell A LISP vs. Haskell OR Lisp

V současné době kóduji C, C++ a Python. Chci si vybrat funkční programovací jazyk a právě teď se nakláním k Haskellu. Nechci zde zahájit válku „Haskell vs LISP“; to, co chci vědět, je toto: Pokud se naučím Haskell primárně pro vystavení funkčnímu programování, jaké výhody, pokud nějaké, získám z pozdějšího učení Lisp?

41
Zeke

Navrhuji uč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í nepříjemnost, ale jakmile jsem si na to zvykl, všiml jsem si, že většina mých typových chyb se za nimi skrývala za logické chyby. Až se dostanete k tomuto bodu a dalšímu milníku, který se učí přemýšlet v typech a definovat své vlastní typy jako prostředek vyjádření svého řešení, budete připraveni na Common LISP.

S Common LISP můžete přidávat monády, kari a vše, co se vám na Haskellovi líbilo, ale také dostanete vícenásobné dědictví, 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č se nejen učit Common LISP jako první? Pocházím z procedurálního a OOP pozadí) mé zkušenosti bylo, ž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ástroje, které Common LISP zpřístupňuje, a používat jakýkoli nástroj, který je nejlepší v daném úkolu.

58
Larry Coleman

A prosím.

Haskell vás učí nejčistší FP, pokud vím alespoň, stejně jako Smalltalk učí nejčistší OO. (Zmíním se o tom, že nenavrhuji, že OO a FP se nemohou oženit), ale protože oba tyto jazyky jsou jazyky „drahokamů“ - základní myšlenka extrémy.)

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 multiparadigm, takže jak dsimcha upozorňuje , ukáže vám, jak integrovat FP s jinými paradigmy).
  • 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 mnoha dědičnými funkcemi a obecnými funkcemi.
31
Frank Shearar

Haskell a LISP jsou dvě úplně odlišná zvířata.

Haskell je druh „čistě funkčního programování ve věži ze slonoviny“

LISP je druh „code-is-data/data-is-code/vytvořte si vlastní jazykové konstrukce“. S kódem můžete manipulovat jakýmkoli způsobem, jaký si dokážete představit.

Jsou velmi odlišné. Oba sdílejí aspekt „funkčního programování“, ale ve srovnání s jejich rozdíly je to vlastně malý malý společný bod. Jen je vyzkoušejte a uvidíte, jak se liší!

11
dagnelies

Poznání LISP později vám umožní přizpůsobit Emacs, což je pravděpodobně nejpokročilejší textový editor, který je k dispozici. V Haskellu to nemůžete udělat.

11
user1249

Hlavním přínosem, který vidím při učení LISP, je naučit se, jak integrovat FP) do vícejazyčného jazyka orientovaného na skutečný svět, než aby se učil pouze v kontextu akademického jazyka, který zdůrazňuje čistotu.

7
dsimcha

Pocházím také 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 něj udělat hlavu ani ocas , zkusil jsem Ocaml, ale nedostal jsem se s tím příliš daleko. Nakonec jsem začal slyšet o Scale dobré věci, zkusil to a zjistil, že mi to vyhovuje (také jsem udělal trochu Java) = v minulosti), do té míry, že po roce takového fušování v Scala (a odeslání 161 problémů s Project Euler) se zdá, Haskell dává mnohem větší smysl. jen nařídil pár knih o Haskellovi a chtěl by to dát ještě jednou, i když je to do velké míry motivováno existencí Scalaz.

Takže jsem našel pomocí multi-paradigmatického jazyka (tj. Scaly, ale LISP by asi také zapadl do účtu) dobrou cestu do FP. Ale pokud jste rádi, že se potápíte do Haskell (já nebyl), jděte na to.

5
timday

Původně jsem přišel z C/C++/Ruby pozadí a používal jsem FP pojmy v Ruby, kdykoli jsem mohl. Stát jen trochu bolí můj mozek. Jeden z mých kamarádů mě jednoho dne zavolal a on mě požádal, abych napsal něco v Haskell (moje první - a snad ne poslední - Haskell práce!). Rychle jsem se naučil jazyk a spojil jsem něco, co fungovalo. Nebylo to krásné nebo tak něco, ale fungovalo to.

Vzal jsem si měsíční pauzu od Haskella, protože jsem neměl nic, na co bych to použil. Když jsem se ale rozhodl napsat vlastní blogový software, použil jsem Haskell ( https://symer.io ). Haskell je opravdu super, protože můžete rozdělit problém na části a implementovat tyto části odlišně na základě vstupu. Haskell také řeší selhání velmi dobře pomocí inteligentního boxu hodnot. Existuje tolik nástrojů pro práci s těmito boxy, že jednoduše zapomenete, že existují.

Moje zkušenost s LISP (Scheme) byla zcela negativní. Nejen, že jazyk postrádal tyto inteligentní, jednoduché nástroje, ale cítil se stejně nebezpečně uvolněný jako Ruby nebo JavaScript. Byl to hrozný zážitek a nenabízí nic nového kromě Ruby nebo Python.

C++ nemůže držet svíčku pro Haskell, mimo správu paměti. Haskell je stejně rychlý (ne-li rychlejší), podstatně pevnější a mnohem bezpečnější. Haskellova bezpečnost se však nikdy nedostane do cesty.

TL; TR Haskell je dech čerstvého vzduchu a LISP je o něco více funkční Ruby.

2
Nate Symer