6文字までのアトム

昨日、irc.freenode.net#Lisp_Schemeで、

17:40 (zick) 分かりにくい名前といえばrplacaなんか分かりにくいですよね。
(中略)
17:43 (g000001) 名前に6文字制限があったのでは?みたいな話も聞いたことがあるんですが、
17:43 (g000001) LISP1.5はユーザは、6文字以上の関数も定義できるし、
17:44 (g000001) 真相が知りたいと、思ってました、そういえば。

という会話があり、今日になって中西先生の「Lisp入門」に
LISP1.5のアトムの格納方法が書いてあったのを思い出し、
大学図書館に借りに行きました。
(これでこの本を借りるのはもう3、4回目です。いっそのこと
どこかで探して買ったほうがいいかも。)
それによると、
1)アトムの印字名はアトムの属性リストにPNAMEという属性として含まれている。
2)印字名は印字名リストによって構成される。
3)文字列はフルワード領域という異なる場所に格納される。
4)フルワード領域の一つの箱に収めることが出来る文字数は機械によって異なる。
とのようにあります。
36bitが1ワードの機械では恐らく1つの箱に6文字が格納されます。
たとえば、アトムAは
( APVAL Aの持つ値 PNAME (“A”))
のようなリストから構成されます。
ただし、はこのリストがアトムであることを示す特殊なデータ、
“A”は文字列Aを含むフルワード領域の箱への参照です。
この(“A”)の部分を印字名リストと呼びます。
同様に、アトム ABCXYZ123Q の印字名リストを考えると次のようになります。
(ABCXYZ 123Q??)
?は余ったところに入れる特殊な文字(NULL文字でしょうか?)を表します。
この図からわかるように、アトムの名前が6文字を超えると、
フルワード領域の箱、リスト領域の箱両方を余分に消費します。
これを考えるとアトムの名前をなるべく6文字以内に抑えたのも納得できます。

Leave a Reply