当 mit-scheme 评估一个列表时,输出值意味着什么?

What does the output value mean when mit-scheme evaluates a list?

mit-scheme REPL if I evaluate

(list 1 2 3)

第一次收到

;Value 13: (1 2 3)

那么这是第二次

;Value 14: (1 2 3)

这是第三次

;Value 15: (1 2 3)

每次值递增1。

在其他方案 REPL 中,我注意到 ;Value xx 部分根本没有显示。

这个值是什么意思?我猜这是列表的内存地址?如果是这样,为什么它总是从 13 开始,为什么只显示列表的地址?

快速搜索 manual 对我没有帮助。

我是 运行 mit-scheme 版本 9.1.1

What does the value mean?

显示的数字是列表的哈希。

1 ]=> (define my-list '(1 2 3))

;Value: my-list

1 ]=> my-list

;Value 13: (1 2 3)

1 ]=> (hash-object my-list)

;Value: 13

(MIT Scheme 10之前的版本,使用hash代替hash-object)。

有关散列的详细信息,请参阅有关 Object Hashing of the MIT/GNU Scheme 参考的部分。

why [does it] only show the address for lists?

这是 MIT Scheme 的作者选择编写 REPL 的方式。来自 MIT Scheme 9.1.1 源代码的 src/runtime/rep.scm 的第 491-500 行处理打印 REPL 结果:

(define (default/repl-write object s-expression environment repl)
  (port/write-result (cmdl/port repl)
             s-expression
             object
             (and repl:write-result-hash-numbers?
              (object-pointer? object)
              (not (interned-symbol? object))
              (not (number? object))
              (object-hash object))
             environment))

如您所见,仅当对象是指针(这是一个实现细节)、不是内部符号且不是数字时,对象哈希才会显示在 REPL 中。