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

Haskell Discussion :

fusioner 2 maybe list


Sujet :

Haskell

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 226
    Points : 72
    Points
    72
    Par défaut fusioner 2 maybe list
    bonjour,
    j'essaye de faire une fusion de 2 maybe liste avec le ++ mais j'ai les erreures suivant :

    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
    /Users/michel/Documents/workspace/2LammensMichelInterpreteurProlog/Setup.hs:65:58:
        Couldn't match expected type[a0]’
                    with actual typeMaybe Substitution’
        In the first argument of(++)’, namely ‘listsub’
        In the expression: listsub ++ listsub
     
    /Users/michel/Documents/workspace/2LammensMichelInterpreteurProlog/Setup.hs:65:58:
        Couldn't match expected typeMaybe Substitution’
                    with actual type[a0]’
        In the expression: listsub ++ listsub
        In an equation for ‘substition’:
            substition ((V variable), (F nom1 lTerme1)) listsub
              = listsub ++ listsub
     
    /Users/michel/Documents/workspace/2LammensMichelInterpreteurProlog/Setup.hs:65:69:
        Couldn't match expected type[a0]’
                    with actual typeMaybe Substitution’
        In the second argument of(++)’, namely ‘listsub’
        In the expression: listsub ++ listsub
    Failed, modules loaded: none.

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je suppose que Substitution est une liste, un synonyme pour [(..,..)] ?
    Dans ce cas, il faut que tu réfléchisses un peu à ce que tu veux obtenir, en particulier :
    1. Si tu as Just xs + Nothing ou Nothing + Just xs, veux-tu obtenir Nothing ou simplement le Just xs ?
    2. Si tu as Just xs + Just ys veux-tu Just xs ou Just (xs ++ ys) ?


    En supposant que les réponses soit 1)"Just xs" et 2)"Just (xs ++ ys)", tu peux utiliser l'opérateur <> (mappend) de Data.Monoid, sinon il va falloir donner des précisions...

    Par ailleurs listsub ++ listsub est un peu bizarre... tu veux vraiment avoir deux fois de suite ta liste des substitutions d'origine ?

    --
    Jedaï

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 226
    Points : 72
    Points
    72
    Par défaut
    j'ai trouver ensuite je devais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    concatMaybeList a b = x ++ y
                         where x = case a of
                                       Just val -> val
                                       Nothing  -> []
                               y = case b of
                                       Just val -> val
                                       Nothing  -> []
    merci quand même

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Note que tu peux éviter la répétition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import Data.Maybe (fromMaybe)
     
    concatMaybeLists mxs mys = toList mxs ++ toList mys
      where toList = fromMaybe []
    Si tu ne distingues pas les cas "Just []" de "Nothing", ton type d'origine n'est probablement pas approprié non plus, peut-être devrais tu le reconsidérer et le remplacer simplement par une liste.

    --
    Jedaï

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 226
    Points : 72
    Points
    72
    Par défaut
    comment je dois m'y prendre pour distinquer les 2 cas alors ?
    comment avoir une liste de [Nothing,Nothing] ou [Just 'a' ,Nothing]

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par mimi6060 Voir le message
    comment je dois m'y prendre pour distinquer les 2 cas alors ?
    Tu ne les distingues pas, justement : ta fonction concatMaybeList traite Just [] ou Nothing exactement de la même façon ce qui est étonnant si les deux cas sont vraiment différents. Le choix est donc :
    • soit ta fonction est correcte et tu dois revoir ton choix de structure de donnée, peut être une simple liste plutôt qu'une "Maybe liste" suffirait-elle à tes besoins.
    • soit ta fonction est erronée et devrait traiter différemment les cas Nothing et Just []
    • ta fonction est un cas spécial et il y a une différence entre Nothing et Just [] avant que tu l'appliques mais après il n'y a plus de distinctions à faire.


    Citation Envoyé par mimi6060 Voir le message
    comment avoir une liste de [Nothing,Nothing] ou [Just 'a' ,Nothing]
    Je ne comprend pas, pour l'instant nous parlions de Maybe [a], pas de [Maybe a] ? Pourrais-tu préciser ta question ?
    --
    Jedaï

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 226
    Points : 72
    Points
    72
    Par défaut
    peux-t-on faire des liste de maybe?

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    peux-t-on faire des liste de maybe?
    Bien sûr ! On peut faire des listes de n'importe quel type, or "Maybe a" est un type (si "a" est un type), donc on peut faire des listes de valeurs optionnelles, essaie dans GHCi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    > :t [Just 3, Nothing, Just (-5)]
    Par exemple.
    Note qu'on peut même faire des listes de fonctions ("a -> b" est un type) même si on ne peut pas les afficher (parce que "a -> b" n'est pas une instance de la typeclass Show) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    > map (\f -> f 5) [(+ 3), subtract 5, (^2)]
    --
    Jedaï

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

Discussions similaires

  1. [Turbo Pascal] Fusion de deux listes chaînées ordonnées
    Par attilaz dans le forum Turbo Pascal
    Réponses: 0
    Dernier message: 15/05/2012, 22h27
  2. Fusion de deux listes déroulante
    Par chtrousselle dans le forum Excel
    Réponses: 1
    Dernier message: 21/06/2011, 09h14
  3. Fusion de deux listes chainées
    Par schwuleur dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2011, 15h42
  4. fusion de deux liste simplement chainée
    Par mdh12 dans le forum Débuter
    Réponses: 6
    Dernier message: 14/01/2010, 19h23
  5. [J2EE/WEB]Fusion de 2 listes
    Par crewstyle dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 30/04/2007, 09h51

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