IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

Tri de l'arbre en CLisp sur liste de doublets


Sujet :

Lisp

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2022
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Tri de l'arbre en CLisp sur liste de doublets
    Bonjour à tous,

    Je cherche à concevoir une fonction qui modifierait directement une liste pour en trier les différents éléments à partir du cdr de chacun.

    Concrètement ma liste ressemblerait à ((elt1 . 15) (elt2 . 3) (elt3 . 10) (elt4 . 25) (elt5 . 8)) et je veux obtenir ((elt2 . 3) (elt5 . 8) (elt3 . 10) etc.)

    J'ai utilisé le tri de l'arbre et fait ceci en tâchant de respecter au maximum les contraintes, mais j'ai toujours le sentiment que ce n'est pas la meilleure solution. Je ne serais pas contre quelques avis ou autres solutions qui n'utiliseraient que les types de branchement et fonctions déjà utilisées ici.

    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
     
     
    (defun tri-liste (liste)
      (setq arbre (list (car liste)))
        (setq arbre (arbrifie (cdr liste) arbre))
        (rplaca liste nil)
        (rplacd liste (cdr (lis-arbre arbre)))
        (nettoie-NIL liste))
     
    (defun lis-arbre (arbre)
      (cond
        ((atom arbre) (list arbre))
        (t (append
            (lis-arbre (cadr arbre))
            (list (car arbre))
            (lis-arbre (caddr arbre))))))
     
    (defun arbrifie (liste arbre)
      (cond
        ((atom liste) arbre)
        ((arbrifie (cdr liste) (ajoute (car liste) arbre)))))
     
    (defun ajoute (element arbre)
      (cond
        ((atom arbre) (list element))
        ((>= (cdr element) (cdar arbre))
         (list (car arbre) (cadr arbre) (ajoute element (caddr arbre))))
        (t (list (car arbre) (ajoute element (cadr arbre)) (caddr arbre)))))
     
    (defun nettoie-NIL (liste)
      (cond
        ((atom liste) nil)
        ((eq (car liste) nil) (nettoie-NIL (cdr liste)))
        (t (cons (car liste) (nettoie-NIL (cdr liste))))))
    Je vous remercie d'avance de votre patience.

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 153
    Points : 276
    Points
    276
    Par défaut
    Si je comprends bien, ça se fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (sort my-list #'< :key #'cdr)
    Il y a juste une petite différence: sort renvoie une nouvelle liste mais détruit son argument en même temps.

    Je n’ai pas lu tout ton code, mais avant de modifier la valeur d’une variable avec setq, il faut la déclarer, par exemple, avec let.

Discussions similaires

  1. IComparer, IComparable et tri sur List<T>
    Par TheCaribouX dans le forum C#
    Réponses: 12
    Dernier message: 12/06/2008, 21h34
  2. Tri sur liste modifiable
    Par JeanMikael dans le forum VBA Access
    Réponses: 9
    Dernier message: 27/09/2007, 11h46
  3. Tri sur liste chainée
    Par SevSof dans le forum C
    Réponses: 16
    Dernier message: 27/05/2007, 00h45
  4. [Fonction]tri sur liste déroulante
    Par maxeur dans le forum IHM
    Réponses: 8
    Dernier message: 16/04/2007, 10h00
  5. Requête, tri sur liste de choix
    Par seb.kepka dans le forum Access
    Réponses: 1
    Dernier message: 15/05/2006, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo