# 在 Scheme 数字文字中的含义

Posted

技术标签:

【中文标题】# 在 Scheme 数字文字中的含义【英文标题】:Meaning of # in Scheme number literals 【发布时间】:2012-06-11 16:51:09 【问题描述】:

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

对于 Scheme 数字文字中的 # 符号表示什么有什么想法吗?

【问题讨论】:

【参考方案1】:

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

R4RS 6.5.4 Syntax of numerical constants R5RS 6.2.4 Syntax of numerical constants。

也就是说:

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

除了0之外,不确定它们是否意味着其他任何东西。

【讨论】:

【参考方案2】:

哈希语法是在 1989 年引入的。Scheme 作者邮件列表上有一个关于不精确数字的讨论,其中包含几个不错的想法。有些流行,有些没有。

http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/html/rrrs-1989/msg00178.html

一个被卡住的想法是引入# 来代表一个未知数字。 如果您有两个有效数字的测量值,您可以用23## 表示数字23 是已知的,但最后一个数字是未知的。如果你写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

尝试生成比内部可用数字更多的数字 数字的机器表示将用“#”填充标记 多余的数字。这不是一个声明,执行 知道或跟踪数字的重要性,只是 机器将标记尝试产生 20 位数字的数字 只有 15 位机器表示:

3.14158265358979##### ; (flo 20 (精确度))

EDIT2

Gerald Jay Sussman 写了为什么在此处引入语法:

http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1994/msg00096.html

【讨论】:

+1,比我的有用得多,但我会把它留给链接。这是在 RnRS 的其他任何地方指定的吗? 很难找到很多。一个花絮来自格式部分的 R3RS 手册。如果一个实现被要求写一个 20 位的数字,但内部表示中只有 15 位是已知的,那么它可以写 # 来代替未知的数字。由于write 可以产生这些数字,过程read 也必须处理这些。

以上是关于# 在 Scheme 数字文字中的含义的主要内容,如果未能解决你的问题,请参考以下文章

数字文字混淆中的 JavaScript 指数

怎么把EXCEL中的一列文字型别批量的改成数字

如何让div中的文字只显示一行,多余的文字隐藏并加上省略号

如何分别设定word文字和数字两种字型

表格怎么让文字居中?

Button的设计原则