条件子

Mathematica では,特定条件が満たされるときだけに特定の式を評価させるための指定を行うことができるようになっている.これは,次に示す方法で条件子を設定することで行う.

lhs:=rhs/;test判定式 test の評価結果がTrueのときだけ定義を有効にする
If[test,then,else]判定式 testTrueなら式 then を,Falseなら式 else を評価する
Which[test1,value1,test2,...]判定式 を順に評価していき,最初にTrueになる判定式に対応した値を返す
Switch[expr,form1,value1,form2,...]expr を形 と比較していき,最初にマッチする形に対応した値を返す
Switch[expr,form1,value1,form2,...,_,def]def をデフォルト値として使う
Piecewise[{{value1,test1},...},def]Trueを与える最初の に当たる値を返す

条件文

判定式はFalseを与える.このため,「else」に対応する式が返される.
In[1]:=
Click for copyable input
Out[1]=
この場合は,「else」式だけが評価される.

Mathematica 言語によるプログラムの記述で分枝制御を行うには基本的に2つの方法を使う.1つ目は,単一定義を作り,右辺にIf関数による選択肢を与える方法で,2つ目は,複数の定義を作り,各定義を適切な条件で制御する方法である.複数の定義を使った方が,プログラムを読みやすくでき,変更も簡単になる.

ステップ関数を定義する.値はのときにで,それ以外はとする.
In[3]:=
Click for copyable input
条件を使い,ステップ関数の正の部分を定義する.
In[4]:=
Click for copyable input
これは,関数の負の部分を定義する.
In[5]:=
Click for copyable input
条件を使った定義をすべて表示させる.

選択肢が2つありどちらかを選択するには関数Ifを使うことができる.しかし,選択肢がさらにある場合もある.そのようなときの方法として,ネストさせた複数のIf関数を使うことが考えられる.しかし,普通は,WhichSwitch等の関数を使う方がよい.

3つの定義域を持つ関数を定義する.第3条件をTrueとすることで,第1と第2定義域に入らないときのデフォルトを与えておく.
In[7]:=
Click for copyable input
これにはWhichの第1ケースが使われる.
In[8]:=
Click for copyable input
Out[8]=
第3ケースが使われる.
In[9]:=
Click for copyable input
Out[9]=
を法とした引数が取る値に応じて戻り値が変わる関数を定義する.
In[10]:=
Click for copyable input
Mod[7, 3]だから,Switchの第2ケースが使われる.
In[11]:=
Click for copyable input
Out[11]=
にもにもマッチしない.しかし,パターンにはマッチする.
In[12]:=
Click for copyable input
Out[12]=

これは重要なことだが,Mathematica のようなシンボル式の処理システムでは,条件によってはTrueにも,Falseにもならないことがある.したがって,例えば,条件では,の両方の数値的な値が判明しない限りTrueFalseの判定は付かない.

この場合,条件のTrueFalseの判定は付かない.このため,If式は評価されない.
In[13]:=
Click for copyable input
Out[13]=
If式に第4の引数を特別に加え,TrueFalseの判定が付かないときのデフォルト値を提供する.
In[14]:=
Click for copyable input
Out[14]=
If[test,then,else,unknown]testTrueでもFalseでもないときに使う式を含むIfの形
TrueQ[expr]exprTrueのときはTrueを返し,それ以外のときはFalseを返す
lhs===rhsあるいはSameQ[lhs,rhs]左辺 lhs と右辺 rhs が等しいときはTrueを返し,そうでなければFalseを返す
lhs=!=rhsあるいはUnsameQ[lhs,rhs]左辺 lhs と右辺 rhs が等しくないときはTrueを返し,そうでなければFalse を返す
MatchQ[expr,form]expr がパターン form にマッチするときはTrueを返し,そうでなければをFalse返す

シンボル式による条件を扱うための関数

この式はシンボル的な代数式としてそのまま残される.
In[15]:=
Click for copyable input
Out[15]=
TrueQ[expr]において expr が明らかにTrueにならなければ,exprFalseであるものとみなされる.
In[16]:=
Click for copyable input
Out[16]=
と違い,では,両辺が明示的に等しいかどうかが判定される.この場合は等しくない.
In[17]:=
Click for copyable input
Out[17]=

の間には次の大きな相違点がある.前者は常にTrueFalseを返すが,後者はシンボル形式のまま入力を残すことがある(「方程式」を参照).は式の構造を判定したいときによく使われ,は数学的な等しさを判定したいときに使う.パターンマッチを行う Mathematica の制御部では,実効的なの機能が使われ,ある式が別の式に記述通りにマッチするかどうかが判断される.

を使い両辺の構造が同じか判定する.
In[18]:=
Click for copyable input
Out[18]=
この場合,演算子はあまり役に立つ結果を出してくれない.
In[19]:=
Click for copyable input
Out[19]=

条件子の設定において,のような組合せ条件を使う必要がよくある.この組合せ条件で重要な点は,条件項目 Falseとなるものがひとつでもあると判定結果はFalseになる,という点である.Mathematica は,条件項目 を1つずつ評価し, のいずれかがもFalseになると,その時点で判定を打ち切る.

expr1&&expr2&&expr3条件式 を1つずつ評価していき,ひとつでもFalseになれば評価を打ち切る
expr1||expr2||expr3条件式 を1つずつ評価していき,ひとつでもTrueになれば打ち切る

論理関係式の評価手順

2つの条件からなる関数を定義する.
In[20]:=
Click for copyable input
この場合,両条件が評価される.
In[21]:=
Click for copyable input
Out[21]=
最初の条件はFalseになるので,2番目の条件は判定されない.仮に判定したなら,のゼロ割エラーが発生してしまう.
In[22]:=
Click for copyable input
Out[22]=

Mathematica では,先の条件が満たされなければ後の条件は満足されないとする複数条件を並べた論理式を構築することができる.同様な処理手順がC言語のような言語でも見られるが,うまく利用すると各種プログラムを構築する上で便利になる.

New to Mathematica? Find your learning path »
Have a question? Ask support »