Lambda (anonyymi funktio)

Wikipediasta
Siirry navigaatioon Siirry hakuun
Tulostettavaa versiota ei enää tueta ja siinä voi olla renderöintivirheitä. Päivitä selaimesi kirjanmerkit ja käytä selaimen tavallista tulostustoimintoa sen sijaan.

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ä

C++

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

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

JavaScriptissä

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

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

Lisp

Lispissä

 (lambda (arg) (* arg arg))

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

Python

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

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

  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)