Haskell AND Lisp contro Haskell O Lisp [chiuso]

40

Attualmente codice con C, C ++ e Python. Sto cercando un linguaggio di programmazione funzionale, e ora mi sto appoggiando ad Haskell. Non voglio iniziare una guerra "Haskell vs Lisp" qui; quello che voglio sapere è questo: se imparo Haskell principalmente per l'esposizione alla programmazione funzionale, quali benefici, se ce ne sono, otterrò da un apprendimento successivo Lisp?

    
posta Zeke 13.11.2010 - 18:33
fonte

7 risposte

58

Suggerisco di imparare entrambi, prima Haskell, poi Common Lisp. La mia esperienza con Haskell è stata che inizialmente la tipizzazione statica sembrava essere un fastidio piuttosto restrittivo, ma una volta che mi sono abituato, ho notato che la maggior parte dei miei errori di tipo aveva degli errori logici nascosti dietro di loro. Quando arrivi a questo punto e il prossimo traguardo, che sta imparando a pensare nei tipi e definire i tuoi tipi come mezzo per esprimere la tua soluzione, sarai pronto per Common Lisp.

Con Common Lisp, puoi aggiungere monadi, curriculum e tutto ciò che ti piace da Haskell, ma ottieni anche eredità multiple come menzionato da Frank Shearar e funzioni generiche con invio multiplo e un avanzato sistema di gestione delle eccezioni.

Quindi, perché non apprendere solo Common Lisp? Provenendo da un background procedurale e OOP, la mia esperienza è stata che non ho veramente capito la programmazione funzionale fino a quando non ho dovuto usarlo esclusivamente. Una volta che la programmazione funzionale è constrongvole, è possibile aggiungere il resto degli strumenti che Common Lisp mette a disposizione e utilizzare qualsiasi strumento sia il migliore per il compito da svolgere.

    
risposta data 13.11.2010 - 20:43
fonte
31

E per favore.

Haskell ti insegna il più puro dei FP, almeno per quanto ne so, proprio come Smalltalk insegna il più puro di OO. (Dico questo per non suggerire che OO e FP non possano sposarsi, ma perché entrambi questi linguaggi sono linguaggi "gemelli" - un'idea centrale portata all'estremo.)

Il Lisp è davvero una famiglia di lingue, quindi parlerò di Common Lisp perché è il particolare membro della famiglia che uso.

Il Lisp avrà ancora molte cose da insegnarti:

  • È multiparadigm, quindi come dsimcha indica ti mostrerà come integrare FP con altri paradigmi.
  • Lisp ti insegnerà che "code-is-data, data-is-code", ad esempio attraverso le sue macro.
  • CLOS è una marca di OO molto interessante, con un'ereditarietà multipla che funziona e funzioni generiche.
risposta data 13.11.2010 - 19:05
fonte
11

Learning Lisp in seguito ti consentirà di personalizzare Emacs, che è probabilmente l'editor di testo più avanzato disponibile. Non puoi farlo in Haskell.

    
risposta data 13.11.2010 - 19:42
fonte
11

Haskell e Lisp sono due animali completamente diversi.

Haskell è una specie di "pura programmazione funzionale in una torre d'avorio"

Lisp è una specie di "codice-è-dati / dati-è-codice / crea il tuo linguaggio". Puoi manipolare il tuo codice in qualsiasi modo tu possa immaginare.

Sono molto diversi. Entrambi condividono l'aspetto della "programmazione funzionale", ma questo è davvero un piccolo punto comune rispetto alle loro differenze. Provali e vedrai quanto sono diversi!

    
risposta data 10.09.2011 - 20:35
fonte
7

Il vantaggio principale che vedo dall'apprendimento di Lisp sta imparando come integrare FP in un linguaggio multiparadigm orientato al mondo reale, piuttosto che solo apprenderlo nel contesto di un linguaggio accademico che enfatizza la purezza.

    
risposta data 13.11.2010 - 18:49
fonte
5

Vengo anche da uno sfondo C / C ++ / Python e ho provato FP un paio di volte negli ultimi anni. Inizialmente ho guardato Haskell e non sono riuscito a farne testa o coda, quindi ho provato con Ocaml, ma non sono riuscito ad andare oltre. Alla fine ho iniziato a sentire cose belle su Scala, l'ho provato, e ho trovato che mi andava molto bene (avevo anche fatto un po 'di Java in passato), al punto che dopo un anno di così dilettarsi in Scala (e spedire 161 Project Euler ha problemi con esso), Haskell sembra avere molto più senso. In effetti ho appena ordinato un paio di libri su Haskell e voglio dargli un altro, anche se questo è in gran parte motivato dall'esistenza di Scalaz.

Quindi ho trovato che usare un linguaggio multi-paradigma (ad es. Scala, ma anche Lisp probabilmente sarebbe adatto anche al conto) è un buon modo per FP. Ma se sei felice di immergerti in Haskell (non lo ero), provaci.

    
risposta data 14.11.2010 - 01:43
fonte
2

Originariamente sono venuto da uno sfondo C / C ++ / Ruby e ho usato i concetti FP in Ruby ogni volta che potevo. Lo stato mi ha appena fatto male al cervello. Uno dei miei amici mi ha chiamato un giorno e mi ha chiesto di scrivere qualcosa in Haskell (il mio primo - e, si spera, non ultimo - lavoro Haskell!). Ho imparato rapidamente la lingua e ho buttato insieme qualcosa che funzionava. Non era bello o altro, ma funzionava.

Ho preso un mese di pausa da Haskell perché non avevo niente da usare per. Ma quando ho deciso di scrivere il mio blog, ho usato Haskell ( link ). Haskell è davvero interessante perché puoi suddividere un problema in parti e implementare queste parti in modo diverso in base all'input. Haskell gestisce anche il fallimento estremamente bene attraverso il pugilato intelligente dei valori. Ci sono così tanti strumenti per lavorare con queste scatole che semplicemente dimentichi che esistono.

La mia esperienza con lisp (Scheme) è stata completamente negativa. Non solo la lingua mancava di questi strumenti intelligenti e semplici, ma si sentiva pericolosamente sciolta come Ruby o JavaScript. È stata un'esperienza orribile e non offre nulla di nuovo oltre a Ruby o Python.

C ++ non può tenere una candela per Haskell, al di fuori della gestione della memoria. Haskell è altrettanto veloce (se non più veloce), significativamente più conciso e molto più sicuro. Ma la sicurezza di Haskell non si intromette mai.

TL; TR Haskell è una boccata d'aria fresca e il Lisp è un Rubino leggermente più funzionale.

    
risposta data 21.04.2015 - 19:17
fonte

Leggi altre domande sui tag