上記の続き

10ページほど読んだので、メモ。
束縛変数、自由変数などはラムダ計算とほぼおなじようだ。
リダクションもほぼおなじだが、チャンネルが絡んでくるのでちょっとちがってくる。
(lambda x:x * 2)3 -> 3 * 2
ラムダ計算だと、関数の右にくる値でリダクションするということに選択の余地は無いが、(リダクションを後回しにすることはできるけど)パイ計算だと一つのチャンネルに対して、値を送ろうとして待ち構えているプロセスが複数並列に存在する場合がある。
例えば: x(a).y! | x!<b> | x!
このようなとき、値を送る準備のできているプロセスのうち、どれが最初に発火するかは任意、というか非決定的。なので、リダクションの結果も非決定的になる。
x(a).y!
| x!<b> | x! →  y!<b> | x!
x(a).y!
| x!<b> | x! →  y! | x!<b>
上記のどちらか一方になると。あと、ラムダ計算では関数の引数に関数をわたすことで、いろいろごにょごにょできるわけだが、
パイ計算では、プロセスを渡す、というのはないが、チャンネルを渡す、ということができる。
チャンネルは、入出力の口のようなものなので、それが渡せれば、関数を渡すのと同等のことができる。
関数を渡す代わりに、チャンネルxとyを渡して、xで待ちつつ、xに入力が着たら、それをごにょごにょしてyに渡す、というようなことができる。
ちなみにラムダ計算の式はパイ計算にエンコードできる、と書いてあった。まだ確かめてないが、まぁ明らかにできそうだ。