Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //gcc 5.4.0
- // Example with lambda (needs --std=gnu99)
- #include <stdio.h>
- float l[]={ 3.141, 6.02, 42.0, 0.7 };
- #define lambda(lambda$_ret, lambda$_args, lambda$_body) \
- ({ \
- lambda$_ret lambda$__anon$ lambda$_args \
- {return lambda$_body;} \
- &lambda$__anon$; \
- })
- #define len(x) (sizeof(x)/sizeof(x[0]))
- typedef void* auto_;
- float apply(float (*fn)(float inp), float* l, int n)
- {
- int i;
- float avg=0.0;
- printf("n=%i\n", n);
- for (i=0;i<n;i++)
- {
- avg+=fn(l[i]);
- printf("Running sum=%f\n", avg);
- }
- return avg/n;
- }
- int main(int argc, char *argv[])
- {
- auto_ fn = lambda(float,(float x),2*x);
- printf("%f\n",apply(fn, l, len(l)));
- printf("%f\n",apply(lambda(float,(float x),2*x), l, len(l)));
- printf("%f\n",apply(lambda(float,(float x),x/3.0), l, len(l)));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement