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

Common Lisp in C

Name: Anonymous 2012-10-03 17:23

Lets write Common Lisp functions in generic C code.


/* (map #'func array) => map(array,length_of_array,sizeof(array),function_pointer) */
void *map(void *base,size_t len,size_t elemnsize, void (*func)(void *,void *)) {
  void *b = malloc(elemsize*len);
  size_t i;
  for(i=0;i<len;++i){
    func(b+(elemsize*1),base);
    base += elemsize;
  }
  return b;
}

Name: Anonymous 2012-10-04 15:06


#include <stdio.h>
#include <stdlib.h>

#define lambda(l_ret_type, l_arguments, l_body)         \
  ({                                                    \
    l_ret_type l_anonymous_functions_name l_arguments   \
      l_body                                            \
    &l_anonymous_functions_name;                        \
  })

#define MAX_LSTS 1024
#define MAX_ELTS 1024
int _Pool[MAX_LSTS][MAX_ELTS+1];
int _PoolP=0;

int *newList(int N) {
  _Pool[_PoolP%MAX_LSTS][MAX_ELTS] = N;
  return _Pool[_PoolP++%MAX_LSTS];
}

int len(int *Xs) {return Xs[MAX_ELTS];}

int *rng(int S, int E) {
  int I = S<E ? 1 : -1;
  int *Xs = newList(abs(E-S)+1);
  int *P = Xs;
  int *T = P + len(Xs);
  while (P<T) {
    *P++ = S;
    S += I;
  }
  return Xs;
}

int *each(int *Xs, void (*f)(int)) {
  int I, N = len(Xs);
  for (I=0; I<N; I++) f(Xs[I]);
  return Xs;
}

int main(int argc, char **argv) {
  each(rng(5,55), lambda(void,(int V), {printf("%d\n", V);}));
  return 0;
}

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