Lambda (anonyymi funktio)
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++
[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
[muokkaa | muokkaa wikitekstiä]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
JavaScript
[muokkaa | muokkaa wikitekstiä] ((foo, bar) => "Ecmascript".replace(foo, bar))("Ecma", "Java") //"Javascript"
[0,1,2,3,4].reduce((acc, cur) => acc + cur, 0); //10
Lisp
[muokkaa | muokkaa wikitekstiä] (lambda (arg) (* arg arg))
((lambda (x y) (* x y)) 5 10) ;50
Python
[muokkaa | muokkaa wikitekstiä]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
[muokkaa | muokkaa wikitekstiä]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
Lähteet
[muokkaa | muokkaa wikitekstiä]- ↑ 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)