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 回答