• [^] # Re: Retour papier

    Posté par (site web personnel) . En réponse au message Affichage listes chainées en C. Évalué à 2.

    Le hiatus pour moi: est-ce que car() retourne le Doublet (le nœud de stockage, qui est un élément de la liste), ou bien la valeur elt stockée dans le Doublet.

    Il me semble qu'il devrait retourner la valeur. Donc à ce moment en C tu ne peux plus écrire car(Cons)->elt car tu as déjà directement elt.

    https://www.google.fr/search?q=lisp+car+lang:fr

    Ce qui donnerais

    list cdr(list lst)
    {
    return lst->cdr;
    }
    // int ou autre type stocké comme valeur pour elt - tu peux même en faire
    // un typedef int Atom; et utiliser Atom pour le type des valeurs de elt.
    int car(list lst)
    {
    return lst->elt;
    }

    Tu peux faire ça avec des #define si tu veux.

    En tout cas, tu peux après faire des car(cdr(cdr(lst))). Par contre, à moins que tu n'autorises le stockage de Doublet dans ton elt, tu ne peux pas faire de car(cdr(car(lst))) (ce qui correspondrait à stocker non pas des listes simples d'éléments atomiques, mais des listes de listes... pour créer par exemple des structures en arbres).

    Après, pour ton cons, c'est juste de la création de structure en mémoire, et l'insertion en début de liste (le Doulet créé devient la tête de liste).

    list cons(int elt, const list L)
    {
    Double dbl = malloc(sizeof(struct Doublet));
    dbl->elt = elt; // Stockage de l'élement
    dbl->cdr = L; // Mise en place de la liaison pour la liste
    return (list)dbl;
    }

    Bon, à l'usage tel quel ça promet de jolies fuites mémoires.

    Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN