Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

When was the last time you posted code

Name: Anonymous 2014-06-25 3:48

to /prog/?

For me, I think it was a week and a half ago. Would someone post a reasonable challenge or something?

Name: L. A. Calculus !jYCj6s4P.g 2014-06-25 9:48

>>4
Y DA FUK WUD U WANNA DO FUNCTIONAL PROGRAMMING IN A PROCEDURAL LANGUAGE?

O WELL. HEREZ MY SOLUTION 4 MAP, FOLD, N FILTER:

#include <stdio.h>
#include <string.h>

size_t map(void *p, size_t n, size_t size, int fn(void *, void *), void *arg)
{
unsigned char *bp;
size_t i, j;

bp = p;
for (i = j = 0; i < n; i++)
if (fn(&bp[i * size], arg) == 0)
memcpy(&bp[j++ * size], &bp[i * size], size);
return j;
}

int add(void *val, void *accum)
{
*(int *) accum += *(int *) val;
return 1;
}

int add1(void *val, void *unused)
{
++*(int *) val;
return 1;
}

int print(void *val, void *unused)
{
printf(" %d", *(int *) val);
return 1;
}

int even(void *val, void *unused)
{
return *(int *) val % 2 == 0;
}

int main(void)
{
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
size_t n = sizeof a / sizeof a[0];
int x;

/* map example: add 1 to each element */
map(a, n, sizeof a[0], add1, NULL);

/* filter example: filter even numbers */
n = map(a, n, sizeof a[0], even, NULL);

/* for-each example: print each element */
map(a, n, sizeof a[0], print, NULL);
printf("\n");

/* fold example: sum elements */
x = 0;
map(a, n, sizeof a[0], add, &x);
printf("%d\n", x);

return 0;
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List