91 votes

Qu'est-ce qu'une langue lambda?

J'ai lu "JavaScript: Les Bonnes Parties" et l'auteur mentionne que le JavaScript est le premier de la lambda langues à être lancé.

JavaScript les fonctions sont des objets de première classe avec (surtout) la portée lexicale. JavaScript est le premier lambda langue à remonter le courant. Au fond, JavaScript a plus en commun avec Lisp et Scheme qu'avec Java. Il est de Lisp C est les vêtements. Cela rend le JavaScript est remarquablement puissant de la langue.

Je n'ai pas ce qu'est un lambda de la langue. Quelles sont les propriétés d'une langue et comment est-il différent de langues comme Java, C, C++ et Php?

48voto

Juan Mendes Points 31678

Un lambda de la langue, en termes simples, est un langage qui permet de passer d'une fonction à une autre fonction, où la fonction est traitée comme n'importe quelle autre variable. Aussi, vous devriez être en mesure de définir cette fonction pour être transmis de façon anonyme (ou en ligne). PHP 5.3 ajout du support pour les lambda fonctions. A JavaScript la première langue dominante? Lisp a été largement utilisé dans les milieux éducatifs avant de JavaScript et aussi dans la personnalisation de notre bien-aimé Emacs http://www.gnu.org/software/emacs/manual/html_node/eintr/

Voici un exemple

function applyOperation(a, b, operation) {
  return operation(a,b);
}

function add(a,b) { return a+ b; }
function subtract(a,b) {return a - b;}

and can be called like
applyOperation(1,2, add);
applyOperation(4,5, subtract);
// anonymous inline function
applyOperation(4,7, function(a,b) {return a * b})

Comment est-il différent de C? En C, vous pouvez passer le pointeur de fonctions, mais vous ne pouvez pas le définir inline de façon anonyme.

En java, pour obtenir le même effet, vous devez passer un objet qui implémente une interface, qui peut être défini de manière anonyme en ligne.

39voto

Derrick Turk Points 2693

Je n'ai jamais entendu quelqu'un utiliser le terme "lambda langue", et la seule plausible définitions je pense, serait d'exclure du JavaScript comme "la première."

Cela dit, je soupçonne qu'il peut signifier soit:

  • Les langages fonctionnels: une classe de langues dans lequel le calcul est (ou peut être) modélisé comme un apatride composition de (éventuellement d'ordre supérieur). LISP, Scheme, ML, Haskell, etc. sont fréquemment attribués à cette classe, bien que plusieurs de ces derniers sont plus correctement mélangés paradigme ou "fonctionnelle en option" langues. Javascript sans doute contient les fonctionnalités nécessaires pour faire un "style fonctionnel" de programmation possible.
  • Les langues qui permettent la création de fonctions anonymes (à l'aide de l' function de la syntaxe de JavaScript; ce qui est écrit lambda dans de nombreuses langues, d'où peut-être "lambda langues."

Les deux usages sont dérivés de l'utilisation de la lettre grecque lambda pour désigner la fonction d'abstraction dans le lambda calcul, le modèle de calcul élaboré par Alonzo Church et sur lequel la programmation fonctionnelle est basée.

Edit: regardé Google Books result---"d'abord à remonter le courant"; eh bien, c'est défendable. Je l'avais mis de l'avant que LISP était à un point au moins raisonnablement grand public. C'est un point bien que, JavaScript sémantique est directement inspirée par le Schéma, et il a certainement atteint un public plus large que n'importe quel autre langage qui permet de faire des réclamations similaires.

4voto

BenoitParis Points 956

Il fait référence au calcul Lambda .

Le lambda calcul, également appelé λ-calcul, est un système formel de définition de fonction, d'application de fonction et de récursivité. [...]

[...] avec le calcul lambda non typé étant l'inspiration originale pour la programmation fonctionnelle, en particulier Lisp, et les calculs lambda typés servant de base aux systèmes de types modernes.

4voto

mtyson Points 1552

J'ai vu un lambda définie comme une fonction anonyme et comme une référence à une fonction. Javascript prend en charge à la fois:

setTimeout(function(){ /* an anonymous function */ }, 100)

var f = function(){ /* function ref */ }

C'est là que JS reçoit beaucoup de sa puissance et de flexibilité. Java prend en charge la première, dans une certaine mesure (anonyme, implémentations d'interface), mais pas de celui-ci.

Son clair pour moi qui (ou les deux) de ces est la bonne définition d'un lambda.

JS n'est certainement pas le premier langage de prendre en charge ces fonctionnalités. Allant de la mémoire, je pense que son smalltalk que les passionnés de langues toujours de s'extasier sur l'appui des lambdas.

BTW: En Java, une classe anonyme est généralement utilisé pour passer dans une définition de classe à la volée pour un argument (beaucoup utilisé dans les swing). Quelque chose comme ceci (de mémoire, pas compilé):

someGuiContainer(new WidgetInterface()
      {
           public void importantMethodToDefine(){
             // Handle having the method called in my special widget way
           }
        }
)

1voto

Max Points 26

Dans MIT du cours ouvert-vaisselle appelé la structure et l'interprétation des programmes d'ordinateur par le livre de Hal Abelson, Jerry Sussman et Julie Sussman. Ils discutent de Régime, qui est un dialecte de LISP et là, ils expliquent de façon très détaillée et une explication claire de ce que lambda est et d'un Système de LISP et les langues en général. Je vous recommande vivement de le regarder si vous souhaitez vraiment une compréhension claire et profonde de la Programmation Informatique. Pour vous expliquer, il faudra trois fois plus de temps que si vous y êtes allé et il suffit de lire le livre ou de regarder les tutoriels qui explique parfaitement, c'est génial.

Javascript est principalement basée sur le langage de Schéma et c'est Lisp père, et en plus il a pris son lamda structure et est allé courant avec elle.

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