• # liste de liste

    Posté par . En réponse au message liste de liste. Évalué à 1. Dernière modification le 06 janvier 2016 à 17:56.

    Oui j'ai compris toute les notions de lisp et pour ma fonction j'ai essayé ça

    #include <stdio.h>
    #include <stdlib.h>
    #define nil NULL
    typedef struct node { int car ; struct node * cdr ; } node, * list ;
    typedef struct node2 { struct node *Liste ; struct node2 * cdr2 ; } node2, * liste ;
    void usage(char *) ;
    list cons(int car, list L);
    void putlist(list L);
    list car(liste L);
    int car2(list L); 
    list cdr(list L);
    liste cons2(struct node * Liste, liste L);
    void putlist2(liste L);
    liste cdr2(struct node2 * Liste);
    #define caar(x) car2(car(x)) 
    #define cadr(x) car(cdr(x))
    int main() 
    { list L;
     //liste j;
     int k;
     for (k = 0 ; k < 4 ; k++)
     L = cons(k, L);
     putlist(L) ;
     //putlist(caar(j));
     /*printf("\n");
     putlist(car(j));
     //printf("car(L) : %d\n", car(L));
     printf("\ncdr(j) :");
     putlist2(cdr2(j));
     printf("\ncaar(L) : %d\n", caar(j));
     //putlist(caar(j));
     printf("\n");
     printf("cadr(L) : %d\n", cadr(L));
     putlist2(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 (list)new ; }
    liste cons2(struct node * Liste, liste L) 
    { liste nouveau = malloc(sizeof(node2)) ;
     if (! nouveau) usage("cons : manque de RAM") ; 
     nouveau -> Liste = Liste ;
     nouveau -> cdr2 = L ;
     return nouveau ; }
    void putlist(list L)
    { if (! L) return ; 
     printf("%d ", L -> car) ;
     putlist(L -> cdr) ; }
    void putlist2(liste L)
    { if (! L) return ; 
     putlist(L -> Liste) ;
     putlist2(L -> cdr2) ; 
     }
    list car(liste L)
    {
    return L -> Liste ;
    }
    int car2(list L)
    {
    return L -> car ;
    }
    list cdr(list L)
    {
     return L -> cdr;
    }
    liste cdr2(struct node2 * Liste)
    {
     return Liste -> cdr2; 
    }
    void usage(char * P) { printf("Usage : %s erreur", P), exit(1) ; }

    mais mon problème c'est dans main je ne vois pas comment crée une liste de liste.