当 mit 方案评估列表时,输出值是什么意思?



如果我评估,则在mit-schemeREPL 中

(list 1 2 3)

我第一次得到这个

;Value 13: (1 2 3)

那么这是第二次

;Value 14: (1 2 3)

这是第三次

;Value 15: (1 2 3)

每次值递增 1 时。

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

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

快速搜索手册对我没有帮助。

我正在运行mit-scheme版本 9.1.1

这个值是什么意思?

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

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

(对于版本 10 之前的 MIT 方案,请使用hash而不是hash-object(。

有关散列的详细信息,请参阅 MIT/GNU 方案参考中有关对象散列的部分。

为什么 [它] 只显示列表的地址?

这是麻省理工学院方案的作者选择编写 REPL 的方式。 麻省理工学院方案 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 中。

最新更新