# 在 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##
表示数字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
尝试生成比内部可用数字更多的数字 数字的机器表示将用“#”填充标记 多余的数字。这不是一个声明,执行 知道或跟踪数字的重要性,只是 机器将标记尝试产生 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 数字文字中的含义的主要内容,如果未能解决你的问题,请参考以下文章