論理演算子は、真偽を入力して全て正しいかどうか(AND)、1つでも正しいのがあるか(OR)みたいな論理演算をするもの。
OMではomANDとomORが用意されている。
Functions->OM Kernel->Control->Logical Operatorsから、もしくは入力ボックス名前打ち込みで呼び出す。
OMではomANDとomORが用意されている。
Functions->OM Kernel->Control->Logical Operatorsから、もしくは入力ボックス名前打ち込みで呼び出す。
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
特徴
インプット
Shift+>で増やして使う。好きなだけ増やせる。
使用
論理演算子はそれぞれのインプットを順番にチェックする。
その際nilでないデータは全て(数字でも文字でも)真として扱われる。
その際nilでないデータは全て(数字でも文字でも)真として扱われる。
動作
omORは1つでもt的要素をもらったらその時点でt的要素を返し、全てnilならnilを返す。
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
- このomORは1つ目をチェックしてAをもらう。これはnilではないのでt的要素として扱われる。
- omORは1つtがあったのでAをユーザーに返す。
omANDは全てt的要素の場合のみt的要素を返し、1つでもnilをもらったらその時点でnilを返す。
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
- このomANDは1つ目をチェックしてAをもらう。これはnilではないのでt的要素として扱われる。
- 続いて2つ目をチェックしてBをもらう。これもnilではないのでt的要素として扱われる。
- 全てのインプットがtだったので、omANDは最後にもらったt的要素であるBを返す。
例
#ref error :画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
- om-randomは1から5までの整数のうち1つをランダムに選ぶ。下のList関数の作用で4回呼ばれるが、その度に違う値を返さないようにワンスモードにしてある。
- リストの1番目には、選んだ数字が1より大きかったらt、そうでなかったらnilが入る。
- リストの2番目には、選んだ数字が4より小さかったらt、そうでなかったらnilが入る。
- リストの3番目には、選んだ数字が「1より大きい」がtでなおかつ「4より小さい」がtである場合のみtが入る。
- リストの4番目には、選んだ数字がそのまま入る。
論理演算子と比較述語の組み合わせ
正しくない組み方
文字通りに組んでもうまくいくか分からない、OM的に正しい組み方じゃないとダメですよ、というお話。
例えば「『1か6のどちらかが2より大きい』は正しいかどうか。(正しい。)」というプログラムを考える。これを文字通りに組んでしまうと下図の左になる。がこれはtrueにならない。


- omOR関数は第1インプットをチェックする。すると1が入っている。これはtrue扱いなのでom>関数に1を渡してomOR関数のお仕事は終了。
- om>関数は「1>2」を考える。これは正しくないのでnilを返す。
人間なら「1か6のどちらかが2より大きいのかどうか」と言えば、「1と6をそれぞれ2と比べないといけないな」と理解できるが、プログラムはそういうふうになっていない。現にこのプログラムは6と2を一度も比較しない。
正しく書くなら右図上。「(何か)>2」ってのを再利用したいならラムダにしてfuncallするとか(右図下)。
正しく書くなら右図上。「(何か)>2」ってのを再利用したいならラムダにしてfuncallするとか(右図下)。
組み方の原則
つまり比較述語(>とか=とか)を先に、論理演算子(∧、∨)を後にした方が原則うまくいきそうだ。
添付ファイル