Stengt . Dette spørsmålet er meningsbasert . Det aksepteres for øyeblikket ikke svar.

Kommentarer

  • Og F # og Clojure.

Svar

Jeg foreslår at du lærer begge deler, Haskell først, deretter Common Lisp. Min erfaring med Haskell var at den statiske skrivingen først syntes å være et begrensende irritasjonsmoment, men når jeg først ble vant til det, la jeg merke til at de fleste av typefeilene mine hadde logiske feil som skjulte seg bak seg. Når du kommer til dette punktet, og neste milepæl, som er å lære å tenke i typer og definere dine egne typer som et middel for å uttrykke løsningen din, vil du være klar for Common Lisp.

Med Common Lisp, du kan legge til monader, karri og alt du likte fra Haskell, men du får også flere arv som Frank Shearar nevnte, og generiske funksjoner med flere forsendelser, og et avansert unntakshåndteringssystem.

Så hvorfor ikke bare lære Common Lisp først? Kommer fra en prosessuell og OOP bakgrunn, har min erfaring vært at jeg ikke virkelig forsto funksjonell programmering før jeg måtte bruke den utelukkende. Når funksjonell programmering er behagelig, kan du legge til resten av verktøyene som Common Lisp stiller til rådighet, og bruke det verktøyet som er best for den aktuelle oppgaven.

Kommentarer

  • Jeg tror du spikret det – det som gjør Haskell og Smalltalk så nyttige for læring er deres renhet.
  • I enig med renheten gjør det lettere å lære et språk. Jeg kunne ikke ' ikke forstå det funksjonelle språket i seg selv med LISP fordi alt er mulig på språket og jeg har for mye imperativ, OO-bakgrunn. Men i Haskell er det ingen slike begreper som forstyrrer læring.
  • Det ' er morsomt, jeg ' har hadde motsatt opplevelse. Jeg plukket opp hovedpoengene med funksjonell programmering gjennom Scheme, mitt første språk. Jeg hakker av og til i Haskell, og jeg finner uunngåelig at jeg må lære 90% + av tingene jeg kjente når jeg forlater Haskell en stund. Når det er sagt, er Haskell et utrolig rikt språk, med en enorm mengde å lære deg (veldig med makt.) Typer Typer Typer Typer! Følg typene!

Svar

OG vær så snill.

Haskell lærer deg det reneste av FP, så vidt jeg vet i det minste, akkurat som Smalltalk lærer det reneste av OO. (Jeg nevner dette for ikke å antyde at OO og FP ikke kan gifte seg, men fordi begge disse språkene er «perle» -språk – et kjerneideen tatt til ekstremer.)

Lisp er egentlig en familie av språk, så jeg snakker om Common Lisp fordi det er det spesielle medlemmet av familien jeg bruker.

Lisp vil fortsatt ha mye å lære deg:

  • Det er multiparadigm, slik at dsimcha påpeker det «vil vise deg hvordan integrere FP med andre paradigmer.
  • Lisp vil lære deg at «code-is-data, data-is-code», for eksempel gjennom makroene.
  • CLOS er en veldig interessant merke av OO, med flere arv som fungerer, og generiske funksjoner.

Svar

Haskell og Lisp er to helt forskjellige dyr.

Haskell er en slags «ren funksjonell programmering i et elfenbenstårn»

Lisp er en slags «kode-er-data / data-er-kode / lag dine egne språkkonstruksjoner». Du kan manipulere koden din på en hvilken som helst måte du kan forestille deg.

De er veldig forskjellige. Begge deler det «funksjonelle programmerings» -aspektet, men det er egentlig et lite lite vanlig poeng i forhold til forskjellene deres. Bare prøv dem, så ser du hvor forskjellige de er!

Kommentarer

  • +1: Bra poeng. Jeg kjenner noen Haskell og noen Lisp. Selv om jeg ikke er ekspert på noen av dem, tror jeg du har rett i at de er veldig forskjellige. I Haskell du har ikke ideen om å bruke data som kode. I Lisp har du ikke (AFAIK) mønstermatching. Sannsynligvis er listen (!) over forskjeller lengre.

Svar

Læring Lisp senere vil tillate deg å tilpasse Emacs som uten tvil er den mest avanserte tekstredigereren tilgjengelig. Du kan ikke gjøre det i Haskell.

