Tchae

Untitled

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