先学期の大学の講義で「ベキ則にしたがう現象の例を挙げ,実際に成り立つことを確認せよ」という趣旨のレポート課題が出されました.そこで,自然言語では一般に成り立つことが知られている 言語のコードにおいても成り立つかどうかを調べました.本稿では,この実験の結果について簡単にまとめてみようと思います.
あとはマッチした各制御綴の出現回数を数え上げるだけで今回の目的を達することができます.
以下はファイルパスを指定して実行すると,そのファイルに含まれる制御綴の出現順位と出現回数の関係をプロットしたグラフを出力する簡単な スクリプトです.動作確認は で行いました.
これを見ると概ね傾きが の直線上に乗っており,Zipf の法則が成り立っていると言えそうです.
latex.ltx についてのみ解析を行って「TeX の法則が成り立っている」と主張するのは少々強引なので,他のファイルについても同様の解析をしてみました.
なお,他のさまざまな パッケージについても,先述のスクリプトを用いて同様に解析できるはずです.特に,TeX 利用者の場合は
ただし,一般に の法則が成り立っていることを確認するには,ある程度コード量があるものを対象とする必要があります.また,私の簡易スクリプトはファイル読み込み(\\input, \\RequirePackage など)に対応していないため,単一ファイルで構成されているパッケージでない限りはそのまま流用することはできないので注意してください.
人工言語においても の法則が発現するという結果は特に新しいものではなく,古いですが例えば以下の論文がそのようなことを述べています.
これによると,コマンド言語(人工言語)が,特にユーザによってカスタマイズされると,Zipf の法則にしたがうような頻度分布を示す傾向があるとされています.TeX 言語におけるマクロの機能はまさにユーザによるコマンド(制御綴)のカスタマイズにあたるものなので,今回の結果はその具体例と言えるでしょう.
こうした調査の応用としては,これらの結果を新しいマクロ体系(フォーマット)や のクラス・パッケージなどを設計する際の参考にすることが考えられます.
ユーザによる最適化と の法則の発現の関係についてはより深く解析していく必要がありますが,もしこれらの間に何らかの因果関係があるとすれば,設計したプロダクトの一般的な使用例において の法則が成り立つかどうかが,設計の良し悪しを判定する1つのバロメータになり得ます.また,調査の副産物である頻度表を用いることで,高頻度で使用されるユーザ用命令の「長さ」を最適化することも有効でしょう.