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 :
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 .
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 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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 P2 513
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.
Partager