当 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 中。
在 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 中。