Location : Home > Languages > Perl > Package
Title : Math::String::Charset::Wordlist
Toolbox Logo

名称

 Math::String::Charset::Wordlist - Math::String 用の文字セット


概要

use Math::String::Charset::Wordlist;

my $x = Math::String::Charset::Wordlist->new ( {
           file => 'path/dictionary.lst'
        } );


稼動要件

 perl5.005, Exporter, DynaLoader, Math::BigInt, Math::String::Charset


エクスポート

 何もエクスポートしない。


説明

 本モジュールでは Math::String オブジェクトを構築するための Charset オブジェクトを生成することができる。
 このオブジェクトは maps 外部ワードリスト(つまり1行に1語がある辞書ファイル)を Charset(各語が1文字である) にマップする。
 ワードリストファイルはアルファベット順に(sort -u で並び替えたように)なっていなければならず、そうでなければ文字列と数字の間の変換は信用できないものとなる。


エラー

 フィールド _error にエラーメッセージが格納され、die() がこのメッセージとともに呼び出される。もし die を使いたくなければ次のようにすればよい。

use Math::String::Charset::Wordlist;

$Math::String::Charset::Wordlist::die_on_error = 0;

$a = Math::String::Charset::Wordlist->new(); # エラー。空集合!
print $a->error(),"\n";

内部詳細

 本オブジェクトは計算結果(語がオフセット付きで格納)をキャッシュしているため、文字から数字への Math::String 変換を高速化している。逆も同じである。


メソッド

new()

Math::String::Charset::Wordlist->new();

 新しい Math::String::Charset::Wordlist オブジェクトを生成する。
 コンストラクタはハッシュ参照を取る。以下のキーを使うことができる。

minlen :最短文字列長。デフォルトは 0
maxlen :最大文字列長。デフォルトは 1
file :ワードリストファイルのパス/ファイル名
sep :セパレータの文字。 undef ならばなし

 結果の Charset は常にオーダーが 1, タイプは 2 となる。
 ワードリストファイルはアルファベット順に(sort -u で並び替えたように)なっていなければならず、そうでなければ文字列と数字の間の変換は信用できないものとなる。

minlen

 オプションで指定する最短の文字列長さ。これよりも短い文字列は妥当でないと判断される。
 (定義されていれば)maxlen よりも短くなければならない。未定義の場合は -inf に設定したと見なされる。
 Note that the minlen はより大きな値に設定されることもある。1 またはそれ以上に設定されれば 2, 3 文字の文字列は妥当と見なされる。この場合は minlen は Charset の最初の空でないクラスに設定される。
 ワードリストに対しては minlen は常に 0 である。(辞書の最初の語は '' である。)

maxlen

 オプションで指定する最長の文字列長さ。これよりも長い文字列は妥当でないと判断される。
 (定義されていれば)maxlen よりも短くなければならない。未定義の場合は +inf に設定したと見なされる。
 ワードリストに対しては maxlen は常に 1 である。(辞書の最後の語を最後の妥当な文字列とする。)

minlen()

$charset->minlen();

 最短文字列長を返す。

maxlen()

$charset->maxlen();

 最長短文字列長を返す。

length()

$charset->length();

 Charset における項目の数、より高次の Charset に対しては妥当な1文字長の文字列のインデクスを返す。$charset->class(1) へのショートカット。

count()

 文字列集合で記述されたあらゆる可能な文字列の数を正の BigInt として返す。上限がなくいくらでも長い文字列が可能であるので maxlen が未定義ならば 'inf' を返す。
 maxlen が定義されていれば、あらゆる可能な class() の値を計算するため最初の呼び出し時には実行に時間がかかるが、maxlen が非常に大きければ可能な限りキャッシュを行う。

class()

$charset->class($order);

 クラス内の項目数を返す。

print $charset->class(5); # 長さ5の文字列はいくつ?

char()

$charset->char($nr);

 集合の中から $nr 個めの文字または undef を返す。

print $charset->char(0);  # 最初
print $charset->char(1);  # 2番め
print $charset->char(-1); # 最後

lowest()

$charset->lowest($length);

 長さ $length の最初の文字列のインデクスを返す。以下のコマンドに等しい(しかも速い)。

$str = $charset->first($length);
$number = $charset->str2num($str);

