Scheme#void error

时间:2010-12-13 23:49:14

标签: scheme void

我尝试运行以下方案代码:

(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来自哪里?我该如何摆脱它?

2 个答案:

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

应该工作。

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