True Lambda in C

15 views
Skip to first unread message

Facundo Viale

unread,
Oct 17, 2010, 7:54:46 PM10/17/10
to c-t...@googlegroups.com
 Buenas a todos! Hoy encontré algo de lo que estaba buscando desde hace mucho tiempo, creo que es parte me siento medio decepcionado de mi porque lo busque durante tiempo pero nunca lo encontré y tuve que optar por soluciones medias chotas.

 Para aquellos que cursaron paradigmas seguramente conocen lo que es una función lambda el cual es un concepto de la programación funcional. En las presentaciones nosotros mencionamos como hacer esto usando la extensión de gcc que nos deja hacer inner functions, el problema es que si bien nos simplificaba algunas cosas aun teníamos que generar funciones nombradas y justamente el tema de las funciones annonimas es que no tengamos que hacer eso. Aun así las inner functions nos permiten modularizar mas nuestras librerias y crear pequeñas funciones auxiliares que no hacen a la logica de nuestro TAD/Libreria.

 True Lambda?

 Hay 2 formas de manejar esto ( ACLARACIÓN: Esto es una extensión propia de GCC, por lo cual en otros compiladores no va a funcionar ):

A como lo mostramos en las presentación:

void parent() {
int child() {
int n=17; 
n+=25;
return n;
}
printf("%d\n",child());
}

Usando la extensión para expresiones Lambda:

void parent() {
int a = ({ int n=17; n+=25; n; });
printf("%d\n",a);
}

Acá como se puede ver el compilador es lo suficientemente inteligente como para determinar que el valor de la ultima expresión es el retorno de la función, en este caso n;


El ultimo caso es este:

void parent() {
int (*func)(int);
func = ({ int $(int base){ return base+25;} $; });
printf("%d\n", func(17) );
}


Espero que esto les resulte útil.

Fuentes:


Saludos!
Reply all
Reply to author
Forward
0 new messages