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

如何在Gambit Scheme中正确使用let-values?

Gambit中let-values使用问题及解决

我在测试Scheme的变量重定义功能,在Gambit中运行以下代码:

(let-values ((x (values 1 2 3))
             (x (values 4 5 6)))
  (display x)
  (newline))

期望查看输出结果,但Gambit抛出错误:

Unbound variable: let-values

我确认let-values在Gambit中已实现,但不知道怎么启用这个特性,推测和库加载有关,但不了解Gambit的库使用方法。尝试执行:

(import gambit)

时也报错:

Unbound variable: import

我使用gsi file.scm命令执行Gambit代码。


解决方法

  1. 切换到R7RS模式
    Gambit默认启动时采用R5RS兼容模式,而import和let-values是R7RS标准的特性,需要切换模式:

    • 启动时加参数:执行命令改为 gsi -r7rs file.scm
    • 或在代码开头添加声明:在文件第一行加上 #!r7rs,让Gambit自动以R7RS模式加载
  2. 正确导入库
    在R7RS模式下,需要显式导入(gambit)库才能使用完整的Gambit特性:

#!r7rs
(import (gambit))
  1. 修正let-values的语法错误
    原代码存在语法问题:let-values的每个绑定项必须是((变量列表) 表达式)的形式,因为values返回多个值,需要对应多个变量来接收。如果想测试变量覆盖,正确写法示例:
#!r7rs
(import (gambit))

(let-values (((x1 x2 x3) (values 1 2 3))
             ((x1 x2 x3) (values 4 5 6)))
  (display (list x1 x2 x3))
  (newline))

运行后会输出 (4 5 6),后一个绑定会覆盖前一个。

如果尝试用单个变量接收多个值,Gambit会抛出too many values to unpack的错误,这是Scheme标准的行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:29:58