Question

À toutes les personnes qui connaissent le lambda calcul : quel avantage vous a-t-il apporté en termes de programmation ? Recommanderiez-vous que les gens l'apprennent?

Était-ce utile?

La solution

Si vous souhaitez programmer dans un langage de programmation fonctionnel , il est essentiel. Je veux dire, à quel point est-il utile de connaître les machines Turing? Eh bien, si vous écrivez en C, le paradigme de langage est assez proche des machines de Turing: vous avez un pointeur d’instruction et une instruction en cours, et la machine effectue une action dans l’état actuel, puis avance à l’instruction suivante.

Dans un langage fonctionnel, vous ne pouvez tout simplement pas penser comme ça - ce n'est pas le paradigme de la langue. Vous devez repenser au calcul lambda et à la façon dont les termes y sont évalués. Il sera beaucoup plus difficile pour vous d’être efficace dans un langage fonctionnel si vous ne connaissez pas le calcul lambda.

Autres conseils

L’avantage du lambda calcul est qu’il s’agit d’un modèle de calcul extrêmement simple, équivalent à une machine de Turing. Mais si une machine de Turing ressemble plus à un langage d'assemblage, le lambda calcul ressemble davantage à un langage de haut niveau. Et si vous apprenez le codage Church , cela vous aidera à apprendre la technique de programmation appelée style de continuation-passant , ce qui est très utile pour la mise en œuvre de la recherche en retour et d'autres astuces.

L’utilisation principale du lambda calcul en pratique est qu’il est un excellent outil de laboratoire pour l’étude de nouvelles idées relatives au langage de programmation . Si vous avez une idée pour une nouvelle fonctionnalité linguistique, vous pouvez l'ajouter au calcul lambda et obtenir un élément suffisamment expressif pour pouvoir programmer tout en étant . assez simple pour étudier de manière approfondie . Cette utilisation est vraiment plus pour les concepteurs de langage et les théoriciens que pour les programmeurs.

Le calcul lambda est également très cool en soi: tout comme la connaissance du langage d'assemblage, il approfondira votre compréhension du calcul . C’est particulièrement amusant de programmer une machine à turing universelle dans le calcul lambda. Mais c’est une mathématique fondamentale, pas une programmation pratique.

Pour être honnête, apprendre le calcul lambda avant la programmation fonctionnelle m'a permis de réaliser que les deux ne sont pas aussi liés que le C à n'importe quelle programmation impérative.

Lambda Calculus est un langage de programmation fonctionnel, un ésotérique, un tarpit de Turing si vous voulez; accidentellement c'est aussi le premier.

La majorité des langages de programmation fonctionnels ne vous obligent pas à "apprendre" le calcul lambda, quoi que cela signifie, le calcul lambda est incroyablement minimal, vous pouvez "apprendre" ses axiomes en moins d'une heure. Pour en connaître les résultats, à l'instar du théorème des points fixes, le théorème de Church-Rosser, etc., n'est tout simplement pas pertinent pour la programmation fonctionnelle.

De plus, les abstractions lambda sont souvent considérées comme des "fonctions", ce ne sont pas des algorithmes, mais des fonctions. C'est une différence mineure. La plupart des "langages fonctionnels" traitent leurs fonctions plus exactement de la même manière que les mathématiques classiques. / p>

Cependant, pour utiliser efficacement Haskell, par exemple, vous devez comprendre certains systèmes de type , indépendamment du calcul lambda. Le système de type System F peut être appliqué à toutes les "fonctions" et ne requiert aucun lambda. abstractions du tout. Communément en maths nous disons f: R ^ 2 - > R: f (x) = x ^ 2. Nous aurions pu dire: f (x) = x ^ 2 :: R - > R - > R. En fait, Haskell se rapproche beaucoup de cette notation.

Le lambda calcul est un formalisme théorique, les fonctions de Haskell ne sont vraiment pas plus des "abstractions lambda" que f: f (x) = x ^ 2 vraiment, ce qui rend les abstractions lambda intéressantes, c’est qu’il nous permet de définir ce qui est normalement vu "constantes" en tant que "fonctions", aucun langage fonctionnel ne le fait à cause de l'énorme surcharge de temps de calcul. Haskell et autres ne sont qu'une forme restreinte du système de types de System F appliqué aux fonctions utilisées dans les mathématiques classiques. Les fonctions de Haskell ne sont certainement pas des candidats à la réduction anonymes formellement symboliques comme elles le sont dans le lambda-calcul. La plupart des langages de programmation fonctionnels ne sont pas des systèmes de réécriture à base de réduction symbolique. Les lisps sont dans une certaine mesure, mais c'est un paradigme en soi et son "mot clé lambda" ne satisfait pas vraiment en l'appelant le calcul lambda.

