2015-07-10 73 views
0

这里是一个尝试写一个不同的字符串取决于变量的值到标准输出的一个例子:如何在MIT-Scheme中的条件表达式中写入stdout?

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

注意,正确的字符串并获得书面,但是我们也有一个“未指定的返回值”

我的理解是,这是因为解释器试图将条件的“随后的表达式”的值作为条件的值返回,但“显示”表达式不返回任何值。

有没有更好的方法来做到这一点?

+2

请记住,返回值只印在REPL,如果你在命令行'MIT-方案--quiet --load /我-file'返回值是无法运行此。打印。 – Rptx

回答

2

鉴于此表达不仅是因为它的效果评估(打印信息),你应该明确地返回一个值作为let形式的结果(任何值!):

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

现在,我们将得到:

hooray 
'ok