R5RS 6.3.3 说
(eq? 'bitBlt (string->symbol "bitBlt")) ==> #f
这是否意味着
(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #f?
麋鹿返回#t!
R5RS 还说
(string->symbol "mISSISSIppi") ==> the symbol with name "mISSISSIppi"
(大概这意味着'mISSISSIPi)
和
(symbol->string 'Martin) ==> "martin"
意味着 symbol->string 返回标准大小写的字符串(本例中为小写)。
所以如果我扩展我的第二个例子
(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