Lisp系の言語は歴史的にシンボルの大文字小文字を区別していません。 しかしSchemeはR6RSからその伝統より離脱し、シンボルを読む際に大文字小文字を区別 するようになりました。(但し、R5RSの範囲内でも処理系内部では 大文字小文字を区別することになってます。 ここで問題としているのは読み込み時の動作です。)
Gaucheの入出力ルーチンも、デフォルトではシンボルの大文字小文字を区別します。 ただし、古いコードとの互換性のために、リーダを大文字小文字を区別しないモードにすることが できます。
#!fold-case
リーダディレクティブを使うGaucheはプログラムを読み込む時に、トークン#!fold-case
を見ると大文字小文字を
区別しないモードに切り替わります。トークン#!no-fold-case
は
その逆の効果、すなわち大文字小文字を区別するモードへと切り替えます。
これらのトークンは、それが読まれたポートからの以降の読み込みに影響を
与えます。切り替えるトークンが再び読まれるか、EOFに出会うまで影響は継続します。
#!
構文についてより詳しくは字句構造を参照してください。
この動作はR6RS及びR7RSで規定されています。
-fcase-fold
コマンドライン引数を使うまた、gosh
インタプリタの起動時に-fcase-fold
コマンドライン引数を
与えると、Gaucheは大文字小文字を区別しないモードで動作します
(コマンドラインオプション参照)。
このモードでは、リーダはシンボルの読み込みの際に大文字を小文字に変換します。
大文字を含んでいるシンボルに関しては、‘|’ 文字でエスケープされて書き出されます
(シンボル参照)。