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 :

opération sur deux listes


Sujet :

Lisp

  1. #1
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut opération sur deux listes
    Bonjour,

    je bloque complètement sur ce petit pb qui paraît pourtant simple... :

    j'ai deux listes et j'aimerais afficher toutes les combinaisons de leurs éléments, comme l'exemple ci-dessous (pour deux listes de trois éléments):
    0 0
    0 1
    0 2
    1 0
    1 1
    1 2
    2 0
    2 1
    2 2

    Merci d'avance à ceux qui prendront le temps de me répondre,

    cordialement.

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 33
    Points : 42
    Points
    42
    Par défaut
    Salut

    De manière itérative

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    (defun combi (lst1 lst2 / old res)
      (while lst1
        (setq old lst2)
        (while lst2
          (setq res (cons (list (car lst1) (car lst2)) res)
    	    lst2 (cdr lst2)
          )
        )
        (setq lst2 old
    	  lst1 (cdr lst1)
        )
      )
      (reverse res)
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (combi '(0 1 2) '(0 1 2))
    @+

  3. #3
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Dans le même esprit mais en utilisant mapc, c'est du emacs lisp, mais c'est facilement transposable dans les autres jargons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (defun combi (lst1 lst2)
      ""
      (mapc (lambda (x)
              (mapc (lambda (y)
                      (message  "%s %s" x y))
                    lst2))
              lst1))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (combi '("asc" 'a 123) '(4 5 6 7) )
    resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    asc 4
    asc 5
    asc 6
    asc 7
    (quote a) 4
    (quote a) 5
    (quote a) 6
    (quote a) 7
    123 4
    123 5
    123 6
    123 7
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  4. #4
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Merci bien pour vos réponses!

    Il existe donc aussi une méthode par récursivité?

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par simnitch Voir le message
    Il existe donc aussi une méthode par récursivité?
    Est-ce pour un exercice?
    As-tu essayé quelque chose?

  6. #6
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Oui, j'ai essayé ceci mais je commence à bien m'embrouiller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     (defun comparaisons (liste1 liste2 &aux (liste3 liste2))
      (cond 
        ((not (atom liste1))
          (cond 
    	((not (atom liste2))
    	(setq res (list (car liste1) (car liste2)))
    	(print res)
    	(comparaisons liste1 (cdr liste2) liste3) ) 
    	(t (comparaisons (cdr liste1) liste3 liste3)) ) ) ) )
    J'ai un message d'erreur que je ne comprends pas puisqu'il y'a toujours trois arguments : "*** - EVAL/APPLY: Trop d'arguments pour COMPARAISONS."

    Merci d'avance.

  7. #7
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    pour le faire de façon recursive il faut garder une copie de la seconde liste.

    Cette copie te permettra de repartir du début de la seconde liste avec le cdr de la première liste une fois qu'elle aura été parcourue avec le car de la première.
    Super claire, non?

    Personnellement j'y suis arrivé comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    (defun combi (l1 l2 &optional l2-store) 
       ""
       (unless l2-store           ;; Pour le premier appel on stocke l2 dans l2-store.
           (setq l2-store l2))  
       ;; Je te laisse compléter les blanc vu que c'est visiblement un exercice de cours...
    )

    Le resultat que j'ai obtenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (combi '(1 2 3) '(4 5 6))
    1 4
    1 5
    1 6
    2 4
    2 5
    2 6
    3 4
    3 5
    3 6
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  8. #8
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    hmm, en fait c'est exactement ce que j'ai fait dans ma fonction sauf qu'au lieu de mettre &optional je me suis trompé et j'ai mis &aux, mais en changeant ça, ça marche.
    Je comprends pas pq d'ailleurs, il n'y a normalement pas de différences entre les deux si?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Filtrage sur deux liste a la fois [Ocaml]
    Par pijora dans le forum Caml
    Réponses: 2
    Dernier message: 17/11/2013, 21h10
  2. recherchev sur deux listes
    Par DjinnS dans le forum Excel
    Réponses: 1
    Dernier message: 15/02/2008, 16h07
  3. travaille sur deux listes
    Par david06600 dans le forum Langage
    Réponses: 7
    Dernier message: 07/12/2006, 15h05
  4. Deux opérations sur un clic
    Par zoom61 dans le forum Langage
    Réponses: 6
    Dernier message: 21/08/2006, 12h13
  5. Liste déroulante sur deux tables
    Par NooD dans le forum IHM
    Réponses: 4
    Dernier message: 11/07/2006, 14h54

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