R5RS6.3.3によると
(eq? 'bitBlt (string->symbol "bitBlt")) ==> #f
これはそれを意味しますか
(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #f?
elkは#tを返します!
R5RSも言います
(string->symbol "mISSISSIppi") ==> the symbol with name "mISSISSIppi"
(おそらくこれは'mISSISSIppiを意味します)
と
(symbol->string 'Martin) ==> "martin"
これは、symbol-> stringが標準の場合(この例では小文字)で文字列を返すことを意味します。
したがって、2番目の例を拡張すると
(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
右?しかし、R5Rは#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