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

Pages: 1-

closures in c

Name: Anonymous 2012-01-25 2:28

thou shalt always accompany a call back with a void* argument that may be used arbitrarily by the caller:


void kind_values(struct relation* self, char* key, void(*call_back)(void* userdata, char* value), void* userdata) {
  for(char* value matching key in self) {
    call_back(userdata, value);
  }
}


and thou shalt have the satisfaction of passing a closure through the stack.

Name: Anonymous 2012-01-25 2:32

(defun nigger (nig)
  (lambda (nigga)
    (return nigga))
  nig)


Your code is ass.

Name: Anonymous 2012-01-25 2:44

>>2

I find your choices of variables names to be offensive, allow me to optimize it:


(defun f (x) x) ;; lisp

(define (f x) x) ;; scheme

function (x) return x end -- lua

function (x) { return x; } -- javascript

template <typename T> // seeples
T f(T x) {
  return x;
}

class IdentityFunction<T> { // Java
  public T f(T x) {
    return T;
  }
}

{} %% postscript

sub { return shift; } ## perl

#define DEFINE_IDENTITY_FUNCTION(TYPE,TYPENAME) TYPENAME f_##TYPE(TYPENAME x) { return x; }

DEFINE_IDENTITY_FUNCTION(char,char)
DEFINE_IDENTITY_FUNCTION(int,int)
DEFINE_IDENTITY_FUNCTION(float,float)
DEFINE_IDENTITY_FUNCTION(double,double)
DEFINE_IDENTITY_FUNCTION(long,long)
DEFINE_IDENTITY_FUNCTION(long_long,long long)
// see

Name: Anonymous 2012-01-25 6:06

              JJJJJJJJJJJEEEEEEEEEEEEEEEEEEEEEEWWWWWWWW                           WWWWWWWW   SSSSSSSSSSSSSSS
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::W SS:::::::::::::::S
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::WS:::::SSSSSS::::::S
              JJ:::::::JJEE::::::EEEEEEEEE::::EW::::::W                           W::::::WS:::::S     SSSSSSS
                J:::::J    E:::::E       EEEEEE W:::::W           WWWWW           W:::::W S:::::S          
                J:::::J    E:::::E               W:::::W         W:::::W         W:::::W  S:::::S          
                J:::::J    E::::::EEEEEEEEEE      W:::::W       W:::::::W       W:::::W    S::::SSSS       
                J:::::j    E:::::::::::::::E       W:::::W     W:::::::::W     W:::::W      SS::::::SSSSS  
                J:::::J    E:::::::::::::::E        W:::::W   W:::::W:::::W   W:::::W         SSS::::::::SS
    JJJJJJJ     J:::::J    E::::::EEEEEEEEEE         W:::::W W:::::W W:::::W W:::::W             SSSSSS::::S
    J:::::J     J:::::J    E:::::E                    W:::::W:::::W   W:::::W:::::W                   S:::::S
    J::::::J   J::::::J    E:::::E       EEEEEE        W:::::::::W     W:::::::::W                    S:::::S
    J:::::::JJJ:::::::J  EE::::::EEEEEEEE:::::E         W:::::::W       W:::::::W         SSSSSSS     S:::::S
     JJ:::::::::::::JJ   E::::::::::::::::::::E          W:::::W         W:::::W          S::::::SSSSSS:::::S
       JJ:::::::::JJ     E::::::::::::::::::::E           W:::W           W:::W           S:::::::::::::::SS
         JJJJJJJJJ       EEEEEEEEEEEEEEEEEEEEEE            WWW             WWW             SSSSSSSSSSSSSSS 

