2012-02-12 59 views
0

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 

回答

1

example你报价“假设[S]的执行标准情况下是小写”。这意味着表达式'bitBlt实际上扩展为符号bitblt。符号实际上并不区分大小写; read可能正常化情况。

string->symbol的语义不同于的read不同,并且该过程可以返回一个大小写混合符号:

此过程可以创建与包含在非标准情况下特殊字符或字母名称的符号,但创建这样的符号通常是一个糟糕的主意,因为在Scheme的某些实现中,它们不能被视为自己。

在您的实施中,string->symbol似乎也正常化大小写。检查输出

(display 'bitBlt) 
(display (string->symbol "bitBlt")) 

可以肯定。

(我以前的答案是错的。)

+0

我添加的会话输出质疑。谢谢。我不确定这是一个案例问题。如果这是一个案例问题,当然表达式3或4应该是真的?既然它在R4RStest.scm中,我怀疑是更深层的东西,但是我看不到。 Like(guessing)string-> symbol必须产生一个唯一的符号,不能重新使用现有符号的存储。我关心的并不是'麋鹿' - 它可能是错误的 - 我试图理解R5RS,以及我想,这个R4RStest.scm文件。在我看来,这种古怪会残留像我这样的傻子,他们可能从来没有弄清楚哪里出了问题。 – philcolbourn 2012-02-12 14:28:14

+0

@philcolbourn:这很明显,你的'read'规范化了case,而'string-> symbol'没有。由于初始输入被归一化为'(字符串 - >符号(符号 - >字符串'bitBlt))'的结果应该打印为'bitblt'。 – 2012-02-12 15:53:28

+0

这是我的第一个想法,但为什么然后是(eq?'bitblt(string-> symbol“bitBlt”))==> #f? (来自会话输出的第四个结果),为什么它关心符号的情况下(eq?'mISSISSIppi'mississippi)==> #t? (第7个结果) – philcolbourn 2012-02-13 04:17:45