ModuleIterator - モジュールの要素を繰り返し実行
|
使い方
|
|
module() export ModuleIterator, ...; ... end module;
|
|
説明
|
|
•
|
ModuleIterator ルーチンにより、module または object はモジュール (またはオブジェクト) 内に含まれる要素を繰り返すために使用可能なインターフェースを出力します。
|
•
|
モジュールが ModuleIterator ルーチンを定義する場合、そのモジュールは for-in ループのコンテナとして、および seq、add および mul のコールとして使用できます。
|
•
|
ModuleIterator のコールは、2 つのプロシージャを出力します。
|
>
|
(hasNext,getNext) := ModuleIterator( obj );
|
hasNext 関数は、残っている要素があるかどうかに応じて true または false を出力します。
getNext 関数は、アクセスする次の関数を出力します。
•
|
これらのルーチンを使用するための基本的なパターンは、以下のとおりです。
|
>
|
while hasNext() do
e := getNext();
# Do something with e.
od;
|
•
|
hasNext が true を出力する場合は、getNext のコールは常に安全です。hasNext のコールが false を出力する場合は、getNext のコールのリターン値は未指定です。
|
|
|
互換性
|
|
•
|
ModuleIterator コマンドは Maple 16 で導入されました。
|
|
|
例
|
|
すべての素数の処理を繰り返すモジュールを作成します。
>
|
Primes := module()
export ModuleIterator := proc()
local i;
i := 1;
(
proc()
i := nextprime( i );
true;
end,
proc()
i;
end
)
end;
end;
|
| (1) |
素数は無限にあるため、独自の終了条件を指定する必要があります。
>
|
for i in Primes
do
if ( i > 100 ) then
break;
end;
print( i );
end;
|
| (2) |
コンテナオブジェクトと ModuleIterator は Maple 組み込み構造のように使用できます。
>
|
module IterObj()
option object;
local _list;
export setValue::static := proc( obj::IterObj, l::list )
obj:-_list := l
end;
export ModuleIterator::static := proc( obj::IterObj )
local i, l;
i := 1;
l := obj:-_list;
(
proc()
i <= numelems( l )
end,
proc()
local e;
e := l[i];
i := i+1;
e;
end
);
end;
end:
|
>
|
io := Object( IterObj ):
|
>
|
setValue( io, [1,2,3] ):
|
>
|
( hasNext, getNext ) := ModuleIterator( io );
|
| (3) |
>
|
while hasNext() do
e := getNext();
od;
|
| (4) |
| (5) |
| (6) |
| (7) |
| (8) |
|
|
関連項目
|
|
add, for, module, mul, Object, Object,create, Object,methods, Object,overview, procedure, seq
|
|
Download Help Document
Was this information helpful?