Name: Anonymous 2012-01-25 6:14

              JJJJJJJJJJJEEEEEEEEEEEEEEEEEEEEEEWWWWWWWW                           WWWWWWWW   SSSSSSSSSSSSSSS
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::W SS:::::::::::::::S
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::WS:::::SSSSSS::::::S
              JJ:::::::JJEE::::::EEEEEEEEE::::EW::::::W                           W::::::WS:::::S     SSSSSSS
                J:::::J    E:::::E       EEEEEE W:::::W           WWWWW           W:::::W S:::::S          
                J:::::J    E:::::E               W:::::W         W:::::W         W:::::W  S:::::S          
                J:::::J    E::::::EEEEEEEEEE      W:::::W       W:::::::W       W:::::W    S::::SSSS       
                J:::::j    E:::::::::::::::E       W:::::W     W:::::::::W     W:::::W      SS::::::SSSSS  
                J:::::J    E:::::::::::::::E        W:::::W   W:::::W:::::W   W:::::W         SSS::::::::SS
    JJJJJJJ     J:::::J    E::::::EEEEEEEEEE         W:::::W W:::::W W:::::W W:::::W             SSSSSS::::S
    J:::::J     J:::::J    E:::::E                    W:::::W:::::W   W:::::W:::::W                   S:::::S
    J::::::J   J::::::J    E:::::E       EEEEEE        W:::::::::W     W:::::::::W                    S:::::S
    J:::::::JJJ:::::::J  EE::::::EEEEEEEE:::::E         W:::::::W       W:::::::W         SSSSSSS     S:::::S
     JJ:::::::::::::JJ   E::::::::::::::::::::E          W:::::W         W:::::W          S::::::SSSSSS:::::S
       JJ:::::::::JJ     E::::::::::::::::::::E           W:::W           W:::W           S:::::::::::::::SS
         JJJJJJJJJ       EEEEEEEEEEEEEEEEEEEEEE            WWW             WWW             SSSSSSSSSSSSSSS 

Name: Anonymous 2012-01-25 6:14

              JJJJJJJJJJJEEEEEEEEEEEEEEEEEEEEEEWWWWWWWW                           WWWWWWWW   SSSSSSSSSSSSSSS
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::W SS:::::::::::::::S
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::WS:::::SSSSSS::::::S
              JJ:::::::JJEE::::::EEEEEEEEE::::EW::::::W                           W::::::WS:::::S     SSSSSSS
                J:::::J    E:::::E       EEEEEE W:::::W           WWWWW           W:::::W S:::::S          
                J:::::J    E:::::E               W:::::W         W:::::W         W:::::W  S:::::S          
                J:::::J    E::::::EEEEEEEEEE      W:::::W       W:::::::W       W:::::W    S::::SSSS       
                J:::::j    E:::::::::::::::E       W:::::W     W:::::::::W     W:::::W      SS::::::SSSSS  
                J:::::J    E:::::::::::::::E        W:::::W   W:::::W:::::W   W:::::W         SSS::::::::SS
    JJJJJJJ     J:::::J    E::::::EEEEEEEEEE         W:::::W W:::::W W:::::W W:::::W             SSSSSS::::S
    J:::::J     J:::::J    E:::::E                    W:::::W:::::W   W:::::W:::::W                   S:::::S
    J::::::J   J::::::J    E:::::E       EEEEEE        W:::::::::W     W:::::::::W                    S:::::S
    J:::::::JJJ:::::::J  EE::::::EEEEEEEE:::::E         W:::::::W       W:::::::W         SSSSSSS     S:::::S
     JJ:::::::::::::JJ   E::::::::::::::::::::E          W:::::W         W:::::W          S::::::SSSSSS:::::S
       JJ:::::::::JJ     E::::::::::::::::::::E           W:::W           W:::W           S:::::::::::::::SS
         JJJJJJJJJ       EEEEEEEEEEEEEEEEEEEEEE            WWW             WWW             SSSSSSSSSSSSSSS 

