Tchae

Untitled

Feb 3rd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.33 KB | None | 0 0
  1. #include <string.h>
  2.  
  3. typedef struct Doublet {void * car ; struct Doublet * cdr ;} * list ;       // la structure de base ; list est un pointeur sur un doublet
  4.  
  5. #define car(doublet) ((doublet)->car)        // macro plutôt que fonction, pour pouvoir écrire car(x)
  6. #define cdr(doublet) ((doublet)->cdr)
  7.  
  8. list cons(void *, const list) ;              // prototype de la fonction cons
  9.  
  10.  
  11. int main(int argc, char * argv[]){
  12. // *********************
  13.     // Construire en C une liste L à quatre éléments dans le code du programme à l'aide de cons.
  14.     // Testez car(L), car(cdr(L), car(cdr(cdr L)), car(cdr(cdr(cdr L))), en affichant leur résultat.
  15. // *********************
  16.     list L = cons(( void *) 1, cons((void *)2, cons((void *)3, cons((void *)4, NULL))));
  17.  
  18.     printf("car(L) : %d\n", *(int *) car(L) );
  19.     printf("car(cdr(L)) : %d\n", *(int *) car(cdr(L)) );
  20.     printf("car(cdr(cdr (L))) : %d\n", *(int *) car(cdr(cdr (L))) );
  21.     printf("car(cdr(cdr(cdr (L)))) : %d\n", *(int *) car(cdr(cdr(cdr (L)))));
  22.  
  23.     return 0 ;
  24.  
  25. // Définition de la fonction cons ; elle renvoie un pointeur sur un doublet
  26. list cons(void * elt, const list L){
  27.     list Cons = malloc(sizeof(struct Doublet)) ;                                    // allocation mémoire d'un doublet
  28.     car(Cons) = elt ;
  29.     cdr(Cons) = L ;
  30.     return Cons ; }
Advertisement
Add Comment
Please, Sign In to add comment