Kommentit
- Ja F # ja Clojure.
Vastaa
Ehdotan, että opit molemmat, ensin Haskell, sitten Common Lisp. Kokemukseni Haskellin kanssa oli, että staattinen kirjoittaminen näytti olevan aluksi rajoittava ärsytys, mutta kun tottuin siihen, huomasin, että useimmissa tyypin virheissäni oli piilossa takana logiikkavirheitä. Kun pääset tähän pisteeseen ja seuraavaan virstanpylvääseen, joka on oppia ajattelemaan tyyppejä ja määrittelemään omat tyypit keinona ilmaista ratkaisusi, olet valmis Common Lisp -ohjelmaan.
Yhteisen kanssa Lisp, voit lisätä monadeja, currya ja kaikkea mitä pidit Haskellista, mutta saat myös useita perintöominaisuuksia, kuten mainittiin Frank Shearar, sekä yleisiä toimintoja, joissa on useita lähetyksiä, ja edistyksellistä poikkeusten käsittelyjärjestelmää.
Joten miksi ei vain oppia ensin Common Lisp -ohjelmaa? Tulen menettelytapojen ja OOP: n taustasta, kokemukseni on ollut, että en oikein ymmärtänyt toiminnallista ohjelmointia, ennen kuin jouduin käyttämään sitä yksin. Kun toiminnallinen ohjelmointi on mukavaa, voit lisätä loput työkalut, jotka Common Lisp tarjoaa, ja käyttää mitä tahansa työkalua, joka parhaiten sopii tehtävään.
kommentit
- Luulen, että naulasit sen – mikä tekee Haskellista ja Smalltalkista niin hyödyllisiä oppimisessa, on niiden puhtaus.
- I hyväksy puhtaus helpottaa kielen oppimista. En voinut ' ymmärtää itse toiminnallista kieltä LISP: llä, koska kaikki on mahdollista kielellä ja minulla on liikaa välttämätöntä OO-taustaa. Mutta Haskellissa ei ole sellaisia käsitteitä, jotka häiritsevät oppimista.
- Se ' on hauskaa, minä ' ve oli päinvastainen kokemus. Esitin toiminnallisen ohjelmoinnin pääkohdat ensimmäisen kieleni Schemenin kautta. Satunnaisesti hakkeroin Haskellissa ja huomaan väistämättä, että minun on opittava uudelleen yli 90% tavaroista, jotka tiesin aina, kun jätän Haskellin hetkeksi. Tästä huolimatta Haskell on uskomattoman rikas kieli, jolla on valtava määrä opettaa sinulle (hyvin väkisin). Tyypit Tyypit Tyypit! Seuraa tyyppejä!
Vastaa
JA kiitos.
Haskell opettaa sinulle puhtaimman FP: stä, sikäli kuin olen ainakin tietoinen, aivan kuten Smalltalk opettaa puhtainta OO: ta. (Mainitsen tämän tarkoittamatta sitä, että OO ja FP eivät voi mennä naimisiin, vaan koska molemmat kielet ovat ”helmi” kieliä – ydinideo äärimmäisyyksiin viety.)
Lisp on todella kieliperhe, joten puhun Common Lispistä, koska se on käyttämäni perheenjäsen.
Lispillä on vielä paljon opetettavaa sinulle:
- Se on moniparha, joten kuten dsimcha huomauttaa se ”näyttää” kuinka integroida FP muihin paradigmoihin.
- Lisp opettaa sinulle, että ”koodi-on-data, data-on-koodi”, esimerkiksi sen makrojen kautta.
- CLOS on erittäin mielenkiintoinen OO-tuotemerkki, jossa on useita toimivia perintöominaisuuksia ja yleisiä toimintoja.
Vastaa
Haskell ja Lisp ovat kaksi täysin erilaista petoa.
Haskell on eräänlainen ”puhdas toiminnallinen ohjelmointi norsunluun tornissa”.
Lisp on eräänlainen ”code-is-data / data-is-code / tee oman kielesi rakenteita”. Voit manipuloida koodiasi millä tahansa tavalla kuin voit kuvitella.
Ne ovat hyvin erilaisia. Molemmilla on ”toiminnallinen ohjelmointi” -näkökulma, mutta se on todella pieni pieni yhteinen asia verrattuna heidän eroihinsa. Kokeile niitä ja näet kuinka erilaiset ne ovat!
Kommentit
- +1: Hyvä asia. Tunnen joitain Haskellia ja joitain Lispiä. Vaikka en ole kumpikaan asiantuntija, mielestäni olet oikeassa, että he ovat hyvin erilaisia. sinulla ei ole ajatusta tietojen käyttämisestä koodina. Lispissä sinulla ei ole (AFAIK) mallin vastaavuutta. Luultavasti erojen luettelo (!) on pidempi.
Vastaa
Lisp: n oppiminen myöhemmin antaa sinun mukauttaa Emacsia, joka on epäilemättä edistynein käytettävissä oleva tekstieditori. Et voi tehdä sitä Haskellissa.
Kommentit
- [Terävöittää sulkeet]
- Ehkä joku voi kirjoittaa siihen tekstieditorin. Kuulen, että Emacs-käyttöjärjestelmässä ei ole ' sitä. (Poika. Tiedän, että voit saada Viper-tilan. 🙂
- Itse asiassa on olemassa Emacs-klooni Yi, joka käyttää Haskellia täsmälleen samalla tavalla kuin Emacs käyttää Lispiä.Itse asiassa, verrattuna (GNU) Emacsiin, Yi on vielä puhtaampi, koska sen ydin on kirjoitettu myös Haskellissa, kun taas Emacsin ytimiä ei yleensä kirjoiteta Lisp: ssä. GNU Emacs ' -ydin kirjoitetaan C-muodossa, JEmacs ' kirjoitetaan esimerkiksi Javalla.
- @J ö rg, jos se on osittainen uudelleen käyttöönotto täydellisen GNU Emacs- tai XEmacs-kloonin sijaan, se ei ole sama asia. Samanlainen kuin Wordin vertaaminen Wordpadiin tai Muistioon.
- @Thorbj ø rn Ravn Andersen: Kyllä, mutta ei aivan se huono. 🙂
vastaus
Suurin hyöty, jonka näen oppimalla Lisp: n, on oppia integroimaan FP todelliseksi -maailman suuntautunut moniparhainen kieli sen sijaan, että oppisit sen vain puhtautta korostavan akateemisen kielen yhteydessä.
Kommentit
- Luulen, että haluat " Haskell vs Lisp " sota!
- Haskell on akateeminen kieli, joka korostaa puhtautta … ja monet ihmiset käyttävät sitä todellisessa maailmassa. Smalltalk ' s myös tuossa leirissä.
- Monet ihmiset käyttävät Haskellia tosielämässä?
- @Jon Harrop: No, minä käytä Haskellia tosielämässä (ja se toimii todella hyvin tietyissä sovelluksissa), ehkä olen yksi harvoista (?)
Vastaa
Olen myös kotoisin C / C ++ / Python -taustasta ja olen kokeillut FP: tä muutaman kerran viime vuosina. Aluksi katsoin Haskellia enkä voinut tehdä siitä päätä tai häntää, sitten kokeilin Ocamlia, mutta en päässyt siihen paljon pidemmälle. Lopulta aloin kuulla hyviä asioita Scalasta, kokeilin sitä ja huomasin, että se sopi minulle hyvin (olin aiemmin tehnyt myös vähän Java-ohjelmaa) siihen pisteeseen asti, että vuoden kestäneen Scalpassa (ja lähettäneen 161) Project Euler -ongelmia), Haskell näyttää olevan paljon järkevämpää. Itse asiassa tilasin vain pari kirjaa Haskellista ja haluan antaa sille uuden otteen, vaikka tämä johtuu suurelta osin Scalazin olemassaolosta.
Joten löysin moniparadigman kielen (eli Scala, mutta myös Lisp sopisi todennäköisesti laskuun) hyvä tapa FP: hen. Mutta jos sukellat mielelläni Haskelliin (minua ei ollut), mene siihen.
Kommentit
- Mielenkiintoista, että olet päässyt Scalan kanssa pidemmälle kuin OCaml. Miksi?
- @Jon: Hyvä kysymys; vaikea sanoa. Ehkä en vain ' ollut valmis " pääsemään " toiminnalliseen aikaan. Ehkä sattui vain löytämään Scala-opetusohjelma, joka oli asetettu oikealle tasolle. Ehkä Scala ' s C / C ++ / Java -linja vain teki siitä hieman vähemmän ulkomaalaisen. Ottaen huomioon, että mikään järkevä veto olisi nykyään F #: lle eikä Scalalle, ' ll luultavasti palaan OCaml-verkkotunnukseen jossakin vaiheessa, vaikka koska käsittelen tätä tavaraa pelkän ilon vuoksi päästä erilaiseen " ohjelmointi-ajattelutapaan " C ++ -päivämäärääni kohtaan, minulla on perverssi taipumus yrittää Haskellia uudelleen seuraavaksi.
- Sujuva lähestymistapa 🙂
Vastaus
Tulin alun perin C / C ++ / Ruby -taustalta ja käytin FP-käsitteitä Rubyssa aina kun pystyin. Valtio vain loukkaantui aivoihin. Yksi kavereistani kutsui minut eräänä päivänä ja pyysi minua kirjoittamaan jotain Haskelliin (ensimmäinen – ja toivottavasti ei viimeinen – Haskell-työni!). Opin nopeasti kielen ja heitin yhteen jotain, joka toimi. Se ei ollut kaunis tai mikään, mutta se toimi.
Otin kuukauden tauon Haskellista, koska minulla ei ollut mitään käytettäväksi siihen. Mutta kun päätin, että minun oli kirjoitettava oma blogiohjelmisto, käytin Haskellia ( https://symer.io ). Haskell on todella siisti, koska voit jakaa ongelman osiin ja toteuttaa nämä osat eri tavalla syötteen perusteella. Haskell käsittelee myös epäonnistumisia erittäin hyvin älykkään arvojen nyrkkeilyn avulla. Näiden laatikoiden kanssa työskentelyyn on niin paljon työkaluja, että unohdat yksinkertaisesti niiden olemassaolon.
Kokemukseni lispistä (Scheme) oli täysin negatiivinen. Paitsi että kielellä ei ollut näitä älykkäitä, yksinkertaisia työkaluja, se tuntui yhtä vaaralliselta löysältä kuin Ruby tai JavaScript. Se oli kamala kokemus, eikä se tarjoa mitään uutta Rubyn tai Pythonin ulkopuolella.
C ++ ei voi pitää kynttilää Haskellilla muistinhallinnan ulkopuolella. Haskell on yhtä nopea (ellei nopeampi), huomattavasti suppeampi ja paljon turvallisempi. Mutta Haskellin turvallisuus ei koskaan pääse sisään tavalla.
TL; TR Haskell on raikasta ilmaa, ja Lisp on hieman toimivampi rubiini.