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 :

Problème de conditionnelle


Sujet :

Scheme

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Par défaut Problème de conditionnelle
    Bonjour à tous,

    j'ai un soucis dans une conditionnelle if qui ne m'évalue pas dans le bon ordre les différentes expressions qu'elle contient. Voici tout d'abord mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1 (define (construction-liste-couleurs image)
    2  (set! image (open-input-file image))
    3  (let (( L '()))
    4    (lecture-couleur L image)))
    
    5 (define (lecture-couleur liste image)
    6  (if (eof-object? (peek-char image))
    7      liste
    8      ((set! liste (cons (read-char image) liste))
    9       (lecture-couleur liste image)))
    La fonction construction-liste-couleurs reçoit le nom d'un fichier image .pgm en argument. Ensuite la variable image reçoit le port pointant vers le fichier .pgm .

    la fonction lecture-couleur est une fonction récursive qui va ajouter chaque caractère du fichier image .pgm dans la liste L. La condition d'arrêt est le prédicat eof-object? qui test si la fin du fichier a été atteinte. si ce n'est pas le cas on ajoute à la liste nommée "liste" le caractère pointé par read-char, puis on relance la fonction lecture-couleur, et ainsi de suite jusqu'à qu'on ait atteint la fin du fichier .pgm .

    Problème :

    l'execution de ce code se passe sans problème jusqu'au moment où la fin du fichier est atteinte (eof-object? (peek-char image)) renvoie #t. Normalement le programme devrait m'executer la ligne 7 puis s'arréter. Or il execute la ligne 9 et me renvoie l'erreur suivante :


    procedure application: expected procedure, given: #<void>; arguments were: (#\5 #\1 #\3 #\newline #\return #\2 #\P)

    (#\5 #\1 #\3 #\newline #\return #\2 #\P) est bien la liste que je dois obtenir. ( pour tester mon code j'utilise une version tronquée de mon fichier .pgm qui ne contient que :


    Pourtant j'ai bien vérifié toute la synthaxe de ma conditionnelle if et je ne comprend pas pourquoi le programme ne s'arrête pas une fois la ligne 7 executée.

    Merci d'avance.

  2. #2
    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
    Essaye ce bout de code, et évite autant que faire se peut ces horribles set! qui en plus ne servent à rien ici.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (define (lecture-couleur liste image)
      (let ((char  (read-char image)))
        (if (eof-object? char)
            liste
            (lecture-couleur (cons char liste) image))))
    PS pour que ton code fonctionne, il faut mettre un begin dans la deuxième action du if:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (define (lecture-couleur liste image)
     (if (eof-object? (peek-char image))
         liste
         (begin
           (set! liste (cons (read-char image) liste))
           (lecture-couleur liste image))))
    "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

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Par défaut
    merci beaucoup pour ta réponse, ça a résolu mon problème.

    Dernière petite question : les listes sont elles de bonnes structures pour stocker plusieurs dizaines de milliers d'éléments ? En effet si mon programme charge une image de résolution 800*600 ça me fera une liste à 480 000 éléments ! Cela pose t'il un problème ?

  4. #4
    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
    Je ne connais pas assez la manière dont Scheme gère les listes pour te répondre de façon définitive au sujet de la taille des listes (ça me parait quand même beaucoup), d'autre part, en Scheme, je ne vois pas trop quelle autre structure de données tu peux utiliser sauf à en définir une pour ton traitement.
    Mais plus généralement les listes sont adaptées à certains types de traitements alors que les tableaux sont adaptés à d'autres types.
    Je répondrai donc ça dépend du type de traitement que tu veux faire
    "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

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

Discussions similaires

  1. GridBagLayout problème affichage conditionnel
    Par theod3cI dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 27/06/2011, 18h37
  2. [VxiR2] Problème rupture conditionnelle
    Par tatayoyo dans le forum Deski
    Réponses: 4
    Dernier message: 12/03/2009, 15h02
  3. problème compilation conditionnelle
    Par salseropom dans le forum Linux
    Réponses: 5
    Dernier message: 16/10/2007, 16h08
  4. Problème commentaires conditionnels
    Par sawati dans le forum Balisage (X)HTML et validation W3C
    Réponses: 15
    Dernier message: 28/03/2007, 13h52
  5. Problème Expression conditionnelle
    Par nicolasferraris dans le forum ASP
    Réponses: 6
    Dernier message: 15/03/2007, 09h52

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