Lambda (anonyymi funktio)

Kohteesta Wikipedia
Loikkaa: valikkoon, hakuun

Lambda eli anonyymi funktio on tietojenkäsittelytieteessä funktio jota ei ole sidottu muuttujaan tai muuhun tunnistajaan. Toisia nimityksiä sille on funktioliteraali, lambda-abtraktio ja lambdalauseke.

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

Lambdat eri ohjelmointikielissä[muokkaa | muokkaa wikitekstiä]

Haskell[muokkaa | muokkaa wikitekstiä]

Haskell käyttää tiivistä syntaksia anononyymeille 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ä]

 (function(foo, bar) { return "Ecmascript".replace(foo, bar); })("Ecma", "Java") //"Javascript"

 [0,1,2,3,4].reduce(function(prev, cur, i, a){return prev+cur;}, 0); //10

Lisp[muokkaa | muokkaa wikitekstiä]

 (lambda (arg) (* arg arg))

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

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

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

Lähteet[muokkaa | muokkaa wikitekstiä]

  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)