我尝试运行以下方案代码:
(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. ")))))))
应该工作。
答案 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. ")))))))