Bonjour !
Je viens de me mettre au scheme (j'ai juste quelques heure derrière moi) et je tombe sur un type d'erreur que je ne comprend pas :
Le but de ce programme est un petit jeu : il génère un nombre entre 0 et 99, puis demande à l'utilisateur de le trouver par saisies successives (de nombres). Si le nombre est trouvé, le programme affiche en combien de coup, sinon il indique si le nombre et plus grand ou plus petit.Envoyé par DrScheme
En voici une sortie :
J'ai fait une fonction "readNumber" qui va demander la saisie jusqu'à obtenir un numérique (pas de problème à ce niveau) :Envoyé par DrScheme
Ensuite j'ai fait ma "fonction principale" jeu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (define (readNumber) (let ((n (read))) (if (number? n) n (readNumber))))
Elle contient une fonction récursive interne "coup" (d'où vient le bug) qui prend en paramètres le numéro du coup et le nombre à trouver.
On demande un nombre via "readNumber", si c'est le bon nombre on affiche le message de victoire, sinon on affiche soit "plus grand", soit "plus petit" et on rappelle récursivement "coup" en augmentant le numéro de coup de 1.
Le reste du programme ne fait que générer un nombre et lancer le premier appel de coup...
Voilà. J'ai l'impression que ça viens du fait que je met plusieurs fonctions dans les expressions du si :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 (define (jeu) (define (coup n nb) (let ((saisie (readNumber))) (if (= saisie nb) ((display (string-append "victoire en " (number->string n 10) " coup !")) (newline)) ((if (> saisie nb) (display "trop grand !") (display "trop petit")) (newline) (coup (+ n 1) nb)) ))) (let ((nb (random 100))) (coup 1 nb)))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (if (test) (fonction) (fonction)) ne pose pas de problèmeSi quelqu'un peut éclairer ma lanterne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (if (test) ((fonction)(fonction)) ((fonction)(fonction))) génère cette erreur...
Et tant qu'à faire autant le demander () : mon code est t-il "bien pensé" ?
personnellement je ne suis pas très satisfé de la fonction "coup" à cause du compteur de coup passé en paramètres... Mais c'est peut être une condition du paradigme... En tout cas çà m'a pas l'air très optimal d'un point de vue "gestion de la mémoire".
Partager