以下是尝试根据变量的值将不同的字符串写入stdout的示例:
(let ((x 1))
(cond ((< x 2)
(display "hooray"))
(else
(display "bummer")))
)
请注意,写入了正确的字符串,但我们也得到了“未指定的返回值”
我的理解是,这是因为解释器试图将子句的“结果表达式”的值作为条件的值返回,但“display”表达式不返回任何值。
有更好的方法吗?
答案 0 :(得分:2)
鉴于此表达式仅针对其效果(打印消息)进行评估,您应该显式返回一个值(任何值!)作为let
形式的结果:
(let ((x 1))
(cond ((< x 2)
(display "hooray")
(newline))
(else
(display "bummer")
(newline)))
'ok)
现在我们得到:
hooray
'ok