web-dev-qa-db-fra.com

Qu'est-ce qu'une langue lambda?

Je lisais "JavaScript: The Good Parts" et l'auteur mentionne que JavaScript est le premier des langages lambda à être lancé. 

Les fonctions de JavaScript sont des objets de première classe avec (principalement) une portée lexicale. JavaScript est le premier langue lambda à intégrer le courant dominant. Au fond, JavaScript a plus de points communs avec LISP et Scheme qu'avec Java. C'est LISP dans les vêtements de C. Cela fait que JavaScript est un langage remarquablement puissant.

Je n'ai pas compris ce qu'est une langue lambda. Quelles sont les propriétés d'un tel langage et en quoi est-il différent des langages tels que Java, C, C++ et Php?

84
sushil bharwani

Je n'ai jamais entendu personne utiliser le terme "langue lambda" et les seules définitions plausibles auxquelles je puisse penser excluraient JavaScript comme "la première".

Cela dit, je suppose qu'il peut vouloir dire soit:

  • Langages fonctionnels: classe de langages dans lesquels le calcul est (ou peut être) modélisé comme une composition sans état de fonctions (éventuellement d’ordre supérieur). LISP, Scheme, ML, Haskell, etc. sont fréquemment attribués à cette classe, bien que plusieurs d’entre eux soient plus convenablement mélangés paradigme ou langages «fonctionnels optionnels». Javascript contient sans doute les fonctionnalités nécessaires pour rendre possible un "style fonctionnel" de programmation.
  • Langages qui permettent la création de fonctions anonymes (en utilisant la syntaxe function en JavaScript; ceci est écrit lambda dans de nombreuses langues, donc éventuellement "langues lambda".

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

Edit: regardé le résultat de Google Livres --- "premier à devenir grand public"; bien, c'est discutable. J'avais avancé que le LISP était à un moment donné au moins raisonnablement dominant. C'est un point juste cependant, la sémantique de JavaScript est directement inspirée de Scheme et elle a certainement atteint un public plus large que tout autre langage pouvant faire de même.

36
Derrick Turk

Un langage lambda, en termes simples, est un langage qui permet de transmettre une fonction à une autre fonction, la fonction étant traitée comme une autre variable. En outre, vous devriez pouvoir définir cette fonction pour qu'elle soit transmise anonymement (ou en ligne). PHP 5.3 a ajouté le support pour les fonctions lambda. JavaScript était-il la première langue dominante? LISP a été largement utilisé dans les contextes éducatifs avant JavaScript et 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;}

// 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 un pointeur sur des fonctions, mais vous ne pouvez pas le définir en ligne de manière anonyme.

En Java (avant la version 8), pour obtenir le même effet, vous devez transmettre un objet qui implémente une interface, qui peut en fait être défini de manière anonyme en ligne.

47
Juan Mendes

J'ai vu un lambda défini comme une fonction anonyme et comme une référence à une fonction. Javascript supporte les deux:

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

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

C’est là que JS tire beaucoup de puissance et de souplesse. Java supporte le premier dans une certaine mesure (implémentations d'interface anonyme), mais pas le dernier - voir ci-dessous la mise à jour pour Java 8.

Il m'est difficile de savoir lequel (ou les deux) est la définition appropriée d'un lambda.

JS n'est certainement pas la première langue à prendre en charge ces fonctionnalités. En partant de mémoire, je pense que c’est en Smalltalk que les férus de langue s’empressent de lamenter pour soutenir les lambda.

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

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

Mettre à jour

Java, à partir de 8 ans, est maintenant officiellement un langage Lambda.

Vous pouvez maintenant utiliser la syntaxe suivante:

MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));

Code Source

4
mtyson

Il se réfère à Lambda calcul .

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 lambda calcul non typé comme source d'inspiration pour la programmation fonctionnelle, en particulier LISP, et les lambda calcul typés servant de base aux systèmes de types modernes.

4
BenoitParis

Dans le cours ouvert du MIT intitulé Structure et interprétation des programmes informatiques, un livre de Hal Abelson, Jerry Sussman et Julie Sussman. Ils discutent de Scheme, qui est un dialecte du LISP, et expliquent ici une explication très détaillée et claire de ce que lambda est, Scheme LISP et des langues en général. Je vous recommande vivement de le consulter si vous souhaitez avoir une compréhension très claire et profonde de la programmation informatique. Pour vous expliquer, cela prendrait trois fois plus de temps que si vous y alliez et lisiez simplement le livre ou regardiez les tutoriels, ce qui l'explique parfaitement, c'est du génie. 

Javascript est principalement basé sur le langage Scheme et sur son père, le LISP, et en outre, il a pris sa structure lamda et a été intégré au système.

1
Max

De wikipedia: Dans les langages de programmation tels que LISP et Python, lambda est un opérateur utilisé pour désigner des fonctions anonymes ou des fermetures, suivant l’utilisation du lambda calcul. Un exemple de cette utilisation de lambda en langage Python est cette section de code informatique qui trie une liste alphabétiquement par le dernier caractère de chaque entrée:

>>> list = ['woman', 'man', 'horse', 'boat', 'plane', 'dog']
>>> sorted(list, key=lambda Word: Word[-1])
['horse', 'plane', 'dog', 'woman', 'man', 'boat']

* In the C# programming language a lambda expression is an anonymous function that can contain expressions and statements
0
r3nrut
  • JavaScript permet de définir une fonction anonyme qui n'est pas liée à un identifiant. Cette fonction est également connue sous le nom d'abstraction Lambda et, depuis que JS le prend en charge, est connue sous le nom de langage Lambda.

  • Propriétés: Cette fonction est nécessaire en cas d'exécution immédiate d'une fonction ou pour une utilisation à court terme, lorsqu'il n'y a aucune signification à donner un nom à une fonction.

  • Il diffère des langages tels que Java, C, C++ et PHP car dans JS Anonymous, les fonctions sont utilisées pour Closure et Currying.

0
MERLIN THOMAS