这是有效的方案
1 2 3
并返回 3。但这是无效的
(1 2 3)
这也不是有效的
(1) (2) (3)
最后两个无效是有道理的。但我不明白第一个应该如何有效?有人可以解释一下吗?
最佳答案
可能是 REPL您的实现的一部分是读取一个非空的序列 表达式并对所有表达式求值并给出序列 结果。 (我相信 REPL 的这种行为是特定于实现的。R7RS 没有在其 §5.7 中提及它。它可能会随着 Scheme 的其他实现而变化,我从未使用过它;我同意 coredump's answer 它可能是一个奇特而有用的功能)
Scheme 能够返回并处理多个值,例如with call-with-values
& values
;另见 this
所以从技术上讲,1 2 3
不是一个单个表达式,而是一个序列 三个表达式。调用 (read)
不会给你这样的序列。在 Linux 上的诡计 2 (+ 2 (read)) 55 66
立即 给出两个结果 57 66
,而不是三个(在 之后等待输入)。
另请阅读 call/cc , continuations , 和 CPS .可能存在一些间接关系(您的 REPL 在(read)
ing 表达式时如何在内部处理它们....)
关于scheme - 为什么 "1 2 3"是一个有效的 Scheme 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32930515/