Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string.h>
- typedef struct Doublet {void * car ; struct Doublet * cdr ;} * list ; // la structure de base ; list est un pointeur sur un doublet
- #define car(doublet) ((doublet)->car) // macro plutôt que fonction, pour pouvoir écrire car(x)
- #define cdr(doublet) ((doublet)->cdr)
- list cons(void *, const list) ; // prototype de la fonction cons
- int main(int argc, char * argv[]){
- // *********************
- // Construire en C une liste L à quatre éléments dans le code du programme à l'aide de cons.
- // Testez car(L), car(cdr(L), car(cdr(cdr L)), car(cdr(cdr(cdr L))), en affichant leur résultat.
- // *********************
- list L = cons(( void *) 1, cons((void *)2, cons((void *)3, cons((void *)4, NULL))));
- printf("car(L) : %d\n", *(int *) car(L) );
- printf("car(cdr(L)) : %d\n", *(int *) car(cdr(L)) );
- printf("car(cdr(cdr (L))) : %d\n", *(int *) car(cdr(cdr (L))) );
- printf("car(cdr(cdr(cdr (L)))) : %d\n", *(int *) car(cdr(cdr(cdr (L)))));
- return 0 ;
- // Définition de la fonction cons ; elle renvoie un pointeur sur un doublet
- list cons(void * elt, const list L){
- list Cons = malloc(sizeof(struct Doublet)) ; // allocation mémoire d'un doublet
- car(Cons) = elt ;
- cdr(Cons) = L ;
- return Cons ; }
Advertisement
Add Comment
Please, Sign In to add comment