Think Stitch
PRINCIPIA  最近の更新


パラメータによるプロセスの再利用

改名を使う代わりに、使用するイベントやチャネルをパラメータ化することによってもプロセスを再利用することができます。 プロセス式の場合はプロセスパラメータ、状態遷移図の場合には状態変数を使います。

ここでは状態変数を使う例を見てみます。 キューを表すプロセスを定義します。改名による再利用で見たものと異なり、データを格納するリスト q に加えて、入出力それぞれのチャネル in, out と格納できる最大のデータ数 n が状態変数になっています。 これら状態変数の値を変えれば、様々なプロセスと接続することができるというわけです。

状態変数のふつうの使い方と異なり、これらの変数の値が実行中に変化することはありません。 このことをはっきり示すために、transformation では target 式を使いました。 これで状態変数 q だけが変化するとが見てすぐにわかります。

プロセスを利用するには、具体的なチャネルを用意して指定する必要があります。 ここではパラメータ名と同じチャネルを用意しました(例としてはあまりよくなかったですね)。

(define D '((0) (1) (2)))

(define-channel in (x) D)
(define-channel out (x) D)

プロセス QUE を探査するために、状態変数の初期値をプロパティウィンドウで指定します。 格納できるデータの最大個数は3としました。

計算木は次のようになります。

環境ウィンドウを見ると、具体的なチャネルが入っていることが確認できます。

改名とパラメータのどちらを使うかは趣味の問題だろうと思います。

再利用の例

プロセス QUE を2つ作って連結してみます。 間をつなぐためのチャネル mid を用意します。

(define-channel mid (x) D)

それぞれのキューの長さを 2 と 3 にします。 並行合成は改名のときよりも見やすいですね。 チャネル mid で連結している様子がよく見えます。

(define-process SYS
  (hpar (list mid)
    (QUE in mid 2 '())
    (QUE mid out 3 '())))

連結されたキューは、合計5個までデータを格納できるはずです。 検査してみると、確かにそうなっています。

2013/08/11
© 2013,2014,2015 PRINCIPIA Limited