Lambda (anonyymi funktio)

Wikipediasta
Siirry navigaatioon Siirry hakuun

Lambda eli anonyymi funktio on tietojenkäsittelytieteessä funktio, jota ei ole sidottu muuttujaan tai muuhun tunnisteeseen. Muita nimityksiä sille ovat funktioliteraali, lambda-abstraktio ja lambdalauseke.

Lambda saa nimensä Alonzo Churchin lambdakalkyylistä, matemaattisen logiikan mallista, jossa kaikki funktiot ovat anonyymejä.[1]

Anonyymit funktiot eri ohjelmointikielissä

[muokkaa | muokkaa wikitekstiä]

C++ tukee C++14-versiosta lähtien lambda-operaattoreita ilman konkreettisia tyyppejä auto-määrityksellä.

auto lambda = [](auto x, auto y) {return x + y;};

Haskell käyttää tiivistä syntaksia anonyymeille funktioille:

 \x -> x * x

 map (\x -> x * x) [1, 2, 3, 4, 5] -- palauttaa [1, 4, 9, 16, 25]

Seuraavat funktiomäärittelyt vastaavat toisiaan täysin:

 f x y = x + y
 f x = \y -> x + y
 f = \x y -> x + y

JavaScriptissä

 ((foo, bar) => "Ecmascript".replace(foo, bar))("Ecma", "Java") //"Javascript"

 [0,1,2,3,4].reduce((acc, cur) => acc + cur, 0); //10

Lispissä

 (lambda (arg) (* arg arg))

 ((lambda (x y) (* x y)) 5 10) ;50

Pythonissa anonyymia funktiota voi käyttää esimerkiksi listan manipulointiin seuraavasti:

 lista = [1, 2, 3, 4, 5]
 potenssit = list(map(lambda x: x * x, lista)) #[1, 4, 9, 16, 25]

Ruby 1.9-versioista eteenpäin lambdoja voi luoda kahdella tavalla.

 joku_lambda = lambda { |x| x**x } #1.8 lähtien
 
 toinen_lambda = -> (y){ y+y*y } #'->' kreikan λ-kirjaimesta (lambda)
 
 ei_lambda = proc { || ... } #vanhentunut
  1. David Flanagan, Yukihiro Matsumoto: ”6”, The Ruby programming language, s. 193-196. O'Reilly Media, Inc., 2008. ISBN 0596516177 Teoksen verkkoversio (viitattu 2.12.2010). (englanniksi)