Erreur de fin de programme
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 :
Citation:
Envoyé par DrScheme
procedure application: expected procedure, given: (void); arguments were: (void)
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.
En voici une sortie :
Citation:
Envoyé par DrScheme
> (jeu)
50
trop grand !
25
trop petit
35
trop petit
45
trop grand !
40
trop petit
43
trop grand !
42
victoire en 7 coup !
procedure application: expected procedure, given: (void); arguments were: (void)
J'ai fait une fonction "readNumber" qui va demander la saisie jusqu'à obtenir un numérique (pas de problème à ce niveau) :
Code:
1 2 3
| (define (readNumber)
(let ((n (read)))
(if (number? n) n (readNumber)))) |
Ensuite j'ai fait ma "fonction principale" jeu.
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...
Code:
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))) |
Voilà. J'ai l'impression que ça viens du fait que je met plusieurs fonctions dans les expressions du si :
Code:
1 2
| (if (test) (fonction) (fonction))
ne pose pas de problème |
Code:
1 2
| (if (test) ((fonction)(fonction)) ((fonction)(fonction)))
génère cette erreur... |
Si quelqu'un peut éclairer ma lanterne...
Et tant qu'à faire autant le demander (:aie:) : 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".