Je pense que l’utilisation du lambda calcul en ce qui concerne la programmation est qu’il s’agit d’un système plutôt minimal qui capture l’essence de l’abstraction (ou de "fonctions anonymes" ou de fermetures, si vous préférez). Sinon, je ne pense pas que ce soit généralement essentiel, sauf lorsque vous devez implémenter l'abstraction vous-même (comme Tetha ( 114646 ) mentionné).

Je suis aussi complètement en désaccord avec Denis Bueno ( 114701 ). dit que c'est essentiel pour la programmation fonctionnelle. Il est parfaitement possible de définir, d’utiliser ou de comprendre un langage fonctionnel sans aucun calcul lambda. Pour comprendre l’évaluation des termes dans les langages fonctionnels (ce qui, à mon avis, contredit quelque peu l’utilisation d’un langage fonctionnel), vous aurez probablement intérêt à apprendre les systèmes de réécriture de termes.

Je suis d'accord avec ceux qui disent qu'il est théoriquement possible d'apprendre la programmation fonctionnelle sans apprendre le calcul lambda - mais quel est l'avantage de ne pas apprendre le calcul lambda? Ce n’est pas comme s’il fallait beaucoup de temps.

Cela vous aidera probablement à mieux comprendre la programmation fonctionnelle. Mais même si ce n'est pas le cas, cela reste une bonne chose à apprendre. Le Y-combinator est une merveille.

Si vous voulez seulement être technicien et écrire des programmes pour faire des choses, alors vous n'avez pas vraiment besoin de connaître le lambda-calcul, les machines à états finis, les automates à pile, les expressions régulières, la grammaire sans contexte, les mathématiques discrètes, etc.

Mais si vous êtes curieux des mystères les plus profonds qui sous-tendent ces éléments, vous pouvez commencer à vous demander comment on pourrait répondre à ces questions. Les concepts sont beaux et vont développer votre imagination. Je pense aussi qu’ils font d’ailleurs un meilleur pratiquant.

Ce qui m'a rendu accro, c'est le livre de Minsky intitulé Computation: Finite and Infinite Machines.

Le lambda calcul est un modèle de calcul, tout comme la machine de turing. Il est donc utile si vous devez implémenter un évaluateur donné pour un langage basé sur ce modèle. Cependant, en pratique, vous avez simplement besoin de l’idée de base (euh. Placer l’argument sémantiquement correct dans le corps d’une fonction?) Et c’est à peu près tout. il.

Une façon possible d’apprendre le calcul lambda est

http://en.wikipedia.org/wiki/Lambda_Calculus

Ou, si vous voulez plus, voici mon blog consacré au lambda calcul et à des choses comme ça

http://weblogs.manas.com.ar/lziliani/

Comme pour toute abstraction de calculs, lambda calcul vous permet de modéliser des éléments utilisés dans la plupart des langages de programmation, tels que le sous-typage. Pour en savoir plus à ce sujet, l’un des meilleurs livres présentant des utilisations pratiques du calcul lambda dans ce sens est

http://www.amazon.com/Types-Programming-Languages-Benjamin -Pierce / dp / 0262162091 / ref = sr_1_1? C'est-à-dire = UTF8 & amp = s = livres & qid = 1222088714 & amp; sr = 8-1

J'ai trouvé que le calcul Lambda était utile pour comprendre le fonctionnement de la programmation fonctionnelle à un niveau plus profond. Surtout comment implémenter des langages fonctionnels.

Cela m’a permis de comprendre plus facilement des concepts avancés tels que les systèmes de types et les stratégies d’évaluation (par exemple, appel par nom ou appel par valeur).

Je ne pense pas que l'on ait besoin de connaître le calcul Lambda pour utiliser des techniques de programmation fonctionnelle de base. Cependant, comprendre le calcul lambda facilite l'apprentissage de la théorie de la programmation avancée .

J'aimerais également mentionner que si vous faites quelque chose dans le domaine de la PNL, le calcul lambda est à la base d'un travail considérable en sémantique compositionnelle.

Les avantages pour moi sont une programmation synergique plus compacte. Les choses ont tendance à couler horizontalement plus que verticalement. De plus, il est très utile pour le prototypage d'algorithmes simples. Je ne sais pas si je l’utilise pleinement, mais je le trouve très utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top