Kommentarer

  • [Sliper parentesene hans]
  • Kanskje noen kan skrive en tekstredigerer for det. Jeg hører at Emacs-operativsystemet ikke ' ikke kommer med en. (Jeg barn. Jeg vet at du kan få Viper-modus. 🙂
  • Det er faktisk en Emacs-klon som heter Yi, som bruker Haskell på nøyaktig samme måte som Emacs bruker Lisp.Faktisk, sammenlignet med (GNU) Emacs, er Yi enda renere, fordi kjernen også er skrevet i Haskell, mens Emacs-kjerner vanligvis ikke pleier å bli skrevet i Lisp. GNU Emacs ' kjernen er skrevet i C, JEmacs ' er for eksempel skrevet i Java.
  • @J ö rg, hvis det er en delvis reimplementering i stedet for en full klon av GNU Emacs eller XEmacs, er det ikke det samme. Ligner på å sammenligne Word med Wordpad eller Notisblokk.
  • @Thorbj ø rn Ravn Andersen: Ja, men ikke helt det dårlig. 🙂

Svar

Den største fordelen jeg ser av å lære Lisp er å lære å integrere FP i en reell -verden orientert flerspråklig språk, i stedet for bare å lære det i sammenheng med et akademisk språk som understreker renhet.

Kommentarer

  • Jeg antar at du vil ha en " Haskell vs Lisp " krig!
  • Haskell er et akademisk språk som understreker renhet … og mange mennesker bruker den i den virkelige verden. Smalltalk ' også i den leiren.
  • Mange bruker Haskell i den virkelige verden?
  • @Jon Harrop: Vel, jeg bruker Haskell i den virkelige verden (og det fungerer veldig bra for visse applikasjoner), kanskje jeg er en av få (?)

Svar

Jeg kommer også fra C / C ++ / Python-bakgrunn og har prøvd ut FP et par ganger de siste årene. Opprinnelig så jeg på Haskell og kunne ikke lage hodet eller halen av det, så prøvde jeg Ocaml men kom ikke mye lenger med det. Til slutt begynte jeg å høre gode ting om Scala, prøvde det og fant ut at det passet meg veldig bra (jeg hadde også gjort litt Java tidligere), til det punktet at etter et år med så mye å dabbe i Scala (og sende 161 Prosjekt Euler problemer med det), synes Haskell å gi mye mer mening. Faktisk har jeg nettopp bestilt et par bøker på Haskell og vil gi den en ny sjanse, selv om dette i stor grad er motivert av eksistensen av Scalaz.

Så jeg fant bruk av et multiparadigmaspråk (dvs. Scala, men Lisp ville nok også passet regningen) en god vei inn i FP. Men hvis du er glad for å dykke inn i Haskell (jeg visste ikke det), gå for det.

Kommentarer

  • Interessant at du kom lenger med Scala enn OCaml. Hvordan kommer det?
  • @Jon: Godt spørsmål; vanskelig å si. Kanskje jeg bare ikke var ' t klar til å " komme inn i " funksjonell på den tiden. Kanskje jeg tilfeldigvis fant en Scala-opplæring på riktig nivå. Kanskje Scala ' s C / C ++ / Java-avstamning bare gjorde det litt mindre fremmed. Gitt at et rasjonelt spill i disse dager ville være på F # i stedet for Scala, vil jeg ' sannsynligvis se på OCaml-domenet på et tidspunkt, selv om siden jeg dabber med dette bare for den glede når jeg kommer inn i en annen " programmeringstankegang " til min C ++ dayjob, har jeg en pervers tilbøyelighet til å prøve Haskell igjen neste gang.
  • Jevn bevegelsesmessig tilnærming 🙂

Svar

Jeg kom opprinnelig fra en C / C ++ / Ruby bakgrunn og jeg brukte FP-konsepter i Ruby når jeg kunne. Staten såret bare hjernen min. En av kompisene mine ringte meg opp en dag, og han ba meg skrive noe i Haskell (min første – og forhåpentligvis ikke siste – Haskell-jobb!). Jeg lærte raskt språket og kastet sammen noe som fungerte. Det var ikke vakkert eller noe, men det fungerte.

Jeg tok en måneds pause fra Haskell fordi jeg ikke hadde noe å bruke det til. Men da jeg bestemte meg for at jeg måtte skrive min egen bloggprogramvare, brukte jeg Haskell ( https://symer.io ). Haskell er veldig kult fordi du kan dele et problem inn i deler og implementere disse delene forskjellig basert på input. Haskell håndterer også svikt ekstremt godt gjennom intelligent boksing av verdier. Det er så mange verktøy å jobbe med disse boksene at du bare glemmer at de eksisterer.

Min erfaring med lisp (Scheme) var helt negativ. Ikke bare manglet språket disse intelligente, enkle verktøyene, det føltes like farlig løs som Ruby eller JavaScript. Det var en fryktelig opplevelse, og den tilbyr ikke noe nytt utover Ruby eller Python.

C ++ kan ikke holde et lys mot Haskell utenfor minnestyring. Haskell er like rask (om ikke raskere), betydelig mer kortfattet og mye mer trygg. Men Haskells sikkerhet kommer aldri inn veien.

TL; TR Haskell er et friskt pust, og Lisp er en litt mer funksjonell Ruby.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *