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 :

Peut on rendre ce code un peu plus clair ?


Sujet :

Haskell

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut Peut on rendre ce code un peu plus clair ?
    Désolé si je vais vite au coeur du sujet,
    je débute en Haskell (mon essai de deuxième langage fonctionnel aprés Scheme), je trouve ça trés sympa.

    Mon programme marche bien, par contre j'ai ce bout de code qui me parait (même à moi auteur) un peu abscond :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    head_until [] p = []
    head_until (x:xs) p = if not (p x) then x : head_until xs p else []
    next_move l i =
    ...
    is_end_move l = l == (-1,-1)
    all_next_moves2 l = (0, 0) : head_until (map (next_move l) (all_next_moves2 l)) is_end_move
    all_next_moves l = tail (all_next_moves2 s)
    Comme je ne maitrise vraiment pas encore le langage de A-Z est-ce que quelqu'un pourrait me donner des indices ou des pistes d'amélioration sur la lisibilité de ce bout de code (destiné à un tuto dvp). Ou s'il existe des souxieries classique sur ce pb. ?

    En gros j'ai un générateur next_item qui prend en entrée un état l et un mouvement i et qui renvoi le prochain mouvement. Et je construit dans all_next_items tous les mouvements succesifs possibles (jusqu'à mouvement d'arrêt de l'itération).

    Merci d'avance.

  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
    Voyons, en conservant nextMove (traditionnellement, on utilise plutôt le CamelCase en Haskell, donc si tu pouvais garder ça ce serait pas mal pour un tutoriel, également utiliser des noms plus explicites pour tes arguments serait un plus), on pourrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    allNextMoves state = tail . takeWhile (/= (-1,-1)) . iterate (nextMove state) $ (0,0)
    (takeWhile et iterate sont tous deux dans le Prelude)

    Si tu fais un tutoriel pour dvp en Haskell, n'hésite pas à me demander conseil ou à me montrer ton code.

    --
    Jedaï

  3. #3
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Merci beaucoup pour cette aide précieuse, (pas de livres sous la main, donc tutos Haskell seulement snif.). J'ai commencé Haskell il y a 2 jours, donc c'est vraiment le tout début début ; et je n'ai pas encore plongé dans le manuel de référence.

    C'est pour la rédaction d'un tuto d'introduction à l'IA sur les jeux. Les exemples pourraient être partiellement ou totalement en Haskell, mais rien n'ai encore arrêté pour l'instant, le choix est à l'étude collective. Si tu veux, j'ai ouvert un post d'avancement du tuto ; tu pourra te faire une idée du sujet, et du contenu. J'y mettrai aussi les exemples de code.

    En tout cas merci pour ta proposition de coup de main.

    Et merci pour ta solution, j'était tombé en plein dans le NIH.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Janvier 2007
    Messages : 65
    Par défaut
    mchk0123, j'ai traduit ce tutoriel qui est très instructif:
    http://corentin-dupont.developpez.co...c-programmers/

  5. #5
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Super nouvelle,

    J'ai déjà lus plusieurs tutoriels, dont celui-ci. Par contre impossible de me rappeller si je l'ai lu en Anglais ou en Français (ma mémoire défaille, je vais devoir m'acheter une nouvelle barrette).

    En tout cas ça servira grandement aux nouveaux débutants.

    Je vais en profiter pour poser une question toute bête :

    - est-ce qu'il existe un moyen de "débugger" un programme Haskell en insérant un peu partout des PutStrLn pour afficher des informations ?

    J'ai déjà essayé mais je me suis heurté au "nomadisme" (def: action d'utiliser le concept de nomades ; attention à ne pas confondre avec les habitants du desert ;-)). Ceci dit j'arrive bien à faire des affichage dans le main, mais si on doit propager explicitement le type IO à toutes les fonctions qui utilisent les E/S, ça me semble un peu lourd.

    Je suis sur qu'il doit surement exister une solution à ce type de situation. Mais je suis vraiment trop booké pour plonger dans les tutoriels avancés (surtout ceux en anglais) pour l'instant.

  6. #6
    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
    Ce n'est pas "nomades", c'est "monades".
    Par ailleurs pour faire ce que tu demandes, tu peux utiliser trace de Debug.Trace.
    Une meilleure idée pourrait être d'utiliser le débuggueur intégré à ghci, il est pas mal.

    --
    Jedaï

Discussions similaires

  1. Réponses: 16
    Dernier message: 04/02/2010, 10h08
  2. Réponses: 1
    Dernier message: 04/08/2008, 22h42
  3. Un moyen de rendre mon code plus rapide?
    Par Beluga_71 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/05/2008, 10h36
  4. rendre mon code plus propre
    Par superspike23 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/01/2008, 10h10

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