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

Scheme Discussion :

Produit de deux ensembles


Sujet :

Scheme

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut Produit de deux ensembles
    Bonjour je dois réaliser le produit cartésien de deux ensembles E1 et E2 implémentés par des listes sans répétitions du type (a b f s) dont l'ordre ne compte pas et obtenir un résultat du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (ens-prod '(a b c) '(1 2))
    
    > ((a 1) (a 2) (b 1) (b 2) (c 1) (c 2))
    J'ai fais ceci mais le résultat me donne trop de A-listes et je ne trouve pas comment m'en débarasser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    (define (ens-prod A B)
       (map (lambda (x) (map (lambda (y) (list x y)) B)) A))
    
    > (((a 1) (a 2)) ((b 1) (b 2)) ((c 1) (c 2)))
    si quelqu'un a une idée...

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    si tu concatènes les listes contenues dans la liste résultat... ça devrait suffire
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Combine la récursivité et le map.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Remarque en passant :

    Ce genre de TP est plus simple à mettre en œuvre sous Scheme que sous ocaml. Sous ocaml, le typage est un sérieux frein.

  5. #5
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    En Caml, traduction littérale de l'exemple donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let ens_prod a b =
      List.map (fun x -> List.map (fun y -> [x; y]) a) b
    Je ne vois pas de différence, ici.

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par LLB Voir le message
    En Caml, traduction littérale de l'exemple donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let ens_prod a b =
      List.map (fun x -> List.map (fun y -> [x; y]) a) b
    Je ne vois pas de différence, ici.
    Mais si tu implémentais les ensembles tu utiliserais des listes simples, toi ?
    Probablement plus des hashset non ?

    Et en général dès que tu commences à penser à ton typage, ça complique la vie. Je ne dis pas que c'est infaisable: je l'ai fait pour montrer à mon collègue comment ça pourrait se faire. Sauf qu'en Scheme la solution est plus simple puisqu'il n'y a pas de problème de typage. Si tu ne manipules que des entiers, ce n'est pas génant. Si tu manipules des entiers et des réelles, ça devient fatiguant... si tu veux des ensembles dans tu ne peux définir l'ensemble d'inclusion a priori, les choses se gatent (mélange d'un nombre n de types).

Discussions similaires

  1. Deux ensembles spécifiés dans la fonction << >> ont une dimensionalité différente.
    Par clementratel dans le forum Autres outils décisionnels
    Réponses: 0
    Dernier message: 20/02/2008, 16h15
  2. produit de deux matrices
    Par reckahomis1 dans le forum C
    Réponses: 5
    Dernier message: 28/10/2007, 21h25
  3. Produit de deux polynomes
    Par Tulas dans le forum Caml
    Réponses: 3
    Dernier message: 02/05/2007, 09h44
  4. comment calculer le produit de deux nombres en PHP
    Par batalich dans le forum Langage
    Réponses: 3
    Dernier message: 12/03/2007, 09h02
  5. [Tableaux] produit de deux tableaux
    Par vivian dans le forum Langage
    Réponses: 8
    Dernier message: 25/07/2006, 19h52

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