Wat is een lambda-taal?

Ik las “JavaScript: The Good Parts” en de auteur vermeldt dat JavaScript de eerste van de lambda-talen is die wordt gelanceerd.

De functies van JavaScript zijn eersteklas objecten met (meestal) lexicale scoping. JavaScript is de eerste lambda-taaldie mainstream wordt. Diep van binnen heeft JavaScript meer gemeen met Lisp en Scheme dan met Java. Het is Lisp in C’s kleding. Dit maakt JavaScript een opmerkelijk krachtige taal.

Ik heb niet begrepen wat een lambda-taal is. Wat zijn de eigenschappen van zo’n taal en hoe verschilt deze van talen als Java, C, C++ en Php?


Antwoord 1, autoriteit 100%

Een lambda-taal, in eenvoudige bewoordingen, is een taal die het mogelijk maakt een functie door te geven aan een andere functie, waarbij de functie wordt behandeld als elke andere variabele. U moet ook kunnen definiëren dat deze functie anoniem (of inline) moet worden doorgegeven. PHP 5.3 heeft ondersteuning toegevoegd voor lambda-functies. Was JavaScript de eerste reguliere taal? Lisp is veel gebruikt in educatieve instellingen vóór JavaScript en ook bij het aanpassen van onze geliefde Emacs http ://www.gnu.org/software/emacs/manual/html_node/eintr/

Hier is een voorbeeld

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})

Hoe verschilt het van C? In C kun je een aanwijzer doorgeven aan functies, maar je kunt deze niet anoniem inline definiëren.

In Java (vóór versie 8) moet u, om hetzelfde effect te bereiken, een object doorgeven dat een interface implementeert, die feitelijk anoniem inline kan worden gedefinieerd.


Antwoord 2, autoriteit 83%

Ik heb nog nooit iemand de term ‘lambda-taal’ horen gebruiken, en de enige plausibele definitie die ik kan bedenken, zou JavaScript uitsluiten als ‘de eerste’.

Dat gezegd hebbende, vermoed ik dat hij een van beide bedoelt:

  • Functionele talen: een klasse van talen waarin berekening is (of kan worden) gemodelleerd als een toestandloze samenstelling van (mogelijk hogere orde) functies. LISP, Scheme, ML, Haskell, enz. worden vaak toegeschreven aan deze klasse, hoewel verschillende van deze meer correct gemengde paradigma’s of “functionele optionele” talen zijn. Javascript bevat aantoonbaar de nodige functies om een ​​”functionele stijl” van programmeren mogelijk te maken.
  • Talen waarin anonieme functies kunnen worden gemaakt (met behulp van de function-syntaxis in JavaScript; dit is in veel talen lambdageschreven, vandaar mogelijk “lambda-talen.”
  • li>

Beide gebruiken zijn afgeleid van het gebruik van de Griekse letter lambda om functie-abstractie aan te duiden in de lambda-calculus, het rekenmodel dat is bedacht door Alonzo Church en waarop functioneel programmeren is gebaseerd.

Bewerken: keek naar het resultaat van Google Boeken — “eerste die mainstream wordt”; tja, daar valt over te twisten. Ik had naar voren gebracht dat LISP op een gegeven moment op zijn minst redelijk mainstream was. Het is echter een terecht punt, de semantiek van JavaScript is rechtstreeks geïnspireerd door Scheme en het heeft zeker een groter publiek bereikt dan enige andere taal die vergelijkbare beweringen kan doen.


Antwoord 3, autoriteit 8%

Hij verwijst naar Lambda-calculus.

Lambda-calculus, ook geschreven als λ-calculus, is een formeel systeem voor functiedefinitie, functietoepassing en recursie.
[…]

[…] waarbij ongetypeerde lambda-calculus de oorspronkelijke inspiratiebron is voor functioneel programmeren, in het bijzonder Lisp, en getypte lambda-calculus als basis voor moderne typesystemen.


Antwoord 4, autoriteit 8%

Ik heb een lambda gezien die is gedefinieerd als een anonieme functie en als een verwijzing naar een functie. Javascript ondersteunt beide:

setTimeout(function(){ /* an anonymous function */ }, 100)
var f = function(){ /* function ref */ }

Hier haalt JS veel van zijn kracht en flexibiliteit vandaan. Java ondersteunt de eerste tot op zekere hoogte (anonieme interface-implementaties), maar niet de laatste– zie hieronder voor update voor Java 8.

Het is mij onduidelijk welke (of beide) van deze de juiste definitie van een lambda is.

JS is zeker niet de eerste taal die deze functies ondersteunt. Afgaande op het geheugen, denk ik dat taalliefhebbers altijd enthousiast zijn over het ondersteunen van lambda’s.

BTW: In Java wordt meestal een anonieme klasse gebruikt om een ​​klassedefinitie on-the-fly door te geven voor een argument (veel gebruikt in de swing). Iets als dit (uit het geheugen, niet gecompileerd):

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

Bijwerken

Java, vanaf 8, is nu officieel een Lambda-taal.

U kunt nu de volgende syntaxis gebruiken:

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

Codebron


Antwoord 5, autoriteit 2%

In MIT’s open courseware genaamd structuur en interpretatie van computerprogramma’s, een boek van Hal Abelson, Jerry Sussman en Julie Sussman. Ze bespreken Schema, wat een dialect is van LISP en daar leggen ze een zeer gedetailleerde en duidelijke uitleg uit over wat lambda is en Schema LISP en talen in het algemeen. Ik raad je ten zeerste aan om het te bekijken als je een heel duidelijk en diep begrip van computerprogrammering wilt hebben. Je uitleggen zou drie keer zoveel tijd kosten als wanneer je daarheen zou gaan en alleen het boek zou lezen of de tutorials bekijken die het perfect uitleggen, het is geniaal.

Javascript is voornamelijk gebaseerd op het taalschema en het is Lisp-vader, en bovendien nam het zijn lamda-structuur en ging ermee mainstream.


Antwoord 6

Van wikipedia:
In programmeertalen zoals Lisp en Python is lambda een operator die wordt gebruikt om anonieme functies of sluitingen aan te duiden, na het gebruik van lambda-calculus. Een voorbeeld van dit gebruik van lambda in de Python-taal is dit gedeelte van computercode dat een lijst alfabetisch sorteert op het laatste teken van elk item:

>>> 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

Antwoord 7

  • JavaScript maakt het mogelijk om een ​​anonieme functie te definiëren, een functie die niet aan een identifier is gebonden. Een dergelijke functie staat ook bekend als Lambda-abstractie en aangezien JS dit ondersteunt, staat het bekend als Lambda-taal.

  • Eigenschappen: deze functie is nodig in geval van onmiddellijke uitvoering van een functie of voor gebruik op korte termijn, waarbij het geen betekenis heeft om een ​​functie een naam te geven.

  • Het is anders dan talen als Java, C, C++ en PHP, aangezien in JS Anonieme functies worden gebruikt voor Closure en Currying.

Other episodes