大文字と小文字が混在するシンボル値を解釈するようにSchemeに要求すると、小文字のバージョンのみが返されるのはなぜですか?
#;> 'HelloWorld
helloworld
#;> 'helloworld
helloworld
上記の例では、siscを使用しています
大文字と小文字が混在するシンボル値を解釈するようにSchemeに要求すると、小文字のバージョンのみが返されるのはなぜですか?
#;> 'HelloWorld
helloworld
#;> 'helloworld
helloworld
上記の例では、siscを使用しています
R5RSは、すべての記号で大文字と小文字が区別されず、大文字と小文字が変更される可能性があると述べています。
(eq? 'a 'A)
一部の実装ではこれを異なる方法で処理することに注意してください。を返す必要はありませんが(ただし、SISCの場合のように一般的です)#t
、関数を定義する場合は、でa
呼び出すことができる必要があります(A)
。
一部のSchemeインタープリターでは、記号で大文字と小文字が区別されませんが、SISCでは大文字と小文字が区別されないようです。これは実装に依存し、異なる実装間で一貫性がありません。たとえば、これらはRacketの異なるシンボルです。
(equal? 'HelloWorld 'helloworld)
=> #f
このFAQによると:
R5RSは、Schemeリーダーを介して読み取られる識別子と記号(つまり、Schemeプログラムを読み取る場合)は大文字と小文字を区別せず、大文字と小文字が変更される可能性があると述べています。したがって
(eq? 'a 'A)
、と同じで(EQ? 'a 'A)
あり、を返します#t
。ただし、これに依存するプログラムを作成することは悪いスタイルと見なされることに注意してください。たとえば、関数を定義してから、またはfoo
を使用して呼び出します。(Foo)
(FOO)
ほとんどのバージョンのSchemeは、その親言語であるLispと同様に、大文字と小文字を区別しないため、実装で必要な方法でシンボルをインターンできます。SchemeとLispのほとんどのバージョンは大文字の記号を使用していますが、ユーザーが入力した大文字と小文字を問わず、小文字も使用できます。R6RS以降、ほとんどのSchemeシステムでは大文字と小文字が区別され、入力されたとおりにシンボルがインターンされます。