Question

Je suis étudiant à l'université, et nous étudions actuellement Lambda Calcul. Cependant, j'ai encore du mal à comprendre exactement pourquoi cela est utile pour moi. Je me rends compte si vous faites des charges de la programmation fonctionnelle, il peut être utile, mais je pense qu'il est pas vraiment nécessaire pour apprendre la programmation fonctionnelle, que pensez-vous?

En second lieu, est-il utile pour Lambda Calcul dans le domaine des sciences informatiques, mais en dehors des langages de programmation fonctionnelle?

Était-ce utile?

La solution

Le calcul lambda est fondamentale dans la logique, la théorie des catégories, théorie des types, vérification formelle, ... En gros, rien à voir avec la programmation sémantique du langage et la logique formelle. Il est un formalisme fondamental que les gens qui travaillent dans ces domaines ne questionnent même pas le bénéfice de celui-ci.

Je pense qu'il est extrêmement utile pour comprendre la programmation fonctionnelle, car il vous donne l'essence de la programmation fonctionnelle. Fonctions, l'application, la substitution. Sur la base de ce que vous pouvez construire vos compétences dans le raisonnement sur les programmes fonctionnels et des transformations d'entre eux. Fonctions d'ordre supérieur sont un jeu d'enfant.

Bien sûr, vous pouvez apprendre la programmation fonctionnelle sans calcul lambda, mais vous ne comprendrait jamais vraiment la programmation fonctionnelle sans elle.

Autres conseils

Vous demandez une en dehors de l'application de la science informatique et de la logique. Cela est facile à trouver, par exemple dans la topologie algébrique, il est pratique d'avoir une catégorie fermée cartésienne des espaces, voir catégorie pratique d'espaces topologiques sur Nlab. La langue officielle correspondant aux catégories fermées cartésiennes est précisément le $ \ lambda $ -calcul. Permettez-moi d'illustrer par un exemple très simple comment cela est très pratique.

Tout d'abord, comme un exercice de warm-up, quelqu'un suppose que vous demande si la fonction $ f: \ mathbb {R} \ to \ mathbb {R} $ défini par $ f (x) = x ^ 2 e ^ x + \ log (1 + x ^ 2) $ est dérivable. Vous n'avez pas fait de prouver qu'il est, vous observez juste qu'il est une composition de fonctions différentiables donc différentiables. En d'autres termes, vous avez fait une conclusion facile basée sur la forme de la définition.

Maintenant, pour l'exemple réel. quelqu'un vous demande si Supposons que la fonction $ f: \ mathbb {R} \ to \ mathbb {R} $ défini par $$ f (x) = \ left (. \ Lambda f: \ mathcal {C} (\ mathbb {R}) \ int _ {- x} ^ {x} f (1 + t 2) dt \ right) ( \ lambda y:. \ mathbb {R} \ max (x, \ sin (y + 3)) $$ est continue. Encore une fois, nous pouvons immédiatement répondre "oui" parce que la fonction est définie en utilisant la $ \ lambda $ -calcul et à partir de cartes continues $ \ max de $, $ \ int $, $ \ sin $, etc.

Diverses extensions du $ \ lambda $ -calcul permettent de faire la même chose dans d'autres domaines. Par exemple, parce qu'un lisse topos est une catégorie fermée cartésienne, une carte qui est définie en utilisant la $ \ lambda $ -calcul, à partir de dérivés et la structure cyclique des nombres réels (et vous pouvez jeter dans la fonction exponentielle si vous le souhaitez) est lisse automatiquement. (En fait, l'objectif principal des topos lisses est l'existence de infinitésimales nilpotentes qui vous permettent de dire de façon significative des choses comme « nous disect un disque en triangles isocèles infiniment minces ».)

Une façon de regarder $ \ lambda $ -calcul est un simple et laconique modèle des programmes parametersing. Vous le code dans presque tous les paramétriser langage de programmation qui a des fonctions, des procédures ou des méthodes, et dans toute langue qui a des modules ou qui vous permet de types de paramétrer. Paramétrisation est une forme de réutilisation. Parce que $ \ lambda $ -calcul est si simple, les points communs entre plusieurs langages de programmation qui vous permettent de code Paramétrer, viennent au premier plan particulièrement bien.

Il est certainement possible d'être un très bon programmeur sans savoir environ $ \ lambda $ -calcul, mais vous manquez sur quelque chose de beau qui est aussi très utile.

greffes des capacités de programmation fonctionnelle Microsoft LINQ (Language Integrated Query) dans les langues de procédure. Il fait un usage intensif et très directe de $ \ lambda $ -calcul aux dépendances et démêlent parties de l'arbre Séparer les d'expression qui peut être déléguée au serveur de base de données. Ceci est une application très pratique avec une grande valeur commerciale.

J'ai écrit une petite application commerciale en utilisant un langage fonctionnel et je peux vous assurer que tout bien utile aux universitaires et aux chercheurs, ils sont commercialement moins utiles que leurs cousins ??de procédure. En réalité, il est une question de chevaux pour les cours, et le plus pratique de tous est une langue qui peut être procédurale ou fonctionnelle selon les besoins. En conséquence, les capacités fonctionnelles qui ont été introduites (en C #) à l'appui de LINQ, tels que $ \ lambda $ -expressions, obtenir beaucoup d'utilisation en dehors du contexte des requêtes de base de données.

Alors, quand vous vous trouvez enfin obligé de faire des choses Icky parce que vous souhaitez payer, vous pouvez trouver $ \ lambda $ -calcul plus utile que prévu, même si vous presque certainement pas utiliser un langage fonctionnel.

Sans le savoir plus à ce sujet, j'entends que les linguistes utilisent le calcul lambda.

http://www.sfu.ca/~jeffpell/Ling406/LambdaAbstractionOH. pdf , https://files.nyu.edu/cb125/public/Lambda/

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top