Bonjour,

Je ne comprends pas comment résoudre ce problème.

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.

La première question : le code marche bien mais dès que j'ajoute caar rien ne marche plus :s

Définir en C, à l'aide de #define, caar et cadr. Construisez une liste pour les tester et afficher leur résultat.



Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
# 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);
 
 
int main() 
 
{	list L = nil ;
	int k;
		for (k = 0 ; k < 4 ; k++)
			L = cons(k, L) ;
			putlist(L) ;
			printf("\n");
			printf("car : %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)))));
 
	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) ; }


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
langgg.c: In function ‘main’:
langgg.c:31:4: warning: passing argument 1 of ‘car’ makes pointer from integer without a cast [enabled by default]
    putlist(caar(L));
    ^
langgg.c:10:5: note: expected ‘list’ but argument is of type ‘intint car(list L);
     ^
langgg.c:31:4: warning: passing argument 1 of ‘putlist’ makes pointer from integer without a cast [enabled by default]
    putlist(caar(L));
    ^
langgg.c:9:6: note: expected ‘list’ but argument is of type ‘intvoid putlist(list L);
Merci de m'aider