Co to jest kod „lambda”?

17

Ostatnio słyszałem, jak ludzie mówią o kodzie „lambda”. Nigdy wcześniej nie słyszałem o tym zdaniu. Co to znaczy?

Oliver Moran
źródło
Tak się stało. Kilka razy. Próbowałem nawet kilka razy - ale niestety bez powodzenia. Może będziesz miał więcej szczęścia? Dzięki tym, którzy odpisali.
Oliver Moran
10
@Oliver, częścią zadawania pytań tutaj jest również pokazanie, co zrobiłeś, aby odpowiedzieć na to pytanie, aby ludzie nie próbowali tych samych rzeczy, które zrobiłeś i utknęli. Określenie miejsca, w którym znalazłeś linki do Wikipedii lub Google, w których się pomyliłeś, zapewnia lepszą odpowiedź na twoje pytanie, ponieważ na poziomie ogólnym odpowiedź może nie być taka, jakiej chciałeś, ponieważ dotyczy tylko tego, czego wcześniej nie otrzymałeś. Zastanów się, co spróbujesz napisać ktoś inny i zobacz, co się stanie. Możesz być zaskoczony, jakie wyniki.
JB King
7
Wydaje mi się, że można z tego zrobić rap - „mój kod, więc lambda”. Ale nie mogę rytmizować, to jest nic warte. :-)
Paul Nathan
1
@JB King + JB King - Dziękujemy za uprzejme komentarze. Mówiąc ogólnie, to, co oboje mówicie, jest rozsądne. Jednak w zależności od zapytania czasami krótkie i otwarte pytanie lepiej wywołuje rodzaje odpowiedzi, których nie ma nigdzie indziej. Moje pytanie wywołało dokładnie takie odpowiedzi, jakich szukałem. Wyraziłem to tak, żeby to zrobiło. Mam nadzieję, że poniższe odpowiedzi przydadzą się innym osobom z tym samym pytaniem. To ironiczne, że jestem zadowolony z odpowiedzi w tym samym czasie, że niektórzy są rozczarowani pytaniem.
Oliver Moran
2
@Paul Nathan - jesteś kodem, więc lambda, najwyraźniej nigdy nie planowałeś pracy z żadnym standardem; jest bardziej szorstki niż szlifierka!
glenatron

Odpowiedzi:

20

Wyrażenia lambda są albo abstrakcją (czasami nazywaną funkcją anonimową), aplikacją lub zmienną (większość języków dodaje również stałe do tej listy). Terminy lambda niekoniecznie są funkcjami i niekoniecznie są przekazywane jako parametry, chociaż jest to powszechna praktyka.

Typowy przykład wyrażeń lambda w C #

Na przykład:

List<int> items = new List<int>();
items.add(1);
items.add(2);
items.add(1);
items.add(3);

int CountofOnes = items.FindAll(item => item == 1).Count();

Console.Out.WriteLine(CountofOnes);

wyświetli: 2

W tym kodzie przekazuję konstrukcję lambda do FindAllfunkcji obiektu .NET List.

items.FindAll(item => item == 1)

Lambda w tym wywołaniu wykonuje proste równanie i zwraca wartość logiczną, mówiącą, FindAllco robić.

Timothy Groote
źródło
2
To nie do końca prawda. Wyrażenie lambda jest albo abstrakcją (niekoniecznie małą ), aplikacją lub zmienną (większość języków dodaje również stałe do tej listy). Terminy lambda niekoniecznie są funkcjami i niekoniecznie są przekazywane jako parametry.
SK-logika
Masz rację, poprawię odpowiedź dla zachowania przejrzystości.
Timothy Groote,
3
Proszę podać przykład wyrażenia lambda, które nie jest funkcją.
Ingo
1
@Ingo, to oczywiście terminologia rachunku lambda. en.wikipedia.org/wiki/Lambda_calculus#Lambda_terms
SK-logic
1
@ SK-logic Wolę patrzeć inaczej. Języki takie jak Haskell i C # umożliwiają powiązanie funkcji z nazwami w konstrukcji let (rec) lub w postaci „super-kombinatory” (tj. Powiązania funkcji najwyższego poziomu), co widzę jako poważną różnicę, którą robię nie czuję, że właściwe jest zastosowanie tutaj oryginalnej terminologii lambda. Ponieważ nic takiego nie jest możliwe w LC (dlatego właśnie potrzebujesz kombinatora Y do rekurencji). Wynik ((\ xy -> x) a) i (const a) w Haskell jest taki sam i oba są aplikacjami, ale jako pierwszy użyłbym terminu „lambda application”.
Ingo
3

Anonimowa (nienazwana) funkcja lub obiekt, który zwykle jest wstawiany jako argument do innej funkcji.

Dlatego przestrzeń nazw jest mniej zanieczyszczona.

Blagovest Buyukliev
źródło
1

Lambda zwykle odnosi się do wyrażenia funkcyjnego w funkcjonalnym kontekście programowania.

To jest wyrażenie lambda w pythonie:

lambda x: x + 1

Reprezentuje funkcję, która zwiększa swój parametr xo 1.

Pablo Santa Cruz
źródło