maximaでの条件分岐の処理の仕方を説明します。 条件分岐とは、ある条件の時はこの処理を行うといった処理のことです。 条件分岐にはifを使います。 ifの書式は次の3種類です。最初の形式は条件1が満たされたときだけ処理を実行します。 二番目の形式は、条件1が満たされた場合は処理1を、それ以外は処理2を実行します。 最後の形式は条件1が満たされれば処理1、それ以外で条件2が満たされれば処理2を、 と続き、どの条件も満たされなければ処理nを実行します。 条件の箇所は真偽値(true/false)である必要があります。 例えば比較演算子の結果は真偽値になります。ifの書式
if 条件1 then 処理 if 条件1 then 処理1 else 処理2 if 条件1 then 処理1 elseif 条件2 then 処理2 ... else 処理nprint関数は、指定された値を画面に出力する関数です。 例では条件がtrueの時だけ結果が出力されているのがわかります。 最後の例のように、関数定義と組み合わせると より実用的になります。 最後に、ifのために色々な条件をテストする関数が用意されていますので これについて説明します。if文の例
(%i1) if true then print(1) 1 (%o1) 1 (%i2) if false then print(1) (%o2) false (%i3) x:10; (%o3) 10 (%i4) if x>5 then "large" else "small"; (%o4) "large" (%i5) if x < 0 then "minus" elseif x < 5 then "small" elseif x < 10 then "medium" else "large"; (%o5) "large" (%i6) /* 符号関数sgn(x)を実装する */ sgn(x) := if x>0 then 1 elseif x=0 then 0 else -1; (%o6) sgn(x):=if x>0 then 1 elseif x=0 then 0 else −1 (%i7) sgn(10) (%o7) 1 (%i8) sgn(0) (%o8) 0 (%i9) sgn(-5) (%o9) -1数が多いのでいくつかの例をあげるにとどめます。条件
x = y xとyが等しいか x # y xとyが異なっているか x > y xがyより大きいか x >= y xがy以上であるか x < y xがyより小さいか x <= y xがy以下か oddp(x) xが奇数か evenp(x) xが偶数か integerp(x) xが整数か nonintegerp(x) xが整数以外か primep(x) xが素数か numberp(x) xが文字リテラル、有理数、浮動少数点数、多倍長浮動少数か(%e,%i,%pi,sqrtなど除く) constantp(x) xが定数か(%e,%i,%pi,sqrtなど含む) ratnump(x) xが有理数か floatnump(x) xが多倍長でない少数か bfloatp(x) xが多倍長少数か listp(x) xがリストか matrixp(x) xが行列か setp(x) xがセットか emptyp(x) x(リストや集合)が空か member(x,list) xがlistに含まれているか論理演算子もあります。 これは真偽値同士を組み合わせて使います。様々な条件を扱う
(%i1) oddp(10); (%o1) false (%i2) if evenp(10) then print("even"); even (%o2) "even" (%i3) ratnump(3/4); (%o3) true (%i4) floatnump(0.345); (%o4) true (%i5) matrixp(matrix([1,1],[1,1])); (%o5) true (%i6) member(10,[1,3,5,7,9]); (%o6) false論理演算子
x and y xとyがともにtrueか x or y xとyのどちらかがtrueか not x xがtrueならfalse,xがfalseならtrue x equal y xとyが同じ真偽値か x notequal y xとyが異なった真偽値か論理演算子の例
(%i1) evenp(10) and integerp(10); (%o1) true (%i2) if not(primep(10)) then "composite number" (%o2) "composite number"