並列論理和
研究室の4年生&M1輪講に出てきて、そういえばここに書いたことはなかったので紹介してみる。
MLでもSchemeでもCでも、大概のプログラミング言語の論理和(or)演算子は「第一引数が真になったら、第二引数に関わらず真を返す」ことになっています。なので、
int f() { return 1; } int g() { return g(); } int main() { return f() || g(); }
というプログラムは、ちゃんと1を返します。
では、「第一引数と第二引数のどちらかが真になったら、もう一方の引数に関わらず真を返す」ような論理和演算「por」は実装できるでしょうか? つまり、
int main() { return por(f(), g()) && por(g(), f()) && !por(0, 0); }
のようなプログラムが1を返す「por」マクロは書けるでしょうか? ただし、OSのシステムコールや割り込み等は使わないこととします。もちろん、上のmain関数以外の使い方をした場合でも、ちゃんとporとして動作しないと駄目です。(MLやSchemeだったら、intを受け取るマクロのかわりに、boolを返す関数を受け取るような高階関数としてもOKです。)
続きはCMの後で。