Închis . Această întrebare este
bazată pe opinie . În prezent, nu acceptă răspunsuri.
Comentarii
Răspuns
Vă sugerez să învățați amândouă, mai întâi Haskell, apoi Common Lisp. Experiența mea cu Haskell a fost că tastarea statică părea să fie o supărare restrictivă la început, dar odată ce m-am obișnuit, am observat că majoritatea erorilor mele de tip aveau erori logice ascunse în spatele lor. Când ajungeți la acest punct și la următoarea etapă, care este să învățați să gândiți în tipuri și să vă definiți propriile tipuri ca mijloc de exprimare a soluției dvs., veți fi gata pentru Common Lisp.
Cu Common Lisp, poți adăuga monade, curri și tot ce ți-a plăcut de la Haskell, dar primești și moștenire multiplă, cum a menționat Frank Shearar, și funcții generice cu expediere multiplă și un sistem avansat de gestionare a excepțiilor.
Deci, de ce Nu doar să învăț mai întâi Common Lisp? Provenind dintr-un context procedural și OOP, experiența mea a fost că nu am înțeles cu adevărat programarea funcțională până când nu a trebuit să o folosesc exclusiv. Odată ce programarea funcțională este confortabilă, puteți adăuga restul instrumentelor pe care Common Lisp le pune la dispoziție și puteți utiliza orice instrument este cel mai bun la sarcina de față.
Comentarii
Răspundeți
ȘI vă rog.
Haskell vă învață cel mai pur din FP, din câte știu cel puțin, la fel cum Smalltalk învață cel mai pur din OO (menționez acest lucru nu pentru a sugera că OO și FP nu se pot căsători, ci pentru că ambele aceste limbi sunt limbaje „prețioase” – un ideea de bază dusă la extrem.)
Lisp este într-adevăr o familie de limbi, așa că voi vorbi despre Common Lisp pentru că acesta este membrul particular al familiei pe care o folosesc.
Lisp va mai avea multe de învățat:
- Este multiparadigmă, așa cum dsimcha subliniază vă va arăta cum să integrezi FP cu alte paradigme.
- Lisp te va învăța că „codul-este-date, datele-este-codul”, de exemplu prin intermediul macro-urilor sale.
- CLOS este un marcă foarte interesantă de OO, cu moștenire multiplă care funcționează și funcții generice.
Răspuns
Haskell și Lisp sunt două fiare total diferite.
Haskell este un fel de „programare funcțională pură într-un turn de fildeș”
Lisp este un fel de „cod-este-date / date-este-cod / creează-ți propriile construcții de limbaj”. Vă puteți manipula codul în orice mod vă puteți imagina.
Sunt foarte diferite. Ambele împărtășesc aspectul „programare funcțională”, dar acesta este într-adevăr un mic punct comun în comparație cu diferențele lor. Încercați-le și veți vedea cât de diferite sunt!
Comentarii
Răspuns
Learning Lisp ulterior vă va permite să personalizați Emacs, care este, fără îndoială, cel mai avansat editor de text disponibil. Nu puteți face acest lucru în Haskell.
Comentarii
Răspuns
Principalul beneficiu pe care îl văd în urma învățării Lisp este să învăț cum să integrez FP într-un real -limbaj multiparadigm orientat spre lume, mai degrabă decât să-l înveți doar în contextul unui limbaj academic care pune accentul pe puritate.
Comentarii
Răspuns
De asemenea, provin dintr-un fundal C / C ++ / Python și am încercat FP de câteva ori în ultimii ani. Inițial m-am uitat la Haskell și nu am putut face capul sau coada, apoi am încercat Ocaml, dar nu am ajuns mult mai departe cu asta. În cele din urmă, am început să aud lucruri bune despre Scala, am încercat-o și mi s-a părut că mi se potrivește foarte bine (făcusem și un pic de Java în trecut), până la punctul că, după un an de atât de mult în Scala (și expedierea 161 Proiectul Euler are probleme cu el), Haskell pare să aibă mult mai mult sens. De fapt, tocmai am comandat câteva cărți despre Haskell și vreau să-i dau o nouă încercare, deși acest lucru este în mare parte motivat de existența Scalaz.
Așa că am găsit folosind un limbaj multi-paradigmă (adică Scala, dar Lisp s-ar potrivi probabil și cu factura) o modalitate bună în FP. Dar dacă vă bucurați să vă scufundați în Haskell (nu eram), mergeți la asta.
Comentarii
Răspuns
Am venit inițial dintr-un fundal C / C ++ / Ruby și am folosit concepte FP în Ruby ori de câte ori am putut. Statul doar mi-a rănit creierul. Unul dintre prietenii mei m-a sunat într-o zi și mi-a cerut să scriu ceva în Haskell (primul meu – și, sperăm, nu ultimul – job Haskell!). Am învățat rapid limba și am aruncat împreună ceva care a funcționat. Nu era frumos sau ceva, dar a funcționat.
Am luat o pauză de o lună de la Haskell pentru că nu aveam pentru ce să-l folosesc. Dar când am decis că trebuie să scriu propriul meu software de blog, am folosit Haskell ( https://symer.io ). Haskell este foarte grozav, deoarece puteți împărți o problemă în părți și puteți implementa aceste părți diferit pe baza intrării. De asemenea, Haskell gestionează eșecul extrem de bine prin boxul inteligent al valorilor. Există atât de multe instrumente pentru a lucra cu aceste casete, încât pur și simplu uitați că există.
Experiența mea cu lisp (Scheme) a fost complet negativă. Nu numai că limbajului îi lipseau aceste instrumente inteligente și simple, ci se simțea la fel de periculos de liber ca Ruby sau JavaScript. A fost o experiență oribilă și nu oferă nimic nou dincolo de Ruby sau Python.
C ++ nu poate ține o lumânare lui Haskell, în afara gestionării memoriei. Haskell este la fel de rapid (dacă nu chiar mai rapid), semnificativ mai concis și mult mai sigur. Dar siguranța lui Haskell nu intră niciodată în la fel.
TL; TR Haskell este o gură de aer proaspăt, iar Lisp este un Rubin puțin mai funcțional.