Czy ktoś może mi wyjaśnić wyrażenia lambda &, do czego mogą one być używane. Mam googleed na to & mieć przybliżony pomysł. większość przykładów podaje kod C#. A co z wyrażeń lambda w zwykłym starym C ...?Wyrażenia Lambda
Odpowiedz
Istnieje rzeczywiście dwie rzeczy zwane „wyrażenia lambda”, które są dość luźno powiązane:
wyrażeniaLambda są fundamentalną częścią lambda calculus i są ściśle powiązane z funkcjonalną programowanie
W językach imperatywnych wyrażenia lambda są zwykle synonimami metod anonimowych. W języku C#, na przykład można przekazać wyrażenie lambda jako argument (czyli takie samo wyrażenie, a nie tylko jej wynik.)
C#:
someCollection.Apply (x => 2*x); // apply expression to every object in collection
// equivalent to
someCollection.Apply (delegate (int x) { return 2 * X; });
Mimo, że C nie obsługuje metody anonimowe. Można jednak, wskaźniki funkcyjne użycie do osiągnięcia podobnych rezultatów:
int multiply (int x)
{
return 2 * x;
}
...
collection_apply (some_collection, multiply);
Podobno Apple dodał coś do LLVM, aby dodać pewien rodzaj wyrażenia lambda do C (bloki kodu lub cokolwiek). Nie jest to jednak oficjalny standard i zapomniałem dokładnych terminów wyszukiwania. – ndim
Bloki kodu są częścią Objective-C (której Apple używa w większości swoich bibliotek wyższego poziomu), która jest C z dodaną składnią OO. –
C nie obsługuje wyrażeń Lamba ... jeśli wiesz, Perl, bardzo polecam książki „Perl wyższego rzędu”, który daje świetne wprowadzenie do wszystkich technik programowania funkcjonalnego w znanym (jeśli wiesz, perl) i praktycznym otoczeniu.
Odpowiedź el.pescado jest słuszna, ale dostarczony przez niego przykład ma łatwą pracę przy użyciu wskaźnika funkcji. Wiele zastosowań funkcji lambda nie może być rozwiązanych za pomocą wskaźników funkcji c.
Say piszesz te funkcje w C:
int Multiply_1(int x) { return(x*1); }
int Multiply_2(int x) { return(x*2); }
int Multiply_3(int x) { return(x*3); }
int Multiply_4(int x) { return(x*4); }
etcetera, to infinity
Ci są dość łatwe do zrozumienia. Załóżmy teraz, że chcesz napisać funkcję, która pobiera y jako wejście i zwraca wskaźnik do funkcji Multiply_y():
(int)(int) *Make_Multiplier(int y) { return(Multiply_y); }
Gdzie „Multiply_y” jest dynamicznie utworzona funkcja postaci Multiply_1, Multiply_2, etc Języki posiadające pierwszorzędne funkcje lambda mogą to zrobić.
- 1. Wyrażenia VB.NET Lambda
- 2. Niepoprawne wcięcie Wyrażenia Lambda
- 3. połączeń wewnątrz lambda wyrażenia
- 4. W klauzuli wyrażenia lambda
- 5. Wymień parametru lambda wyrażenia
- 6. umożliwienie wyrażenia lambda
- 7. Wyrażenia kontra Lambda
- 8. możliwe rekursywne wyrażenia lambda?
- 9. Wyrażenia Lambda: zachowanie kompilatora
- 10. Wyrażenia Java Lambda
- 11. Konwersja drzewa Lambda do wyrażenia
- 12. Jak porównać dwa wyrażenia lambda?
- 13. Wyrażenia Lambda dla klas abstrakcyjnych
- 14. żywotność wyrażenia lambda w rdzy
- 15. Związek Wybierz używając wyrażenia lambda
- 16. Lambda Parametr nie w zakresie - podczas budowania binarnego wyrażenia lambda
- 17. ThreadPool.QueueUserWorkItem z wyrażenia lambda i metody anonimowej
- 18. Wyrażenia lambda i funkcje wyższego rzędu
- 19. Nazwa właściwości do wyrażenia lambda C#
- 20. Wyrażenia lambda Haskella i proste formuły logiczne
- 21. Pobierz klasę otaczającą wyrażenia lambda Java
- 22. Pobieranie nazwy zdarzenia z wyrażenia lambda
- 23. Prawidłowo obsługi możliwe System.NullReferenceException w lambda wyrażenia
- 24. LINQ do SQL: Ponowne użycie wyrażenia lambda
- 25. Kotlin wyrażenia lambda jako opcjonalny parametr
- 26. Jak użyć wyrażenia lambda w ramach oddzielnych
- 27. Konwersja Array iteracji do wyrażenia lambda
- 28. napisać metodę, która akceptuje wyrażenia lambda
- 29. W jaki sposób wyrażenia lambda działają wewnętrznie?
- 30. Wyrażenia lambda w bezpośrednim oknie dla VS2015
Po el.pescado poniżej, ponieważ C jest bardzo definitywnym imperatywem tworzenia anonimowej metody (funkcji) nie jest wykonywane. Najbliższe C pojawia się w anonimowych funkcjach poprzez wskaźniki funkcyjne, takie jak wskaźnik funkcji komparatora przekazywany do 'qsort (3)' (ale nie są tak naprawdę anonimowe, ponieważ muszą być zdefiniowane i nazwane). – msw