2010-12-13 35 views
1

j'ai essayé exécuter le code de schéma suivant:Schéma # vide erreur

(define affiche-gagnant 
    (lambda (j1 j2 g1 g2) 
    (begin 
     (display "Le gagnant est : ") 
     (display 
     (cond ((> g1 g2) j1) 
      ((< g1 g2) j2) 
      (else (begin (display "personne. ") (display j1) (display " et ") (display j2) (display " sont exaequos. ")))))))) 

Mais je reçois la sortie suivante:

Le gagnant est : personne. Alper et Ezgi sont exaequos. #<void> 

D'où vient le #void de? Comment puis-je m'en débarrasser?

+0

Montrez-nous comment l'appel est passé, s'il vous plaît. –

Répondre

2

Oups, mauvaise réponse. Vous avez un affichage supplémentaire:

(define affiche-gagnant 
    (lambda (j1 j2 g1 g2) 
    (begin 
     (display "Le gagnant est : ") 
     (cond ((> g1 g2) (display j1)) 
      ((< g1 g2) (display j2)) 
      (else (begin (display "personne. ") (display j1) (display " et ") (display j2) (display " sont exaequos. "))))))) 

Devrait fonctionner.

+0

pourriez-vous ajouter votre réponse à ma fonction ?? (affiche-gagnant "Alper" "Ezgi" 1 1) –

+0

Votre fonction est correcte. C'est comme ça que vous appelez ça c'est faux. Qu'est-ce que vous utilisez? DrScheme? DrRacket? Dites-moi ce que vous tapez dans l'invite pour tester votre fonction. –

+0

c'est drscheme non, j'ai appelé le fuction: (affiche-gagnant "Alper" "Ezgi" 1 1) –

0

Dans certaines implémentations de Scheme, toute fonction qui ne devrait pas retourner quelque chose (comme begin, define, set!) Renvoie en réalité une valeur spéciale #<void>. C'est une erreur d'afficher une telle valeur. Dans votre cas, c'était un "affichage" supplémentaire.

(define affiche-gagnant 
    (lambda (j1 j2 g1 g2) 
    (begin 
     (display "Le gagnant est : ") 
     (cond 
     ((> g1 g2) j1) 
     ((< g1 g2) j2) 
     (else (begin (display "personne. ") (display j1) (display " et ") (display j2) (display " sont exaequos. ")))))))