next up previous contents
Next: 2.4 やや高度なネットワークの組み方 Up: 2.3 プロセス・ネットワーク構築上の注意点 Previous: 2.3.5 カオスなネットワークはやめよう

2.3.6 マージャ

プロセス・ネットワークの重要な要素であるマージャには, 入力ストリームの本数という問題点がある. 次のマージャプログラムは入力ストリーム2本用のものである.

        merge([],In2,Out) :- Out=In2.
        merge(In1,[],Out) :- Out=In1.
        merge([Msg|In1],In2,Out) :- Out=[Msg|OutTail], merge(In1,In2,OutTail).
        merge(In1,[Msg|In2],Out) :- Out=[Msg|OutTail], merge(In1,In2,OutTail).

入力ストリームを3本, 4本と増やしたい場合には, 3本用マージャ, 4本用マージャと一つ一つプログラムを用意してやるか, 2本用マージャでもって木構造をつくる (図 2.5参照)かしなければならない. 前者の方法では, プログラムサイズが大きくなるという問題点がある. 後者の方法では, 入力ストリームがN本あった場合, 最低でも深さの木構造を構成してやる必要があり, 実行時の効率も悪くなるgif.

  
図 2.5: マージャのツリー構造

この問題を解決するためにKLIC処理系では組み込み述語として マージャをサポートする.

これは, ``merge(In,Out)'' という形で呼び出し, ``In'' に入力スト リームを要素とするベクトルをunifyしてやることで利用出来る. 例えば, 以下の二つのボディゴールによって, ``In1,In2,In3'' を入力ストリーム, ``Out'' を出力ストリームとする入力ストリーム3本用マージャが用 意出来る.

            merge(In,Out),
            In = { In1, In2, In3 },



next up previous contents
Next: 2.4 やや高度なネットワークの組み方 Up: 2.3 プロセス・ネットワーク構築上の注意点 Previous: 2.3.5 カオスなネットワークはやめよう



KLIC