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 :

[Haskell] Flot et fonctions


Sujet :

Haskell

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut [Haskell] Flot et fonctions
    Bonjour,

    J'ai un petit probleme avec une fonction toute bête sur un flot infini.

    Supposons une fonction apply qui prend en parametre une fonction unaire et qui l'applique à toutes les valeurs d'un flot (infini dans notre cas) passé en parametre.

    Voila le type de la fonction :

    (a -> b) -> [a] -> [b]

    Or j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    apply1 fonction flot = (fonction (last(take (1 flot)))): (apply1 (fonction takeWhile (vrai 2 flot)))
    et la fonction vrai :
    vrai a = True
    Dans ma logique, il applique la fonction au dernier element de la liste contenant le premier element du flot () qu'il concatene avec apply1 du reste. Or il me met une erreur de type :

    (line 10): Type error in application
    *** Expression : vrai 2 flot
    *** Term : vrai
    *** Type : d -> Bool
    *** Does not match : a -> b -> c
    Ou est l'erreur ? je comprend pas trop

    Merci

    Fred

  2. #2
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par mavina
    Ou est l'erreur ? je comprend pas trop

    Merci

    Fred
    Je ne suis pas sûr du tout du reste de ta fonction, mais de toute façon, tu n'as pas l'air d'avoir compris ce que faisait "vrai" : d'après ta définition, vrai prend un paramètre et renvoie True, donc :
    est équivalent à
    Ce qui n'a aucun sens...

    Que voulais-tu faire ?
    (NB : cela fait de vrai un synonyme de (==))

    --
    Jedaï

  3. #3
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par mavina
    Bonjour,

    J'ai un petit probleme avec une fonction toute bête sur un flot infini.

    Supposons une fonction apply qui prend en parametre une fonction unaire et qui l'applique à toutes les valeurs d'un flot (infini dans notre cas) passé en parametre.

    Voila le type de la fonction :

    (a -> b) -> [a] -> [b]
    Ta définition fait de apply un synonyme de map, ce qui s'écrit simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apply f l = f (head l) : apply f (tail l)
    Ca marche aussi bien pour une liste infinie que finie.

    Peut-être essaie-tu de faire quelque chose de différent, mais dans ce cas tu n'as pas l'air d'être très sûr de quoi, pourrais-tu l'expliquer plus clairement ?

    --
    Jedaï

  4. #4
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Coucou,

    Oui je suis débutant et j'ai un peu de mal avec Haskell

    C'est bien la solution de Jedai

    Pour ce qui est de vrai, j'ai fait une erreur de parenthèse, je voulais écrire (vrai 2) flot .

    En fait, takeWhile prend les elements d'une liste avec une condition d'arret, je voulais la condition d'arret toujours vrai.

    Ta définition marche parfaitement. En fait, mon problème n'était pas dans le principe, mais j'ignorais l'existance de head et tail, je n'ai pas trouvé dans le peu de documentation que j'ai trouvée

    En fait oui c'était la redéfinition de map

    Merci beaucoup

    Fred

  5. #5
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par mavina
    Ta définition marche parfaitement. En fait, mon problème n'était pas dans le principe, mais j'ignorais l'existance de head et tail, je n'ai pas trouvé dans le peu de documentation que j'ai trouvée
    Quel compilateur/interpréteur Haskell utilises-tu ? Je te recommande GHC.
    En tout cas, tu dois avoir une doc avec, lis le "Prelude" au moins une fois (ou au moins par petits bouts), ça t'aidera beaucoup. (le Prelude est plein de méthodes très utiles).

    --
    Jedaï

  6. #6
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    J'utilise Hugs98

    Je ne cache pas que je seche sur les exos qu'on me fait faire là, je n'ai absolument pas l'habitude de programmer en fonctionnel

    Une derniere question : admétons une fonction définie ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fonction a = (...)
    supposons ensuite que a est une fonction qui prend un parametre : a->b

    Comment dans le corps de "fonction" récupérer le parametre de a ?

    Merci

    Fred

  7. #7
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Ca n'a pas de sens ce que tu dis-là : peux-tu préciser ta pensée ? C'est quoi fonction ? un mot-clef ? C'est quoi a ?

    Une fonction, ça reste une fonction ! C'est comme en C ! On l'applique à un paramètre mais on obtient alors une valeur du type de retour.

  8. #8
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par mavina
    J'utilise Hugs98
    Je te conseille plutôt GHC si tu as le choix. En plus, c'est ce que j'utilise, donc je pourrais plus facilement t'aider sur les questions techniques.

    Citation Envoyé par mavina
    Je ne cache pas que je seche sur les exos qu'on me fait faire là, je n'ai absolument pas l'habitude de programmer en fonctionnel

    Une derniere question : admétons une fonction définie ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fonction a = (...)
    supposons ensuite que a est une fonction qui prend un parametre : a->b

    Comment dans le corps de "fonction" récupérer le parametre de a ?
    fonction n'est pas un mot clé de haskell, je ne comprend pas la question...
    Veux-tu parler des "lambda" (ou fonction anonyme) ?
    --
    Jedaï

Discussions similaires

  1. Haskell et invocation "dynamic" de fonction
    Par oca dans le forum Haskell
    Réponses: 10
    Dernier message: 20/01/2010, 22h21
  2. fonction haskell appelée depuis module C
    Par barbouille dans le forum Haskell
    Réponses: 9
    Dernier message: 24/04/2008, 18h29
  3. [Haskell] Faire une fonction average
    Par GnuVince dans le forum Haskell
    Réponses: 2
    Dernier message: 18/12/2007, 15h00
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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