【问题标题】:How to write to stdout within a conditional expression in MIT-Scheme?如何在 MIT-Scheme 的条件表达式中写入标准输出?
【发布时间】:2015-07-10 20:21:26
【问题描述】:

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

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

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

我的理解是,发生这种情况是因为解释器试图将子句的“后件表达式”的值作为条件的值返回,但“显示”表达式没有返回任何值。

有更好的方法吗?

【问题讨论】:

  • 请记住,返回值仅打印在 REPL 中,如果您从命令行运行mit-scheme --quiet --load ./my-file,则不会打印返回值。

标签: scheme lisp mit-scheme


【解决方案1】:

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

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

现在我们将得到:

hooray
'ok

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2012-06-08
    相关资源
    最近更新 更多