You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R7RS-small下单值参数接收多值返回的行为及Scheme实现差异

Scheme单值上下文传入多返回值的行为说明

R7RS-small标准规定

当表达式所处的上下文仅需要接收单个值时,如果该表达式返回了零个或超过一个的值,属于未定义行为。标准既没有强制要求实现自动丢弃多余返回值,也没有要求必须抛出错误,具体处理逻辑交由各实现自主决定。

具体示例行为解释

  • 示例(+ (values 1) (values 2))返回3是符合所有标准实现预期的:两个values调用都仅返回1个值,完全匹配+运算符每个参数位置的单值要求,不存在歧义。
  • 示例(+ 1 (values 2 3))的执行结果没有统一的标准要求,目前不同实现分为两类处理逻辑:
    • 以Guile 3.0.7为代表的实现会自动取多返回值的第一个值参与计算,自动忽略后续值,最终返回3
    • 以MIT Scheme 11.2、Chibi 0.10.0为代表的实现会做严格的参数校验,发现参数位置返回多值时直接抛出值数量不匹配的错误

注意:自动忽略多余返回值只是部分实现的扩展特性,不能在需要跨实现运行的可移植代码中依赖该行为。

内容的提问来源于stack exchange,提问作者Flux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:05