Je code actuellement avec C, C ++ et Python. Je veux choisir un langage de programmation fonctionnel, et pour l'instant je me penche vers Haskell. Je ne veux PAS commencer une guerre "Haskell vs Lisp" ici; Ce que je veux savoir, c'est ceci: si j'apprends Haskell principalement pour me familiariser avec la programmation fonctionnelle, quels avantages, le cas échéant, tirerai-je de l'apprentissage ultérieur de Lisp?
40
Réponses:
Je suggère d'apprendre les deux, d'abord Haskell, puis Common Lisp. Mon expérience avec Haskell était que le typage statique semblait être un désagrément restrictif au début, mais une fois que je m'y suis habitué, j'ai remarqué que la plupart de mes erreurs de type étaient masquées par des erreurs de logique. Lorsque vous en arriverez à ce point et au prochain jalon, qui consiste à apprendre à penser à des types et à définir vos propres types comme moyen d’exprimer votre solution, vous serez prêt pour Common Lisp.
Avec Common Lisp, vous pouvez ajouter des monades, du currying et tout ce que vous aimez de Haskell, mais vous obtenez également un héritage multiple tel que mentionné par Frank Shearar, ainsi que des fonctions génériques avec envoi multiple et un système avancé de gestion des exceptions.
Alors pourquoi ne pas simplement apprendre Common Lisp en premier? Venant d’un arrière-plan procédural et de la programmation orientée objet, j’ai appris que je ne comprenais pas vraiment la programmation fonctionnelle avant de devoir l’utiliser exclusivement. Une fois que la programmation fonctionnelle est confortable, vous pouvez ajouter le reste des outils mis à disposition par Common Lisp et utiliser le meilleur outil pour la tâche à accomplir.
la source
Et s'il vous plaît.
Haskell vous enseigne le plus pur de la PF, autant que je sache au moins, tout comme Smalltalk enseigne le plus pur de l'OO. (Je mentionne cela non pas pour suggérer que OO et FP ne peuvent pas se marier, mais parce que ces deux langues sont des langues "gemmes" - une idée fondamentale poussée à l'extrême.)
Lisp est vraiment une famille de langues, je vais donc parler de Common Lisp parce que c'est le membre de la famille que j'utilise.
Lisp aura encore beaucoup à vous apprendre:
la source
Apprendre plus tard Lisp vous permettra de personnaliser Emacs, l’éditeur de texte le plus avancé qui soit. Vous ne pouvez pas faire ça à Haskell.
la source
Haskell et Lisp sont deux bêtes totalement différentes.
Haskell est un peu "une pure programmation fonctionnelle dans une tour d'ivoire"
Lisp is kindof "code-est-données / données-est-code / fabrique tes propres constructions de langage". Vous pouvez manipuler votre code de n'importe quelle manière que vous pouvez imaginer.
Ils sont très différents. Les deux partagent l’aspect "programmation fonctionnelle", mais c’est vraiment un tout petit point commun par rapport à leurs différences. Essayez-les et vous verrez à quel point ils sont différents!
la source
Le principal avantage que je tire de l'apprentissage de Lisp est d'apprendre à intégrer la PF dans un langage multiparadigm orienté vers le monde réel, plutôt que de l'apprendre uniquement dans le contexte d'un langage académique mettant l'accent sur la pureté.
la source
Je viens également d’un milieu C / C ++ / Python et j’ai essayé la PF plusieurs fois ces dernières années. Au début, j'ai regardé Haskell et je ne pouvais pas en tirer la tête ou la queue, puis j'ai essayé Ocaml mais je ne suis pas allé beaucoup plus loin avec ça. Finalement, j'ai commencé à entendre de bonnes choses à propos de Scala, je l’ai essayé et j’ai trouvé que cela me convenait très bien (j’avais aussi fait un peu de Java par le passé), au point qu’après une année de tant Le projet Euler pose problème), Haskell semble avoir beaucoup plus de sens. En fait, je viens de commander quelques livres sur Haskell et je veux essayer, bien que cela soit largement motivé par l'existence de Scalaz.
J'ai donc trouvé l'utilisation d'un langage multi-paradigme (c'est-à-dire Scala, mais Lisp conviendrait probablement aussi) d'une bonne façon de passer à la PF. Mais si vous êtes content de plonger dans Haskell (pas moi), foncez.
la source
Je suis originaire de C / C ++ / Ruby et j’utilisais les concepts de PF en Ruby chaque fois que je le pouvais. État juste un peu blessé mon cerveau. Un de mes amis m'a appelé un jour et il m'a demandé d'écrire quelque chose en haskell (mon premier travail - et j'espère pas le dernier - travail de haskell!). J'ai rapidement appris la langue et jeté ensemble quelque chose qui a fonctionné. Ce n'était pas beau ou quoi que ce soit, mais cela a fonctionné.
J'ai pris une pause d'un mois chez Haskell parce que je n'avais rien pour l'utiliser. Mais quand j'ai décidé d'écrire mon propre logiciel de blog, j'ai utilisé Haskell ( https://symer.io ). Haskell est vraiment cool parce que vous pouvez diviser un problème en plusieurs parties et les implémenter différemment en fonction des entrées. Haskell gère également très bien les défaillances grâce à une mise en boîte intelligente des valeurs. Il y a tellement d'outils pour travailler avec ces boîtes que vous oubliez tout simplement qu'elles existent.
Mon expérience avec lisp (Scheme) était complètement négative. Non seulement la langue manquait-elle de ces outils simples et intelligents, mais elle était aussi dangereusement lâche que Ruby ou JavaScript. Ce fut une expérience horrible et n'offre rien de nouveau au-delà de Ruby ou Python.
C ++ ne peut pas laisser une bougie à Haskell, en dehors de la gestion de la mémoire. Haskell est tout aussi rapide (sinon plus rapide), nettement plus concis et beaucoup plus sûr. Mais la sécurité de Haskell n'interfère jamais.
TL; TR Haskell est une bouffée d’air frais et Lisp, un rubis légèrement plus fonctionnel.
la source