J'imagine qu'il s'agit que vous avez maintenant à devoir traiter des listes de listes.
Dans votre exemple, le membre "car" est un entier, mais vous avez maintenant besoin qu'il puisse être un entier ou (un pointeur vers) une liste. Donc si j'ai bien compris/inféré votre énoncé:
Je vous conseillerais, dans un premier temps, de remplacer votre entier par une nouvelle structure --appellons là par exemple "value_t"—qui contiendrait une union des types "int" et "node" et un tag pour discriminer l'union.
Ensuite j'écrirais des fonctions "inline" ayant les signatures: value_t* car(node*) et node*cdr(node*).
Enfin je me rendrais compte que pour utiliser vos définitions de caar/cadr j'ai besoin d'unifier mes types node et value_t pour ne plus n'avoir qu'un seul type de donnée. Je changerais la définitions de mes fonctions d'accès comme suit: value_t* car(value_t*); value_t* cdr(value_t*). Et je modifierais leur implémentation pour gérer les différents cas de l'union, idem pour putlist. Elles seront maintenant imbricables...
PS: c'est un peu dommage que vous n'ayez pas fait cette réflexion vous même... Votre "je bloque c'est tout", je l''interprète par "j'ai envie qu'on me donne la solution tout cuit", il aurait été plus intéressant pour vous de nous montrer spécifiquement sur quoi vous bloquer (i.e. une erreure de compilation, un code complet et pas juste des extraits dont on ne comprend pas s'ils viennent de votre énoncé ou d'un de vos camarade...). Sur ce je vous souhaite bon courage et n'hésitez pas à poser une question au cas où vous trouveriez mes explications peu claires!
[^] # Re: liste de liste
Posté par benja . En réponse au message liste de liste. Évalué à 2.
J'imagine qu'il s'agit que vous avez maintenant à devoir traiter des listes de listes.
Dans votre exemple, le membre "car" est un entier, mais vous avez maintenant besoin qu'il puisse être un entier ou (un pointeur vers) une liste. Donc si j'ai bien compris/inféré votre énoncé:
Je vous conseillerais, dans un premier temps, de remplacer votre entier par une nouvelle structure --appellons là par exemple "value_t"—qui contiendrait une union des types "int" et "node" et un tag pour discriminer l'union.
Ensuite j'écrirais des fonctions "inline" ayant les signatures: value_t* car(node*) et node*cdr(node*).
Enfin je me rendrais compte que pour utiliser vos définitions de caar/cadr j'ai besoin d'unifier mes types node et value_t pour ne plus n'avoir qu'un seul type de donnée. Je changerais la définitions de mes fonctions d'accès comme suit: value_t* car(value_t*); value_t* cdr(value_t*). Et je modifierais leur implémentation pour gérer les différents cas de l'union, idem pour putlist. Elles seront maintenant imbricables...
PS: c'est un peu dommage que vous n'ayez pas fait cette réflexion vous même... Votre "je bloque c'est tout", je l''interprète par "j'ai envie qu'on me donne la solution tout cuit", il aurait été plus intéressant pour vous de nous montrer spécifiquement sur quoi vous bloquer (i.e. une erreure de compilation, un code complet et pas juste des extraits dont on ne comprend pas s'ils viennent de votre énoncé ou d'un de vos camarade...). Sur ce je vous souhaite bon courage et n'hésitez pas à poser une question au cas où vous trouveriez mes explications peu claires!