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

Caml Discussion :

Filtrage sur deux liste a la fois [Ocaml] [Débutant(e)]


Sujet :

Caml

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Filtrage sur deux liste a la fois [Ocaml]
    Bonjour a tous, bon tout d'abord a avant de venir vous voir j'ai pas mal cherché et je n'ai pas trouver de réponse claire a mon problème.

    Le voici, j'essaye de filtrer sur deux liste en meme temps, liste du type
    ('a,'b)list et ('c,'d)list. En gros je fais un parcoure de mes deux listes a la fois . J'ai obligation de le faire en récursif. Le soucis ne viens pas de 'largo (enfin peut être que mon alto est bidon mais ça je me débrouillerais ) ,mais vraiment de l'écriture.
    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let rec produit f1 f2 = match f1 f2 with 
    				| [], _ | _,[] -> failwith "liste vide"		
    				| (x,y)::[],(a,b)::[] -> ((x,a),(y,b))::[]
    				| (x,y)::[],(a,b)::m -> ((x,a),(y,b)):: produit f1 m		
    				| (x,y)::l,(a,b)::[] -> ((x,a),(y,b)):: produit l f2
    				| (x,y)::l,(a,b)::m -> ((x,a),(y,b)):: produit f1 m
    				;;
    Et voici la réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    File "listFonction.ml", line 64, characters 52-53:
    Error: This expression has type ('a * 'b) list
           but an expression was expected of type
             ('c * 'd) list -> ('a * 'b) list * ('c * 'd) list
    La ligne 64 c'est celle ou il y a , et le problème se trouve avec f2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    | (x,y)::l,(a,b)::[] -> ((x,a),(y,b)):: produit l f2

    Voila je continu a chercher mais je ne vois comment il peut attendre ce qu'il attend a la place de f2.
    En vous remerciant de votre attention et de vos possibles réponses.
    Bonne soirée.

  2. #2
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Essaye avec match f1,f2 with.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup, maintenant j'ai plus qu' a changer l'algo.
    D'ailleurs maintenant le soucis c'est qu'une fois avoir fait tout les combinaison d'un element de f1 avec f2 je n'arrive pas a retourner au f2 initial pour continuer le parcoure de f1.
    Il me faudrait le mettre dans une sorte de variable static initialisée qu'une seule fois , et réutilisé lors des appels récursifs mais je ne vois vraiment pas comment faire.
    Une idée ?

    Merci encore

    edit : resolu, on passe par un buffer déclaré avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let  produit f1 f2 = 
    	let buffer = f2 in	
    	let rec produitbuff f1 f2 = match f1,f2 with	
    				| [], _ | _,[] -> []	
    				| (x,y)::[],(a,b)::[] -> ((x,a),(y,b))::[]
    				| (x,y)::[],(a,b)::m -> ((x,a),(y,b)):: produitbuff f1 m		
    				| (x,y)::l,(a,b)::[] -> ((x,a),(y,b)):: produitbuff l buffer
    				| (x,y)::l,(a,b)::m -> ((x,a),(y,b)):: produitbuff f1 m
    	in produitbuff f1 f2
    	;;

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

Discussions similaires

  1. opération sur deux listes
    Par simnitch dans le forum Lisp
    Réponses: 7
    Dernier message: 24/04/2013, 10h12
  2. [AC-2007] Problème de filtrage sur une liste déroulante
    Par theuma dans le forum Access
    Réponses: 0
    Dernier message: 23/05/2011, 09h30
  3. recherchev sur deux listes
    Par DjinnS dans le forum Excel
    Réponses: 1
    Dernier message: 15/02/2008, 15h07
  4. Réponses: 5
    Dernier message: 27/02/2007, 11h43
  5. travaille sur deux listes
    Par david06600 dans le forum Langage
    Réponses: 7
    Dernier message: 07/12/2006, 14h05

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