71 votes

À quel point connaître le calcul lambda est-il utile?

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

80voto

Norman Ramsey Points 115730

L'avantage de lambda calcul, c'est qu'il est extrêmement simple de modèle de calcul qui est équivalent à une machine de Turing. Mais alors qu'une machine de Turing est plus comme langage d'assemblage, lambda calcul est plus comme un langage de haut niveau. Et si vous apprenez l' Église codages qui vous aidera à apprendre la technique de programmation appelé continuation passing style, ce qui est très utile pour la mise en œuvre de mandature de recherche et d'autres trucs.

La principale utilisation de lambda calcul, dans la pratique, c'est que c'est un excellent laboratoire pour l'étude de la nouvelle programmation de langue idées. Si vous avez une idée pour une nouvelle fonctionnalité, vous pouvez ajouter la nouvelle fonctionnalité pour le lambda calcul et vous obtenez quelque chose qui est assez expressif pour le programme , tout en étant assez simple à étudier très soigneusement. Cette utilisation est vraiment plus pour la langue designers et théoriciens que pour les programmeurs.

Lambda calcul est aussi très cool dans son propre droit: tout comme savoir de l'assemblée de la langue, il permettra d' approfondir votre compréhension de calcul. Il est particulièrement amusant de programme d'une machine de turing universelle dans le lambda calcul. Mais c'est à la base des mathématiques, et non pas la pratique de la programmation.

26voto

EfForEffort Points 54278

Si vous souhaitez programmer dans tout langage de programmation fonctionnel, il est essentiel. Je veux dire, comment est-il utile de savoir sur les machines de Turing? Eh bien, si vous écrivez C, le langage de paradigme est assez proche de machines de Turing -- vous avez un pointeur d'instruction et d'une instruction en cours, et la machine prend un peu d'action dans l'état actuel, puis chevauche le long de la prochaine instruction.

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

22voto

Zorf Points 2931

Pour être honnête, l'apprentissage lambda calcul avant de programmation fonctionnelle, m'a fait réaliser que les deux sont comme sans rapport avec C est pour toute la programmation impérative.

Lambda calcul est un langage de programmation fonctionnel, ésotérique, une Turing tar pit si vous le souhaitez; par hasard c'est aussi la première.

La majorité des langages de programmation fonctionnels à tous de ne pas vous obliger à "apprendre" lambda calcul, peu importe ce que cela signifie, lambda calcul est incroyablement minime, vous pouvez "apprendre" de ses axiomes, en moins d'une heure. Pour connaître les résultats, comme le fixedpoint théorème de l'Église-Rosser Théorème et cetera est juste hors de propos à la programmation fonctionnelle.

Aussi, lambda-abstractions sont souvent tenus d'être des 'fonctions', je suis en désaccord avec cela, ils sont des algorithmes, des fonctions pas, une différence mineure, la plupart des "langages fonctionnels" traiter leurs fonctions de plus dans la façon dont les mathématiques classiques.

Toutefois, pour utiliser efficacement Haskell vous avez besoin de comprendre certaines des systèmes de type, c'est indépendamment du lambda calcul, le Système F type de système peut être appliqué à tous les 'fonctions' et ne nécessite pas de lambda-abstractions. Couramment dans les mathématiques nous disent que 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, Haskell fonctions sont vraiment pas plus "lambda abstractions' de f : f(x) = x^2 vraiment, ce qui fait lambda-abstractions intéressant, c'est qu'elle nous permet de définir ce que sont normalement considérés comme des "constantes" comme "fonctions", aucune fonctionnelle de la langue n'est qu'en raison de l'énorme calcul des frais généraux. Haskell et autres, est tout simplement une forme restreinte du Système F du type de système appliquée à des fonctions comme utilisé dans la vie quotidienne classique des mathématiques. Fonctions en Haskell ne sont certainement pas les anonymes officiellement symbolique de réduction-les candidats comme ils le sont dans le lambda-calcul. La plupart des langages de programmation fonctionnelle ne sont pas symboliques de réduction basée sur la ré-écriture des systèmes. Lisps sont à un certain degré, mais c'est un changement de paradigme sur son propre et son "lambda mot clé" n'a vraiment pas de satisfaire l'appelant lambda calcul.

15voto

mweerden Points 4291

Je pense que l'utilisation de lambda calcul à l'égard de la programmation, dans la pratique, c'est qu'il est tout à fait minime système qui capture l'essence de l'abstraction (ou "fonctions anonymes" ou fermetures, si vous voulez). Autre que cela, je ne pense pas qu'il est généralement indispensable, sauf quand vous en avez besoin pour mettre en œuvre l'abstraction de vous-même (comme Tetha (114646) mentionné).

J'ai 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 conditions dans les langages fonctionnels (qui, à mon avis, un peu en contradiction avec l'utilisation d'un langage fonctionnel) vous serez probablement mieux de l'apprentissage sur la durée systèmes de réécriture.

12voto

Michael Dorfman Points 3597

Je suis d'accord avec ceux qui disent qu'il est théoriquement possible d'apprendre la programmation fonctionnelle, sans avoir à apprendre le lambda calcul—mais quel est l'avantage de ne pas apprendre le lambda calcul? C'est pas comme si il faut un gros investissement en temps.

Très probablement, il va vous aider à comprendre la programmation fonctionnelle mieux. Mais même si elle ne le fait pas, il est toujours une bonne chose vaut la peine d'apprendre. Le Y combinator est une chose de beauté.

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