104 votes

Haskell, Lisp et commentaires

Pour ceux d'entre vous l'expérience dans les deux Haskell et certains saveur de Lisp, je suis curieux de savoir comment "agréable" (pour utiliser un horrible terme), c'est d'écrire du code en Haskell vs Lisp.

Un peu de contexte: je suis en train d'apprendre Haskell maintenant, après avoir travaillé avec le Schéma et CL (et une petite incursion dans Clojure). Traditionnellement, vous pouvez me considérer comme un fan de la dynamique des langues pour la concision et la rapidité qu'ils fournissent. Je me suis rapidement tombé en amour avec Lisp macros, comme il m'a donné encore une autre façon d'éviter de verbosité et passe-partout.

Je suis la recherche Haskell incroyablement intéressant, c'est de me présenter à des moyens de codage, je ne savais pas existé. Il a certainement quelques aspects qui semblent comme ils le feraient de l'aide dans la réalisation de l'agilité, comme la simplicité de l'écriture partielle des fonctions. Cependant, je suis un peu inquiet au sujet de perdre du Lisp macros (je suppose que je perds; pour dire la vérité j'ai peut-être tout simplement pas appris à leur sujet encore?) et le typage statique du système.

Aurait-il quelqu'un qui a fait une quantité décente de codage dans les deux mondes de l'esprit commenter sur la façon dont les expériences diffèrent, que vous préférez, et si cette préférence est la situation?

69voto

ShreevatsaR Points 21219

Réponse courte:

  • presque tout ce que vous pouvez faire avec les macros que vous pouvez faire avec une fonction d'ordre supérieur (et j'y inclus les monades, des flèches, etc.), mais il peut exiger plus de la pensée (mais uniquement la première fois, et c'est amusant, et vous serez un meilleur programmeur pour cela), et
  • le système statique est suffisamment général pour qu'il ne fait jamais dans votre chemin, et, étonnamment, il en fait "sida dans la réalisation de l'agilité" (comme on dit) parce que quand votre programme compile, vous pouvez être presque certain que c'est correct, de sorte que cette certitude vous permet d'essayer des choses que vous pourriez en être autrement peur d'essayer, il y a une "dynamique" de la programmation bien que ce n'est pas la même qu'avec Lisp.

[Note: Il y a un "Modèle de Haskell" qui vous permet d'écrire des macros comme en Lisp, mais strictement parlant, on ne devrait jamais besoin d' elle.]

64voto

Matthias Benkard Points 11264

Tout d'abord, ne vous inquiétez pas à propos de la perte des caractéristiques particulières comme le typage dynamique. Comme vous êtes familier avec la Common Lisp, remarquablement bien conçu langue, je suppose que vous êtes au courant qu'une langue ne peut pas être réduit à ses fonctions. Il est tout au sujet d'un ensemble cohérent, n'est-ce pas?

À cet égard, Haskell brille avec autant d'éclat que Common Lisp. Ses caractéristiques se combinent pour vous offrir un mode de programmation qui rend le code extrêmement courte et élégante. Le manque de macros est quelque peu atténué par la plus élaborée (mais, de même, plus difficile à comprendre et utiliser les concepts comme des monades et des flèches. Le système de type statique ajoute à votre alimentation plutôt que d'obtenir dans votre chemin comme il le fait dans la plupart des langages orientés objet.

D'autre part, la programmation Haskell est beaucoup moins interactif que Lisp, et l'énorme quantité de réflexion présente dans des langages comme Lisp n'est tout simplement pas s'adapter à la vision statique du monde que Haskell suppose. L'outil met à votre disposition, sont donc très différents entre les deux langues, mais difficile de les comparer l'un à l'autre.

Personnellement, je préfère le Lisp chemin de la programmation en général, car j'ai l'impression qu'il correspond à la façon dont je travaille mieux. Toutefois, cela ne signifie pas que vous êtes tenu de le faire ainsi.

13voto

Herrmann Points 1043

Il y a moins besoin de métaprogrammation en Haskell qu’en commun Lisp parce que beaucoup peut être structuré autour de monades et la syntaxe ajoutée fait embarquée DSL regarde moins arborescente, mais il y a toujours des Template Haskell, comme mentionné par ShreevatsaRet même Liskell (Haskell sémantique + syntaxe Lisp) si vous aimez les parenthèses.

10voto

Hibou57 Points 608

Concernant les macros, voici une page qui en parle : Bonjour Haskell, au Revoir Lisp. Il explique d'un point de vue où les macros sont tout simplement pas nécessaires en Haskell. Il est livré avec un court exemple pour la comparaison.

Exemple de cas où une macro LISP est nécessaire pour éviter d'évaluation de deux arguments :

(defmacro doif (x y) `(if ,x ,y))

Exemple de cas où Haskell n'est pas systématiquement évalue à la fois l'argument, sans avoir besoin de quelque chose comme une définition de macro :

doif x y = if x then (Just y) else Nothing

Et voilà

9voto

skypher Points 2158

Je suis un Common Lisp programmeur.

Après avoir essayé Haskell il y a quelques temps mon bas de ligne, c'est de coller avec CL.

Raisons:

  • typage dynamique (découvrez Dynamique vs Statique Saisissant Un Modèle Basé sur l'Analyse par Pascal Costanza)
  • en option et le mot-clé arguments
  • uniforme homoiconic syntaxe de la liste avec les macros
  • préfixe syntaxe (pas besoin de rappeler les règles de priorité)
  • impure et donc plus adapté pour le prototypage rapide
  • objet puissant avec système de meta-object protocol
  • adulte
  • large gamme de compilateurs

Haskell a ses propres mérites bien sûr, et un peu les choses d'une façon fondamentalement différente, mais il n'a tout simplement pas le couper dans le long terme pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X