2010-12-13 10 views
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から来たのか?どのように私はそれを取り除くのですか?

+0

私たちに電話をかける方法を教えてください。 –

答えて

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

+0

私はあなたの機能に私の答えを追加することができますか? (affiche-gagnant "Alper" "Ezgi" 1) –

+0

あなたの機能は正しいです。それはあなたがそれを間違っていると呼ぶ方法です。あなたは何を使っていますか? DrScheme? DrRacket?あなたの機能をテストするためにあなたが入力したものをプロンプトで教えてください。 –

+0

それはdrscheme いいえ、私はfuctionと呼ばれる:(affiche-gagnant "Alper" "Ezgi" 1 1) –

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