このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

プレガードとポストガードと並行実行

p・A が、論理式pでガードされた文だとする。pが0(false)のときは、p・A = O となる。Oはクリーネ代数のゼロで、エラー、失敗、カオス、無限走行などを意味する。p・A + p'・B として if p then A else B endif を表現できる;ここで、p'はpの否定とする。

A・p をpでポストガードされた文だとする。Aが正常に実行され、かつpのときはAの結果がプログラムの結果、そうでないときはOとなる。A・p + B・p' も定義できるが、これはどういう意味だろうか? (A and p) orelse B みたいな感じ?

  • Aをしてpならそれでよし、そうでないならBの結果を採用する。
  • AとBを同時実行して、pであるならAを、そうでないならBの結果を採用する。

Aと実行した後でないとpの判定が出来ないので無駄な感じだが、通常のif文でも分岐の並行実行を行い、条件文の判定が遅れるなら同じようなものだ。なんでも並行実行の世界なら、ポストガードは別に変な概念じゃないな。