运行 R5RS 的 DrRacket 说这1###
是一个完全有效的方案编号并打印1000.0
. 这让我相信井号 (#) 表示数字不准确,但我不确定。规范还说它是数字文字的有效语法,但没有说明这些符号的含义。
关于方案编号文字中的 # 符号表示什么的任何想法?
哈希语法是在 1989 年引入的。Scheme 作者邮件列表上有一个关于不精确数字的讨论,其中包含几个不错的想法。有些人流行起来,有些人没有。
http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1989/msg00178.html
一个坚持的想法是引入#
代表未知数字。如果您有两个有效数字的测量值,您可以用23##
该数字表示2
并且3
是已知的,但最后一个数字是未知的。如果你写2300
,那么你看不出两个零是不可信的。当我看到我期望23##
评估为 2350 的语法时,但(我相信)解释是依赖于实现的。许多实现解释23##
为 2300。
这里正式介绍了语法:
http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1989/msg00324.html
编辑
来自http://groups.csail.mit.edu/mac/ftpdir/scheme-reports/r3rs-html/r3rs_8.html#SEC52
尝试产生比内部机器表示的数字更多的数字时,将用“#”标记填充多余的数字。这并不是说实现知道或跟踪数字的重要性,只是机器将标记尝试生成只有 15 位机器表示的数字的 20 位数字:
3.14158265358979#####;(flo 20 (精确度))
编辑2
Gerald Jay Sussman 写了为什么在此处引入语法:
http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1994/msg00096.html
这是关于数字常量的 R4RS 和 R5RS 文档:
以机智:
如果数字的书面表示没有精确前缀,则常数可能不精确或精确。如果它包含小数点、指数或“#”字符代替数字,则为不精确,否则为精确。
不确定它们是否意味着除此之外的任何内容,除了0
.