Commentaires
- Et F # et Clojure.
Réponse
Je suggère dapprendre les deux, Haskell dabord, puis Common Lisp. Mon expérience avec Haskell était que le typage statique semblait être un ennui restrictif au début, mais une fois que je my suis habitué, jai remarqué que la plupart de mes erreurs de type contenaient des erreurs logiques. Lorsque vous arrivez à ce point, et à létape suivante, qui consiste à apprendre à penser en types et à définir vos propres types comme moyen dexprimer votre solution, vous serez prêt pour Common Lisp.
Avec Common Lisp, vous pouvez ajouter des monades, du curry et tout ce que vous avez aimé de Haskell, mais vous obtenez également plusieurs héritages comme Frank Shearar la mentionné, et des fonctions génériques avec une répartition multiple et un système avancé de gestion des exceptions.
Alors pourquoi Venant dun fond procédural et POO, mon expérience a été que je ne comprenais pas vraiment la programmation fonctionnelle avant de devoir lutiliser exclusivement. Une fois que la programmation fonctionnelle est à laise, vous pouvez ajouter le reste des outils mis à disposition par Common Lisp et utiliser le meilleur outil pour la tâche à accomplir.
Commentaires
- Je pense que vous lavez compris – ce qui rend Haskell et Smalltalk si utiles pour apprendre, cest leur pureté.
- I daccord avec la pureté rend lapprentissage dune langue beaucoup plus facile. Je ne pourrais pas ' t comprendre le langage fonctionnel lui-même avec LISP car tout est possible dans le langage et jai trop de fond impératif, OO. Mais chez Haskell, il n’existe pas de tels concepts qui perturbent l’apprentissage.
- Cela ' est drôle, je ' ve a eu lexpérience inverse. Jai repris les principaux points de la programmation fonctionnelle à travers Scheme, mon premier langage. Je pirate occasionnellement Haskell et je trouve inévitablement que je dois réapprendre 90% + des choses que je savais chaque fois que je quitte Haskell pendant un moment. Cela étant dit, Haskell est un langage incroyablement riche, avec une quantité énorme à vous apprendre (très forcément.) Types Types Types Types! Suivez les types!
Réponse
ET sil vous plaît.
Haskell vous enseigne le plus pur de FP, pour autant que je sache au moins, tout comme Smalltalk enseigne le plus pur de OO. (Je le mentionne non pas pour suggérer que OO et FP ne peuvent pas se marier, mais parce que ces deux langues sont des idée de base poussée à lextrême.)
Lisp est vraiment une famille de langues, donc je vais parler de Common Lisp parce que cest le membre particulier de la famille que jutilise.
Lisp aura encore beaucoup à vous apprendre:
- Cest un multiparadigme, donc comme dsimcha le souligne il « vous montrera comment intégrer FP avec dautres paradigmes.
- Lisp vous apprendra que « code-is-data, data-is-code », par exemple via ses macros.
- CLOS est un marque très intéressante dOO, avec héritage multiple qui fonctionne, et fonctions génériques.
Answer
Haskell et Lisp sont deux bêtes totalement différentes.
Haskell est une sorte de « programmation fonctionnelle pure dans une tour divoire »
Lisp est une sorte de « code-is-data / data-is-code / créez vos propres constructions de langage ». Vous pouvez manipuler votre code de la manière que vous pouvez imaginer.
Ils sont très différents. Les deux partagent laspect «programmation fonctionnelle», mais cest vraiment un tout petit point commun par rapport à leurs différences. Essayez-les et vous verrez à quel point ils sont différents!
Commentaires
- +1: Bon point. Je connais un peu de Haskell et de Lisp. Même si je ne suis pas un expert de lun ou de lautre, je pense que vous avez raison de dire quils sont très différents. n’avez pas l’idée d’utiliser les données comme code. En Lisp, vous n’avez pas de correspondance de modèle (AFAIK). La liste (!) des différences est probablement plus longue.
Réponse
Apprendre Lisp plus tard vous permettra de personnaliser Emacs qui est sans doute léditeur de texte le plus avancé disponible. Vous ne pouvez pas faire cela dans Haskell.
Commentaires
- [Aiguise ses parenthèses]
- Peut-être que quelquun peut écrire un éditeur de texte pour cela. Jentends que le système dexploitation Emacs nest ' pas livré avec un. (Je plaisante. Je sais que vous pouvez obtenir le mode Viper. 🙂
- En fait, il existe un clone dEmacs appelé Yi, qui utilise Haskell exactement de la même manière quEmacs utilise Lisp.En fait, comparé à (GNU) Emacs, Yi est encore plus pur, car son noyau est également écrit en Haskell, alors que les noyaux Emacs ont généralement tendance à ne pas être écrits en Lisp. Le noyau GNU Emacs ' est écrit en C, JEmacs ' est écrit en Java, par exemple.
- @J ö rg, sil sagit dune réimplémentation partielle au lieu dun clone complet de GNU Emacs ou XEmacs, ce nest pas la même chose. Similaire à comparer Word à Wordpad ou Notepad.
- @Thorbj ø rn Ravn Andersen: Oui, mais pas tout à fait que mal. 🙂
Réponse
Le principal avantage que je vois en apprenant Lisp est dapprendre à intégrer FP dans un réel -langage multiparadigme orienté vers le monde, plutôt que de lapprendre uniquement dans le contexte dun langage académique qui met laccent sur la pureté.
Commentaires
- Je suppose que vous voulez une " Haskell vs Lisp " guerre!
- Haskell est un langage académique qui met laccent sur la pureté … et beaucoup de gens lutilisent dans le monde réel. Smalltalk ' est également dans ce camp.
- Beaucoup de gens utilisent Haskell dans le monde réel?
- @Jon Harrop: Eh bien, je utilisez Haskell dans le monde réel (et cela fonctionne très bien pour certaines applications), peut-être que je suis lun des rares (?)
Réponse
Je viens également dun fond C / C ++ / Python et jai essayé FP plusieurs fois ces dernières années. Au début, jai regardé Haskell et je ne pouvais pas en faire la tête ou la queue, puis jai essayé Ocaml mais je nai pas été beaucoup plus loin avec ça. Finalement, jai commencé à entendre de bonnes choses sur Scala, je lai essayé, et jai trouvé que cela me convenait très bien (javais aussi fait un peu de Java dans le passé), au point quaprès un an de travail à Scala (et denvoi 161 Problèmes avec le projet Euler), Haskell semble avoir beaucoup plus de sens. En fait, je viens de commander quelques livres sur Haskell et je veux essayer une autre fois, bien que cela soit largement motivé par lexistence de Scalaz.
Jai donc trouvé en utilisant un langage multi-paradigme (par exemple, Scala, mais Lisp conviendrait probablement aussi) un bon moyen dentrer en FP. Mais si vous êtes heureux de plonger dans Haskell (je n’étais pas), allez-y.
Commentaires
- Intéressant que vous ayez avancé avec Scala que OCaml. Comment ça se fait?
- @Jon: Bonne question; dur à dire. Peut-être que je nétais pas ' prêt à " entrer dans " fonctionnel à lépoque. Peut-être que je viens de trouver un didacticiel Scala au bon niveau. Peut-être que la lignée C / C ++ / Java de Scala ' la rendue un peu moins étrangère. Étant donné que tout pari rationnel de nos jours serait sur F # plutôt que sur Scala, je ' revisiterai probablement le domaine OCaml à un moment donné, même si depuis que je messaye à ce genre de choses juste pour le plaisir de entrer dans un " état desprit de programmation " différent de mon travail de jour en C ++, jai une tendance perverse à réessayer Haskell ensuite.
- Approche fluide 🙂
Réponse
Je suis originaire dun milieu C / C ++ / Ruby et jai utilisé les concepts FP dans Ruby chaque fois que je le pouvais. Létat me fait un peu mal au cerveau. Un de mes copains ma appelé un jour, et il ma demandé décrire quelque chose en Haskell (mon premier – et jespère pas le dernier – emploi chez Haskell!). Jai rapidement appris la langue et jai mis au point quelque chose qui fonctionnait. Ce nétait pas beau ou quoi que ce soit, mais cela a fonctionné.
Jai pris une pause dun mois chez Haskell parce que je navais rien pour lutiliser. Mais quand jai décidé que javais besoin décrire mon propre logiciel de blog, jai utilisé Haskell ( https://symer.io ). Haskell est vraiment cool car vous pouvez diviser un problème en plusieurs parties et implémenter ces parties différemment en fonction de lentrée. Haskell gère également très bien léchec grâce à une boxe intelligente des valeurs. Il y a tellement doutils pour travailler avec ces boîtes que vous oubliez simplement quelles existent.
Mon expérience avec lisp (Scheme) a été complètement négative. Non seulement le langage manquait de ces outils intelligents et simples, mais il se sentait aussi dangereusement lâche que Ruby ou JavaScript. Ce fut une expérience horrible et elle noffre rien de nouveau au-delà de Ruby ou Python.
C ++ ne peut pas «tenir une bougie pour Haskell, en dehors de la gestion de la mémoire. Haskell est tout aussi rapide (sinon plus rapide), beaucoup plus concis et beaucoup plus sûr. Mais la sécurité de Haskell n’intervient jamais. le chemin.
TL; TR Haskell est une bouffée dair frais, et Lisp est un Ruby légèrement plus fonctionnel.