14

运行 R5RS 的 DrRacket 说这1###是一个完全有效的方案编号并打印1000.0. 这让我相信井号 (#) 表示数字不准确,但我不确定。规范还说它是数字文字的有效语法,但没有说明这些符号的含义。

关于方案编号文字中的 # 符号表示什么的任何想法?

4

2 回答 2

16

哈希语法是在 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

于 2012-06-07T16:59:20.347 回答
8

这是关于数字常量的 R4RS 和 R5RS 文档:

以机智:

如果数字的书面表示没有精确前缀,则常数可能不精确或精确。如果它包含小数点、指数或“#”字符代替数字,则为不精确,否则为精确。

不确定它们是否意味着除此之外的任何内容,除了0.

于 2012-06-07T15:57:59.517 回答