运行R5RS的DrRacket表示1###
是完全有效的Scheme号,并打印值1000.0
。这让我相信英镑符号(#)表示数字不精确,但我不确定。该规范还说它是一个数字文字的有效语法,但它没有说明这些符号的含义。
有关计划编号文字中#符号的重要信息吗?
答案 0 :(得分:14)
哈希语法是在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(准确性s))
EDIT2
Gerald Jay Sussman写道为什么在这里引入语法:
http://groups.csail.mit.edu/mac/ftpdir/scheme-mail/HTML/rrrs-1994/msg00096.html
答案 1 :(得分:7)
以下是关于数值常数的R4RS和R5RS文档:
即便:
如果数字的书面表示没有精确性前缀,则常量可能是不精确的或精确的。如果它在数字位置包含小数点,指数或“#”字符则不准确,否则它是准确的。
除了0
以外,不确定它们是否意味着什么。