Comment utile est de savoir lambda calcul? [fermé]
à tous ceux qui connaissent lambda calculus : Quel avantage vous a-t-il apporté, en ce qui concerne la programmation? Recommanderiez-vous que les gens l'apprennent?
11 réponses
si vous voulez programmer dans n'importe quel langage de programmation fonctionnel , c'est essentiel. Je veux dire, à quel point est-ce utile de connaître les machines de Turing? Eh bien, si vous écrivez C, le paradigme de la langue est assez proche des machines de Turing -- vous avez un pointeur d'instruction et une instruction courante, et la machine prend une certaine action dans l'état actuel, et puis Amble le long de la prochaine instruction.
dans un langage fonctionnel, vous ne pouvez tout simplement pas penser comme ça ... ce n'est pas le paradigme du langage. Vous devez penser au calcul lambda, et comment les termes sont évalués là-bas. Il sera beaucoup plus difficile pour vous d'être efficace dans un langage fonctionnel si vous ne savez pas lambda calcul.
l'avantage du calcul lambda est qu'il s'agit d'un modèle de calcul extrêmement simple qui est équivalent à une machine de Turing. Mais tandis qu'une machine de Turing est plus comme le langage d'assemblage, lambda calculus est plus comme un langage de haut niveau. Et si vous apprenez Church encodings qui vous aidera à apprendre la technique de programmation appelée continuation-passing style , qui est très utile pour la mise en œuvre de la recherche de astuces intéressantes.
la principale utilisation du calcul lambda dans la pratique est que il est un grand outil de laboratoire pour l'étude de nouvelles idées de programmation-langage . Si vous avez une idée pour une nouvelle fonctionnalité de langue, vous pouvez ajouter la nouvelle fonctionnalité au calcul lambda et vous obtenez quelque chose qui est assez expressif pour programmer tout en étant assez simple pour étudier très à fond . Cette utilisation est vraiment plus pour les concepteurs de langage et les théoriciens que pour les programmeurs.
Lambda calculus est également très cool en soi: tout comme la connaissance du langage d'assemblage, il va approfondir votre compréhension du calcul . C'est particulièrement amusant de programmer une machine de turing universelle dans le calcul lambda. Mais ce sont les mathématiques fondamentales, pas la programmation pratique.
pour être honnête, apprendre le calcul lambda avant la programmation fonctionnelle m'a fait réaliser que les deux sont aussi sans rapport que C est à n'importe quelle programmation impérative.
Lambda calculus est a langage de programmation fonctionnel, un ésotérique, un tarpit Turing si vous le souhaitez; accidentellement, il est aussi le premier.
la majorité des langages de programmation fonctionnelle n'exigent pas du tout que vous "appreniez" le calcul lambda, peu importe ce qui signifie, lambda calcul est incroyablement minime, vous pouvez "apprendre" de ses axiomes, en moins d'une heure. Pour en connaître les résultats, comme le théorème de point fixe, le théorème de Church-Rosser et cetera est tout simplement hors de propos pour la programmation fonctionnelle.
aussi, lambda-les abstractions sont souvent considérées comme des 'fonctions', Je ne suis pas d'accord avec cela, ce sont des algorithmes, pas des fonctions, une différence Mineure, la plupart des 'langues fonctionnelles' traitent leurs fonctions plus de la façon dont les mathématiques classiques faire.
Cependant , pour utiliser efficacement Haskell par exemple, vous devez comprendre certains systèmes de type , c'est-à-dire indépendamment du calcul lambda, le système de type Système F peut être appliqué à toutes les "fonctions" et ne nécessite aucune Abstraction lambda du tout. En mathématiques, on dit souvent f: R^2 - > R: f (x) = x^2. On aurait pu dire: f (x) = x^2 :: R -> R -> R. en fait, Haskell est assez proche de cette notation.
Lambda calcul est un formalisme théorique, les fonctions de Haskell sont vraiment pas plus "abstractions lambda" que f : f(x) = x^2 vraiment, ce qui rend les abstractions lambda intéressantes est qu'il nous permet de définir ce qui sont normalement considérés comme "constantes" comme "fonctions", aucun langage fonctionnel ne fait cela en raison de l'énorme overhead de calcul. Haskell and alike est juste une forme restreinte du système F Type Système appliqué à des fonctions telles qu'utilisées dans les mathématiques classiques de tous les jours. Les fonctions à Haskell sont certainement pas la réduction formellement symbolique anonyme-demandeurs comme ils sont dans lambda-calcul. La plupart des langages de programmation fonctionnels ne sont pas des systèmes de réécriture basés sur la réduction symbolique. Les Lisps sont dans une certaine mesure, mais c'est un paradigme en soi et son "mot clé lambda" ne satisfait vraiment pas l'appel lambda calcul.
je pense que l'utilisation du calcul lambda en ce qui concerne la programmation dans la pratique est qu'il s'agit d'un système tout à fait minimal qui capture l'essence de l'abstraction (ou" fonctions anonymes " ou des fermetures, si vous voulez). En dehors de cela, je ne pense pas que ce soit généralement essentiel sauf quand vous avez besoin d'implémenter vous-même l'abstraction (comme L'a mentionné Tetha ( 114646 )).
Je suis aussi complètement en désaccord avec Denis Bueno ( 114701 ) qui dit qu'il est essentiel pour la programmation fonctionnelle. Il est parfaitement possible de définir, d'utiliser ou de comprendre un langage fonctionnel sans aucune lambda calcul. Afin de comprendre l'évaluation des termes dans les langues fonctionnelles (qui, à mon avis, contredit quelque peu l'utilisation d'un langage fonctionnel), vous serez probablement mieux d'apprendre sur les systèmes de réécriture terme.
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 pas apprendre le calcul lambda? C'est pas comme si il faut un gros investissement en temps.
très probablement, il vous aidera à mieux comprendre la programmation fonctionnelle. Mais même si ce n'est pas le cas, c'est quand même une chose cool à apprendre. Le Y-combinator est une chose de la beauté.
si vous voulez seulement être un technicien et écrire des programmes pour faire des choses, alors vous n'avez pas vraiment besoin de connaître lambda-calcul, machines à états finis, automates pushdown, expressions régulières, grammaire sans contexte, mathématiques discrètes, etc.
mais si vous avez de la curiosité sur les mystères plus profonds qui sous-tendent ce genre de choses, vous pouvez commencer à vous demander comment ces questions pourraient être répondues. Les concepts sont beaux et vont élargir votre imagination. Je pense aussi qu'ils, soit dit en passant, en faire un meilleur praticien.
ce qui m'a rendu accro, C'est le Livre de Minsky intitulé calcul: machines finies et infinies.
une façon possible d'apprendre le calcul lambda est
http://en.wikipedia.org/wiki/Lambda_Calculus
Ou, si vous en voulez plus, voici mon blog dédié à lambda calcul et des trucs comme ça
http://weblogs.manas.com.ar/lziliani /
comme toute abstraction de calculs, avec le calcul lambda vous pouvez modéliser des trucs utilisés dans la plupart des programmes langues, comme le sous-typage. Pour plus d'informations à ce sujet, l'un des meilleurs livres avec des utilisations pratiques du calcul lambda dans ce sens est
j'ai trouvé que le calcul Lambda était utile pour comprendre comment la programmation fonctionnelle a fonctionné à un niveau plus profond. Surtout comment implémenter des langages fonctionnels.
il m'a permis de mieux comprendre des concepts avancés comme les systèmes de type et les stratégies d'évaluation (par exemple, call by name versus call by value).
Je ne pense pas qu'on ait besoin de savoir quoi que ce soit sur le calcul Lambda pour utiliser les techniques de programmation fonctionnelle de base. Cependant comprendre le calcul lambda rend plus facile d'apprendre la théorie de programmation avancée .
le calcul lambda est un modèle de calcul, tout comme la machine de turing. Ainsi, il est utile si vous avez besoin d'implémenter un certain évaluateur pour une langue basée sur ce modèle, cependant, dans la pratique, vous avez juste besoin de l'idée de base (uh. lieu argument sémantiquement correct dans le corps d'une fonction?) et c'est tout.
j'aimerais également mentionner que si vous faites quelque chose dans le domaine de la NLP, lambda calculus est à la base d'un énorme corpus de travail en sémantique compositionnelle.
les avantages pour moi est une programmation synergique plus compacte. La matière a tendance à s'écouler horizontalement plus que verticalement. De Plus il est très utile pour le prototypage des algorithmes simples. Je ne sais pas si je l'utilise à son plein potentiel, mais je le trouve très utile.