Scheme 让定义在gambit';什么是gsi?

Scheme 让定义在gambit';什么是gsi?,scheme,gambit,Scheme,Gambit,在尝试gambit的gsi(4.6.6)时,我遇到了一个奇怪的情况,我在let中输入了一些无效的内容 按照正常的方式做,一切都如预期的那样i和j不可见 > (let ((i 4) (j 3)) (display (+ i j)) (newline)) 7 > i *** ERROR IN (console)@2.1 -- Unbound variable: i 1> j *** ERROR IN (console)@3.1 -- Unbound variable: j 但是,

在尝试gambit的gsi(4.6.6)时,我遇到了一个奇怪的情况,我在let中输入了一些无效的内容

按照正常的方式做,一切都如预期的那样<代码>i和j不可见

> (let ((i 4) (j 3)) (display (+ i j)) (newline))
7
> i
*** ERROR IN (console)@2.1 -- Unbound variable: i
1> j
*** ERROR IN (console)@3.1 -- Unbound variable: j
但是,如果我在let块中出错,
I和
j可见。就好像我还在let表单的范围内。这是怎么回事?另外,查看提示符上的数字,例如
1>`2>等。看起来那里也有信息。如果是,那是什么?可能与嵌套或错误模式有关

2> (let ((i 2) (j 3)) (display + i j) (newline))
*** ERROR IN (console)@4.20 -- Wrong number of arguments passed to procedure
(display '#<procedure #2 +> 2 3)
3> i
2
3> j
3

这是Gambit的交互式调试器的一个功能

从手册中:

然后,嵌套的REPL在连接点的上下文中启动 停止计算的执行。嵌套的REPL 延续和评估环境与点相同 停止评估的位置。例如,在评估 表达式“(let((y(-1)))(*(/x y)2))”,一个“除以零” 将报告错误,并且嵌套的REPL的延续是 获取结果并将其乘以2。REPL的词法 环境包括词法变量“y”。这允许 检查评估上下文(即词汇和动态 环境和延续),这对 确定错误的确切位置和原因


在您的例子中,嵌套的REPL从
let
内部开始,因此绑定了
i
j

i在生成示例之前重新启动了解释器。+1“不要称它为bug,称它为功能”:。只是开玩笑,这对于调试来说是有意义的。
user=> (defn display [n] (print n))
#'user/one-arg-function
user=> (let [i 2 j 3] (display + i j) (println))
ArityException Wrong number of args (3) passed to: user$one-arg-function clojure.lang.AFn.throwArity (AFn.java:437)

user=> i 
CompilerException java.lang.RuntimeException: Unable to resolve symbol: i in this context, compiling:(NO_SOURCE_PATH:0) 

user=> j
CompilerException java.lang.RuntimeException: Unable to resolve symbol: j in this context, compiling:(NO_SOURCE_PATH:0)