Name: Anonymous 2012-01-25 6:14

              JJJJJJJJJJJEEEEEEEEEEEEEEEEEEEEEEWWWWWWWW                           WWWWWWWW   SSSSSSSSSSSSSSS
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::W SS:::::::::::::::S
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::WS:::::SSSSSS::::::S
              JJ:::::::JJEE::::::EEEEEEEEE::::EW::::::W                           W::::::WS:::::S     SSSSSSS
                J:::::J    E:::::E       EEEEEE W:::::W           WWWWW           W:::::W S:::::S          
                J:::::J    E:::::E               W:::::W         W:::::W         W:::::W  S:::::S          
                J:::::J    E::::::EEEEEEEEEE      W:::::W       W:::::::W       W:::::W    S::::SSSS       
                J:::::j    E:::::::::::::::E       W:::::W     W:::::::::W     W:::::W      SS::::::SSSSS  
                J:::::J    E:::::::::::::::E        W:::::W   W:::::W:::::W   W:::::W         SSS::::::::SS
    JJJJJJJ     J:::::J    E::::::EEEEEEEEEE         W:::::W W:::::W W:::::W W:::::W             SSSSSS::::S
    J:::::J     J:::::J    E:::::E                    W:::::W:::::W   W:::::W:::::W                   S:::::S
    J::::::J   J::::::J    E:::::E       EEEEEE        W:::::::::W     W:::::::::W                    S:::::S
    J:::::::JJJ:::::::J  EE::::::EEEEEEEE:::::E         W:::::::W       W:::::::W         SSSSSSS     S:::::S
     JJ:::::::::::::JJ   E::::::::::::::::::::E          W:::::W         W:::::W          S::::::SSSSSS:::::S
       JJ:::::::::JJ     E::::::::::::::::::::E           W:::W           W:::W           S:::::::::::::::SS
         JJJJJJJJJ       EEEEEEEEEEEEEEEEEEEEEE            WWW             WWW             SSSSSSSSSSSSSSS 

Name: Anonymous 2012-01-25 6:15

              JJJJJJJJJJJEEEEEEEEEEEEEEEEEEEEEEWWWWWWWW                           WWWWWWWW   SSSSSSSSSSSSSSS
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::W SS:::::::::::::::S
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::WS:::::SSSSSS::::::S
              JJ:::::::JJEE::::::EEEEEEEEE::::EW::::::W                           W::::::WS:::::S     SSSSSSS
                J:::::J    E:::::E       EEEEEE W:::::W           WWWWW           W:::::W S:::::S          
                J:::::J    E:::::E               W:::::W         W:::::W         W:::::W  S:::::S          
                J:::::J    E::::::EEEEEEEEEE      W:::::W       W:::::::W       W:::::W    S::::SSSS       
                J:::::j    E:::::::::::::::E       W:::::W     W:::::::::W     W:::::W      SS::::::SSSSS  
                J:::::J    E:::::::::::::::E        W:::::W   W:::::W:::::W   W:::::W         SSS::::::::SS
    JJJJJJJ     J:::::J    E::::::EEEEEEEEEE         W:::::W W:::::W W:::::W W:::::W             SSSSSS::::S
    J:::::J     J:::::J    E:::::E                    W:::::W:::::W   W:::::W:::::W                   S:::::S
    J::::::J   J::::::J    E:::::E       EEEEEE        W:::::::::W     W:::::::::W                    S:::::S
    J:::::::JJJ:::::::J  EE::::::EEEEEEEE:::::E         W:::::::W       W:::::::W         SSSSSSS     S:::::S
     JJ:::::::::::::JJ   E::::::::::::::::::::E          W:::::W         W:::::W          S::::::SSSSSS:::::S
       JJ:::::::::JJ     E::::::::::::::::::::E           W:::W           W:::W           S:::::::::::::::SS
         JJJJJJJJJ       EEEEEEEEEEEEEEEEEEEEEE            WWW             WWW             SSSSSSSSSSSSSSS 

