Qualcuno può spiegarmi espressioni lambda & per cosa possono essere utilizzati. Ho cercato su google & un'idea approssimativa. la maggior parte degli esempi fornisce il codice C#. Che ne dici delle espressioni lambda nella semplice vecchia C ...?Lambda Expressions
risposta
In realtà ci sono due cose chiamate "espressioni lambda", che sono piuttosto liberamente collegati:
lambda espressioni sono parte fondamentale della lambda calculus e sono strettamente correlati alla funzionalità programmazione
In lingue imperative, le espressioni lambda sono in genere sinonimi di metodi anonimi. In C#, ad esempio, è possibile passare espressione lambda come argomento (ovvero l'espressione stessa, non solo il suo risultato.):
C#:
someCollection.Apply (x => 2*x); // apply expression to every object in collection
// equivalent to
someCollection.Apply (delegate (int x) { return 2 * X; });
Detto questo, C non supporta metodi anonimi. È possibile, tuttavia, i puntatori a funzione utilizzo per ottenere risultati simili:
int multiply (int x)
{
return 2 * x;
}
...
collection_apply (some_collection, multiply);
Presumibilmente, Apple ha aggiunto qualcosa a LLVM per aggiungere un tipo di espressione lambda a C (blocchi di codice o sth). Tuttavia, non è uno standard ufficiale e ho dimenticato i termini esatti di ricerca. – ndim
I blocchi di codice fanno parte di Objective-C (che Apple utilizza per la maggior parte delle sue librerie di livello superiore), che è C con una sintassi OO aggiunta. –
C non supporta le espressioni Lamba ... se sai perl, consiglio vivamente il libro "ordine superiore perl", che vi darà una ottima introduzione a tutti i tipi di tecniche di programmazione funzionale in un ambiente familiare (se si conosce perl) e pratico.
La risposta di el.pescado è giusta, ma l'esempio che fornisce fornisce un semplice aggiramento, utilizzando un puntatore a funzione. Molti usi delle funzioni lambda non possono essere risolti con i puntatori di funzione di c.
Dire che si scrive queste funzioni in 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
Quelli sono tutti abbastanza facile da capire. Ora si supponga di voler scrivere una funzione che prende y come input e restituisce un puntatore alla funzione Multiply_y():
(int)(int) *Make_Multiplier(int y) { return(Multiply_y); }
Dove "Multiply_y" è una funzione creata dinamicamente della forma di Multiply_1, Multiply_2, ecc Le lingue con funzioni lambda di prima classe possono farlo.
- 1. Combine Lambda Expressions
- 2. GroupBy in lambda expressions
- 3. Java Lambda expressions
- 4. Java 8 refactoring lambda expressions
- 5. Lambda Expressions and Memory Management
- 6. Lambda Expressions in modelli T4
- 7. Utilizzo di alberi Lambda Expressions con IEnumerable
- 8. multipla clausole Where in Lambda Expressions
- 9. In C# ci sono oggetti Lambda Expressions?
- 10. Expressions vs Lambdas
- 11. Utilizzo di GroupBy, Count e Sum in LINQ Lambda Expressions
- 12. Utilizzando GroupBy e Max in LINQ Lambda Expressions
- 13. Quali sono i vantaggi di Lambda Expressions per sistemi multicore?
- 14. C# Expressions - FatalExecutionEngineError
- 15. Parse XPath Expressions
- 16. Qualcuno ha ancora effettuato il backport delle Lambda Expressions su Java 7?
- 17. Il modo migliore per passare un elenco di nomi di proprietà come Lambda Expressions
- 18. PostgreSQL COPY FROM STDIN Expressions
- 19. Come compongo Linq Expressions esistenti
- 20. Cos'è (lambda lambda lambda)?
- 21. ASP.Net: Eval Format for money expressions
- 22. Chiamare metodi statici da Spring Security Expressions?
- 23. consentendo l'espressione lambda
- 24. android Studio: lambda espressioni non sono supportati in -source 1.7 (uso -source 8 o superiore per consentire le espressioni lambda)
- 25. espressioni Lambda in android
- 26. Differenza nelle prestazioni lambda?
- 27. Espressione Lambda contro affermazione Lambda
- 28. Come impostare il valore della proprietà utilizzando Expressions?
- 29. Perl Regular Expressions per abbinare un hash MD5?
- 30. JPQL Constructor Expressions, come recuperare l'entità principale in 'select new'
Di seguito el.pescado di seguito, poiché C è decisamente una creazione imperativa del linguaggio del metodo anonimo (funzione) non eseguita. La C più vicina alle funzioni anonime è attraverso i puntatori di funzioni come il puntatore della funzione comparatore passato a 'qsort (3)' (ma non sono realmente anonimi in quanto devono essere definiti e quindi denominati). – msw