如何在 MIT-Scheme 的条件表达式中写入标准输出?

How to write to stdout within a conditional expression in MIT-Scheme?

下面是一个尝试根据变量值将不同字符串写入标准输出的示例:

(let ((x 1))
(cond ((< x 2)  
         (display "hooray"))
       (else 
         (display "bummer"))) 
)

请注意,确实写入了正确的字符串,但我们也得到了 "Unspecified return value"

我的理解是,发生这种情况是因为解释器试图将 return 子句的 "consequent expression" 的值作为条件的值,但是 "display" 表达式确实不是 return 任何值。

有更好的方法吗?

鉴于此表达式仅针对其效果(打印消息)进行评估,您应该明确 return 一个值(任何值!)作为 let 形式的结果:

(let ((x 1))
  (cond ((< x 2)  
         (display "hooray")
         (newline))
        (else 
         (display "bummer")
         (newline)))
  'ok)

现在我们将得到:

hooray
'ok