Name: Anonymous 2012-01-25 6:15

              JJJJJJJJJJJEEEEEEEEEEEEEEEEEEEEEEWWWWWWWW                           WWWWWWWW   SSSSSSSSSSSSSSS
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::W SS:::::::::::::::S
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::WS:::::SSSSSS::::::S
              JJ:::::::JJEE::::::EEEEEEEEE::::EW::::::W                           W::::::WS:::::S     SSSSSSS
                J:::::J    E:::::E       EEEEEE W:::::W           WWWWW           W:::::W S:::::S          
                J:::::J    E:::::E               W:::::W         W:::::W         W:::::W  S:::::S          
                J:::::J    E::::::EEEEEEEEEE      W:::::W       W:::::::W       W:::::W    S::::SSSS       
                J:::::j    E:::::::::::::::E       W:::::W     W:::::::::W     W:::::W      SS::::::SSSSS  
                J:::::J    E:::::::::::::::E        W:::::W   W:::::W:::::W   W:::::W         SSS::::::::SS
    JJJJJJJ     J:::::J    E::::::EEEEEEEEEE         W:::::W W:::::W W:::::W W:::::W             SSSSSS::::S
    J:::::J     J:::::J    E:::::E                    W:::::W:::::W   W:::::W:::::W                   S:::::S
    J::::::J   J::::::J    E:::::E       EEEEEE        W:::::::::W     W:::::::::W                    S:::::S
    J:::::::JJJ:::::::J  EE::::::EEEEEEEE:::::E         W:::::::W       W:::::::W         SSSSSSS     S:::::S
     JJ:::::::::::::JJ   E::::::::::::::::::::E          W:::::W         W:::::W          S::::::SSSSSS:::::S
       JJ:::::::::JJ     E::::::::::::::::::::E           W:::W           W:::W           S:::::::::::::::SS
         JJJJJJJJJ       EEEEEEEEEEEEEEEEEEEEEE            WWW             WWW             SSSSSSSSSSSSSSS 

Name: Anonymous 2012-01-25 6:15

              JJJJJJJJJJJEEEEEEEEEEEEEEEEEEEEEEWWWWWWWW                           WWWWWWWW   SSSSSSSSSSSSSSS
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::W SS:::::::::::::::S
              J:::::::::JE::::::::::::::::::::EW::::::W                           W::::::WS:::::SSSSSS::::::S
              JJ:::::::JJEE::::::EEEEEEEEE::::EW::::::W                           W::::::WS:::::S     SSSSSSS
                J:::::J    E:::::E       EEEEEE W:::::W           WWWWW           W:::::W S:::::S          
                J:::::J    E:::::E               W:::::W         W:::::W         W:::::W  S:::::S          
                J:::::J    E::::::EEEEEEEEEE      W:::::W       W:::::::W       W:::::W    S::::SSSS       
                J:::::j    E:::::::::::::::E       W:::::W     W:::::::::W     W:::::W      SS::::::SSSSS  
                J:::::J    E:::::::::::::::E        W:::::W   W:::::W:::::W   W:::::W         SSS::::::::SS
    JJJJJJJ     J:::::J    E::::::EEEEEEEEEE         W:::::W W:::::W W:::::W W:::::W             SSSSSS::::S
    J:::::J     J:::::J    E:::::E                    W:::::W:::::W   W:::::W:::::W                   S:::::S
    J::::::J   J::::::J    E:::::E       EEEEEE        W:::::::::W     W:::::::::W                    S:::::S
    J:::::::JJJ:::::::J  EE::::::EEEEEEEE:::::E         W:::::::W       W:::::::W         SSSSSSS     S:::::S
     JJ:::::::::::::JJ   E::::::::::::::::::::E          W:::::W         W:::::W          S::::::SSSSSS:::::S
       JJ:::::::::JJ     E::::::::::::::::::::E           W:::W           W:::W           S:::::::::::::::SS
         JJJJJJJJJ       EEEEEEEEEEEEEEEEEEEEEE            WWW             WWW             SSSSSSSSSSSSSSS 

