Kommentarer
- Och F # och Clojure.
Svar
Jag föreslår att du lär dig båda, Haskell först, sedan Common Lisp. Min erfarenhet av Haskell var att den statiska skrivningen verkade vara en begränsande irritation i början, men när jag väl hade vant mig märkte jag att de flesta av mina typfel hade logiska fel som gömde sig bakom dem. När du kommer till den här punkten och nästa milstolpe, som är att lära sig att tänka i typer och definiera dina egna typer som ett sätt att uttrycka din lösning, är du redo för Common Lisp.
Med Common Lisp, du kan lägga till monader, curry och allt du gillade från Haskell, men du får också flera arv som Frank Shearar nämnde och generiska funktioner med flera leveranser och ett avancerat system för undantagshantering.
Så varför inte bara lära mig Common Lisp först? Kommer från en procedurell och OOP-bakgrund har min erfarenhet varit att jag inte riktigt förstod funktionell programmering förrän jag var tvungen att använda den exklusivt. När funktionell programmering är bekväm kan du lägga till resten av verktygen som Common Lisp tillhandahåller och använda vilket verktyg som helst som är bäst för den uppgift som finns.
Kommentarer
- Jag tror att du spikade det – det som gör Haskell och Smalltalk så användbara för att lära sig är deras renhet.
- I håller med renheten gör det lättare att lära sig ett språk. Jag kunde inte ' inte förstå funktionellt språk med LISP eftersom allt är möjligt på språket och jag har för mycket tvingande, OO-bakgrund. Men i Haskell finns det inga sådana begrepp som stör lärandet.
- Det ' är roligt, jag ' har hade motsatt upplevelse. Jag plockade upp huvudpunkterna för funktionell programmering genom Scheme, mitt första språk. Jag hackar ibland in Haskell och upptäcker oundvikligen att jag måste lära mig 90% + av de saker som jag visste när jag lämnar Haskell ett tag. Med detta sagt är Haskell ett oerhört rikt språk, med en enorm mängd att lära dig (mycket våldsamt.) Typer Typer Typer Typer! Följ typerna!
Svar
OCH tack.
Haskell lär dig det renaste av FP, så vitt jag vet åtminstone, precis som Smalltalk lär ut det renaste av OO. (Jag nämner detta för att inte föreslå att OO och FP inte kan gifta sig, utan för att båda dessa språk är ”gem” -språk – ett kärnidéen tagit till ytterligheter.)
Lisp är verkligen en familj av språk, så jag kommer att prata om Common Lisp eftersom det är den speciella familjemedlem jag använder.
Lisp kommer fortfarande att ha mycket att lära dig:
- Det är multiparadigm, så som dsimcha påpekar det ”visar dig hur man integrerar FP med andra paradigmer.
- Lisp lär dig att ”kod-är-data, data-är-kod”, till exempel genom dess makron.
- CLOS är en mycket intressant OO-märke, med flera arv som fungerar, och generiska funktioner.
Svar
Haskell och Lisp är två helt olika djur.
Haskell är typ av ”ren funktionell programmering i ett elfenbenstorn”
Lisp är typ av ”kod-är-data / data-är-kod / gör dina egna språkkonstruktioner”. Du kan manipulera din kod på vilket sätt du än kan föreställa dig.
De är väldigt olika. Båda delar aspekten ”funktionell programmering”, men det är verkligen en liten liten vanlig punkt jämfört med deras skillnader. Testa bara dem så får du se hur olika de är!
Kommentarer
- +1: Bra poäng. Jag känner en del Haskell och lite Lisp. Även om jag inte är expert på någon av dem, tror jag att du har rätt i att de är väldigt olika. I Haskell du har inte tanken att använda data som kod. I Lisp har du inte (AFAIK) mönstermatchning. Antagligen är listan (!) över skillnader längre.
Svar
Att lära sig Lisp senare gör att du kan anpassa Emacs som förmodligen är den mest avancerade textredigeraren tillgänglig. Du kan inte göra det i Haskell.
Kommentarer
- [Skärpar sina parenteser]
- Kanske kan någon skriva en textredigerare för det. Jag hör att Emacs operativsystem inte ' inte kommer med ett. (Jag barn. Jag vet att du kan få Viper-läge. 🙂
- Det finns faktiskt en Emacs-klon som heter Yi, som använder Haskell på exakt samma sätt som Emacs använder Lisp.I själva verket jämfört med (GNU) Emacs är Yi ännu renare, eftersom dess kärna också är skriven i Haskell, medan Emacs-kärnor vanligtvis inte skrivs i Lisp. GNU Emacs ' kärnan är skriven i C, JEmacs ' skrivs till exempel i Java.
- @J ö rg, om det är en partiell reimplementering istället för en fullständig klon av GNU Emacs eller XEmacs, är det inte samma sak. Liknar att jämföra Word med Wordpad eller Notepad.
- @Thorbj ø rn Ravn Andersen: Ja, men inte riktigt det dåligt. 🙂
Svar
Den största fördelen jag ser av att lära mig Lisp är att lära sig att integrera FP i en verklig -världsorienterat multiparadigmspråk, snarare än att bara lära sig det i ett akademiskt språk som betonar renhet.
Kommentarer
- Jag antar att du vill a " Haskell vs Lisp " krig!
- Haskell är ett akademiskt språk som betonar renhet … och många människor använder den i den verkliga världen. Smalltalk ' också i det lägret.
- Många människor använder Haskell i den verkliga världen?
- @Jon Harrop: Tja, jag använder Haskell i den verkliga världen (och det fungerar riktigt bra för vissa applikationer), kanske är jag en av få (?)
Svar
Jag kommer också från en C / C ++ / Python-bakgrund och har provat FP ett par gånger de senaste åren. Inledningsvis tittade jag på Haskell och kunde inte göra huvudet eller svansen av det, försökte sedan Ocaml men kom inte mycket längre med det. Slutligen började jag höra bra saker om Scala, prövade det och tyckte att det passade mig mycket bra (jag hade också gjort lite Java tidigare), till den punkten att jag efter ett år av att dabla i Scala (och skicka 161 Project Euler problem med det), Haskell verkar ge mycket mer mening. I själva verket beställde jag bara ett par böcker om Haskell och vill ge det ännu en gång, även om detta till stor del motiveras av existensen av Scalaz.
Så jag hittade ett multiparadigmspråk (dvs. Scala, men Lisp skulle antagligen passa räkningen också) ett bra sätt in i FP. Men om du gärna dyker in i Haskell (jag visste inte), gå efter det.
Kommentarer
- Intressant att du kom längre med Scala än OCaml. Hur kommer det sig?
- @Jon: Bra fråga; svårt att säga. Jag kanske bara inte var ' inte redo att " började gå in i ". Kanske hittade jag precis en Scala-handledning på rätt nivå. Kanske gjorde Scala ' s C / C ++ / Java-släkt det bara lite mindre främmande. Med tanke på att någon rationell satsning idag skulle vara på F # snarare än Scala, kommer jag ' troligen att besöka OCaml-domänen någon gång, även om eftersom jag prickar i det här bara för den glada när jag går in i en annan " programmeringstänkning " till mitt C ++ -jobb, har jag en pervers benägenhet att försöka igen Haskell igen.
- Smidig rörlig strategi 🙂
Svar
Jag kom ursprungligen från en C / C ++ / Ruby bakgrund och jag använde FP-koncept i Ruby när jag kunde. Staten skadade bara min hjärna. En av mina kompisar ringde upp mig en dag och han bad mig skriva något i Haskell (mitt första – och förhoppningsvis inte sista – Haskell-jobb!). Jag lärde mig snabbt språket och kastade ihop något som fungerade. Det var inte vackert eller något, men det fungerade.
Jag tog en månads paus från Haskell eftersom jag inte hade något att använda det till. Men när jag bestämde mig för att jag skulle behöva skriva min egen bloggprogramvara använde jag Haskell ( https://symer.io ). Haskell är väldigt cool eftersom du kan dela upp ett problem i delar och implementera dessa delar olika baserat på input. Haskell hanterar också misslyckanden extremt bra genom intelligent boxning av värden. Det finns så många verktyg att arbeta med dessa rutor att du helt enkelt glömmer att de finns.
Min erfarenhet av lisp (Scheme) var helt negativ. Inte bara saknade språket dessa intelligenta, enkla verktyg, det kändes lika farligt löst som Ruby eller JavaScript. Det var en hemsk upplevelse och den erbjuder inget nytt utöver Ruby eller Python.
C ++ kan inte hålla ett ljus mot Haskell, utanför minneshantering. Haskell är lika snabb (om inte snabbare), betydligt mer kortfattad och mycket mer säker. Men Haskells säkerhet kommer aldrig in vägen.
TL; TR Haskell är ett friskt andetag, och Lisp är en lite mer funktionell Ruby.