R5RS 6.3.3はなぜ(EQ「のBitBlt(はstring->シンボル "のBitBlt")?)である - > #fを
(eq? 'bitBlt (string->symbol "bitBlt")) ==> #f
が、これは
(eq? 'bitBlt (string->symbol (symbol->string 'bitBlt))) ==> #f?
ヘラジカは#を返すことを意味していますと言いますt!
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
実際のセッションの例:あなたは「実装の標準ケースが下部ケースであることを[s]と仮定引用
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にあるので、私はもっと深い疑いを持っていますが、私は何が見えません。同様の(推測)文字列 - >シンボルは、固有のシンボルを生成し、既存のシンボルの記憶を再利用してはならない。私が心配しているのは「エルク」ではありません。間違っている可能性があります。私はR5RSを理解しようとしており、このR4RStest.scmファイルも想定しています。このような奇妙なことは私のようなダミーを切り詰めて、何がうまくいかないのか決して分からないように思えます。 – philcolbourn
@philcolbourn: 'read'は大文字小文字を区別しますが、' string-> symbol'は大文字小文字を区別しません。 '(string-> symbol(symbol-> string 'bitBlt))'の結果は、初期入力が正規化されているので 'bitblt'として出力されます。 –
これは私の最初の考えでしたが、なぜそれが(eq? 'bitblt(string-> symbol "bitBlt"))==> #fですか? (セッション出力からの4番目の結果)、なぜ(eq? 'mISSISSIppi' mississippi)==> #t? (第7の結果) – philcolbourn