如何在MIT-Scheme中的条件表达式中写入stdout?

时间:2015-07-10 20:21:26

标签: scheme lisp mit-scheme

以下是尝试根据变量的值将不同的字符串写入stdout的示例:

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

请注意,写入了正确的字符串,但我们也得到了“未指定的返回值”

我的理解是,这是因为解释器试图将子句的“结果表达式”的值作为条件的值返回,但“display”表达式不返回任何值。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

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

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

现在我们得到:

hooray
'ok