如何在 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
下面是一个尝试根据变量值将不同字符串写入标准输出的示例:
(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