R5RS 6.3.3说为什么(EQ“高,bitBlt(与字符串>符号 “高,bitBlt”)?) - > #F
(eq? 'bitBlt (string->symbol "bitBlt")) ==> #f
这是否意味着
(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #f?
麋鹿返回#牛逼!
R5RS还说
(string->symbol "mISSISSIppi") ==> the symbol with name "mISSISSIppi"
(推测这意味着“密西西比州)
和
(symbol->string 'Martin) ==> "martin"
含义符号 - >字符串返回标准情况下的串(小写在这个例子中)。
所以,如果我扩大我的第二个例子
(symbol->string 'bitBlt) ==> "bitblt"
(string->symbol (symbol->string 'bitBlt)) ==> 'bitblt
,因此
(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #t
,因为符号的情况下从R5RS不敏感
(eq? 'mISSISSIppi 'mississippi) ==> #t
所以,如果我扩大我原来的问题
(string->symbol "bitBlt") ==> 'bitblt
,因此
(eq? 'bitBlt (string->symbol "bitBlt")) ==> #t
,对吗?但R5Rs说#f!
我在哪里错了?
为什么要指定此行为?
编号:
http://people.csail.mit.edu/jaffer/r5rs_8.html#SEC49
http://bugs.call-cc.org/browser/numbers/r4rstest.scm?rev=1线468
实际会话例如:
3> (display 'bitBlt)
bitblt
3> (display (string->symbol "bitBlt"))
bitBlt
3> (eq? 'bitBlt (string->symbol "bitBlt"))
#f
3> (eq? 'bitblt (string->symbol "bitBlt"))
#f
3> (eq? 'bitblt (string->symbol "bitblt"))
#t
3> (eq? 'bitBlt (string->symbol (symbol->string 'bitBlt)))
#t
3> (eq? 'mISSISSIppi 'mississippi)
#t
我添加的会话输出质疑。谢谢。我不确定这是一个案例问题。如果这是一个案例问题,当然表达式3或4应该是真的?既然它在R4RStest.scm中,我怀疑是更深层的东西,但是我看不到。 Like(guessing)string-> symbol必须产生一个唯一的符号,不能重新使用现有符号的存储。我关心的并不是'麋鹿' - 它可能是错误的 - 我试图理解R5RS,以及我想,这个R4RStest.scm文件。在我看来,这种古怪会残留像我这样的傻子,他们可能从来没有弄清楚哪里出了问题。 – philcolbourn 2012-02-12 14:28:14
@philcolbourn:这很明显,你的'read'规范化了case,而'string-> symbol'没有。由于初始输入被归一化为'(字符串 - >符号(符号 - >字符串'bitBlt))'的结果应该打印为'bitblt'。 – 2012-02-12 15:53:28
这是我的第一个想法,但为什么然后是(eq?'bitblt(string-> symbol“bitBlt”))==> #f? (来自会话输出的第四个结果),为什么它关心符号的情况下(eq?'mISSISSIppi'mississippi)==> #t? (第7个结果) – philcolbourn 2012-02-13 04:17:45