Name: Anonymous 2012-01-25 11:14

>>4-10 lolu mad

Name: Anonymous 2012-01-25 15:59

>>1
closures in c
for(char* value matching key in self)
What, is this some new shit in C11 or something?

Name: Anonymous 2012-01-25 22:25

>>12

naw, but I didn't feel like getting explicit about the data structure being traversed there.

Name: Anonymous 2012-01-25 23:57

>>12

heres a better example


#include <stdio.h>
#include <malloc.h>
#include <assert.h>

struct cons {
  void* car;
  struct cons* cdr;
};

struct cons* cons(void* car, struct cons* cdr) {
  struct cons* a = malloc(sizeof(struct cons));
  assert(a);
  a->car = car;
  a->cdr = cdr;
  return a;
}

int* Int(int n) {
  int* a = malloc(sizeof(int));
  assert(a);
  *a = n;
  return a;
}

void free_conses(struct cons* list) {
  while(list) {
    struct cons* next = list->cdr;
    free(list);
    list = next;
  }
}

typedef void* (*oper1_t)(void* userdata, void* arg1);
struct cons* map1(oper1_t operator, void* userdata, struct cons* list1) {
  if(!list1) return NULL;
  struct cons* head;
  struct cons* tail;
  head = tail = cons(operator(userdata, list1->car), NULL);
  list1 = list1->cdr;
  while(list1) {
    struct cons* new_tail = cons(operator(userdata, list1->car), NULL);
    tail->cdr = new_tail;
    tail = new_tail;
    list1 = list1->cdr;
  }
  return head;
}

void forall(oper1_t operator, void* userdata, struct cons* list) {
  while(list) {
    operator(userdata, list->car);
    list = list->cdr;
  }
}

struct cons* range(int i, int j) {
  struct cons* head = NULL;
  while(i <= j) {
    head = cons(Int(j), head);
    --j;
  }
  return head;
}

void* array_indexer(void** array, int* index) {
  return array[*index];
}

void* print_string(FILE* file, char* string) {
  fprintf(file, "%s\n", string);
  return NULL;
}

struct closure1 {
  oper1_t fn;
  void* userdata;
};

void* call_closure1(struct closure1* this, void* arg1) {
  return this->fn(this->userdata, arg1);
}

void* oper1_free(void* userdata, void* arg1) {
  free(arg1);
  return NULL;
}

struct composition {
  oper1_t f;
  void* f_userdata;
  oper1_t g;
  void* g_userdata;
};

void* call_composition(struct composition* this, void* arg1) {
  return this->f(this->f_userdata, this->g(this->g_userdata, arg1));
}

int main(int argc, char** argv) {
  printf("Printing argv using (forall print_string (map (lambda (i) (vector-get argv i)) (range 1 (- argc 1))))\n");
  struct cons* nums = range(0, argc - 1);
  struct cons* args = map1((oper1_t)array_indexer, argv, nums);
  forall((oper1_t)print_string, stdout, args);


  printf("Printing argv using (forall (compose print_string (lambda (i) (vector-get argv i))) (range 1 (- argc 1)))\n");
  struct composition print_string_argv = {
    (oper1_t)print_string, // f
    stdout,
    (oper1_t)array_indexer, // g
    argv,
  };
  forall((oper1_t)call_composition, &print_string_argv, nums);

  forall(oper1_free, NULL, nums); // frees the integers
  free_conses(args);
  free_conses(nums);
  return 0;
}

/* example usage:

$ a.out hey there man
Printing argv using (forall print_string (map (lambda (i) (vector-get argv i)) (range 1 (- argc 1))))
a.out
hey
there
man
Printing argv using (forall (compose print_string (lambda (i) (vector-get argv i))) (range 1 (- argc 1)))
a.out
hey
there
man
$

*/

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