highest()

$charset->highest($length);

 長さ $length の最後の文字列のインデクスを返す。以下のコマンドに等しい(しかも速い)。

$str = $charset->first($length+1);
$number = $charset->str2num($str);
$number--;

order()

$order = $charset->order();

 文字列集合の次数を返す。グループ化された文字列集合に対しては常に 1 である。type を見よ。

type()

$type = $charset->type();

 文字列集合のタイプを返す。グループ化された文字列集合に対しては常に 1 である。order を見よ。

charlen()

$character_length = $charset->charlen();

 集合内の1つの文字列集合の長さを返す。1以上の値である。グループ化された文字列集合で用いられる全ての文字列集合は、特にセパレータで指定されない限り同じ長さでなければならない。

seperator()

$sep = $charset->seperator();

 セパレータを返す。未定義なら undefined を返す。

chars()

$chars = $charset->chars( $bigint );

 $bigint(Math::BigInt または Math::String オブジェクト)を文字列に変換する際に文字列が持つべき文字の数を返す。これは以下のようにするよりも高速である。

$chars = length ("$math_string");

これは実際に文字列を構成しなくても済むからである。

first()

$charset->first( $length );

 文字列集合に従い、$length の長さの最初の文字列を返す。対応するインデクスについては lowest() を見よ。

last()

$charset->last( $length );

 文字列集合に従い、$length の長さの最後の文字列を返す。対応するインデクスについては highest() を見よ。

is_valid()

$charset->is_valid();

 文字列が文字列集合に従っているかを確認。

error()

$charset->error();

 文字列集合の構築が失敗したときにエラーがなければ "" 、あればエラーメッセージを返す。エラーメッセージを取得するために $Math::String::Charset::die_on_error を 0 に設定し、そうでなければプログラムは終了。

start()

$charset->start();

 リストコンテキストでは、最初の文字列の位置を示す start 集合における全てのキャラクタのリストを返す。
 スカラコンテキストでは、start 集合の長さを返す。
 1つまたはそれ以上のキャラクタからなる文字列を開始する全てのキャラクタの集合を start 集合と考えればよい。1つのキャラクタ文字列は ones で呼び出され、$charset->ones() を通じてアクセスされる。

end()

$charset->end();

 リストコンテキストでは、最後の文字列の位置を示す end 集合における全てのキャラクタのリストを返す。
 スカラコンテキストでは、end 集合の長さを返す。

ones()

$charset->ones();

 リストコンテキストでは、1つのキャラクタを構成する全ての文字列のリストを返す。
 スカラコンテキストでは、ones 集合の長さを返す。
 このリストは start と end のクロスである。
 あたかもあるキャラクタ内で同時に始まり終わる、唯一のキャラクタの文字列を考えればよい。
 ones における文字の順序は start における順序と同じである。

prev()

$string = Math::String->new( );
$charset->prev($string);

 文字列集合と文字列を与えられたときに、配列内の前の文字列を計算する。
 これは文字列のインデクスをデクリメントして変換するよりも速い。このルーチンは内部で主に Math::String を使っており、所与の Math::String のキャッシュを更新している。

next()

$string = Math::String->new( );
$charset->next($string);

 文字列集合と文字列を与えられたときに、配列内の次の文字列を計算する。
 これは文字列のインデクスをインクリメントして変換するよりも速い。このルーチンは内部で主に Math::String を使っており、所与の Math::String のキャッシュを更新している。

file()

$file = $charset->file();

 文字列集合を構成するために利用された辞書ファイルのパス/ファイル名を返す。


使用例

use Math::String;
use Math::String::Charset::Wordlist;

my $cs = Math::String::Charset::Wordlist->new( { file => 'big.sorted' } );
my $x =  Math::String->new('',$cs)->binc();      # $x は最初の語

while ($x < Math::BigInt->new(10))               # Math::BigInt->new() necc.!
   {
    # 最初の 10 語を出力
    print $x++,"\n";
}

バグ

 まだ見つかっていない。


著者

 もし本モジュールをユーザのプロジェクトで利用することがあれば教えて欲しい。どのように私のコードが役に立ったのか知りたい。

 (C) Copyright by Tels http://bloodgate.com 2003-2004.

Toolbox Logo
Updated : 2008/05/27