1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| # include <stdio.h>
# include <stdlib.h>
#define nil NULL
typedef struct node { int car ; struct node * cdr ; } node, * list ;
void usage(char *) ;
list cons(int car, list L);
void putlist(list L);
int car(list L);
list cdr(list L);
#define caar(x) car(car(x))
#define cadr(x) car(cdr(x))
int main()
{ list L = nil ;
int k;
for (k = 0 ; k < 4 ; k++)
L = cons(k, L) ;
putlist(L) ;
printf("\n");
printf("car(L) : %d\n", car(L));
putlist(cdr(L));
printf("\n");
printf("car(cdr(L) : %d\n", car(cdr(L)));
printf("car(cdr(cdr L)) : %d\n",car(cdr(cdr (L))));
printf("car(cdr(cdr(cdr L))) : %d\n",car(cdr(cdr(cdr (L)))));
printf("cadr(L) : %d\n", cadr(L));
putlist(caar(L));
//printf("caar(L) : %d\n", caar(L));
return 0 ; }
list cons(int* car, list L)
{ list new = malloc(sizeof(node)) ;
if (! new) usage("cons : manque de RAM") ;
new -> car = car ;
new -> cdr = L ;
return new ; }
void putlist(list L)
{ if (! L) return ;
printf("%d ", L -> car) ;
putlist(L -> cdr) ; }
int car(list L)
{
return L -> car ;
}
list cdr(list L)
{
return L -> cdr;
}
void usage(char * P) { printf("Usage : %s erreur", P), exit(1) ; } |
Partager