1

次のスキームコードを実行してみました。

(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. "))))))))

しかし、次の出力が得られます。

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

どこ#voidから来たの?どうすればそれを取り除くことができますか?

4

2 に答える 2

2

おっと、間違った答え。余分なディスプレイがあります:

(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. ")))))))

動作するはずです。

于 2010-12-13T23:57:00.933 に答える
0

Schemeの一部の実装では、何も返さない関数(begin、define、set!など)は実際には特別な値を返します#<void>。このような値を表示するとエラーになります。あなたの場合、それは余分な「ディスプレイ」でした。

(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. ")))))))
于 2011-06-14T22:29:06.230 に答える