公開日: 11/25/2021

式の操作

リストを操作する関数は、ほとんどの式を処理することもできます。必ずExpr()を使って式をクォートしてください。たとえば、次のような手順で要約できます。

Remove( Expr( A + B + C + D ), 2 ); // 式A + C + Dになる
b = Substitute( Expr( Log( 2 ) ^ 2 / 2 ), 2, 3 ); /* 式 Log( 3 ) ^ 3 / 3になる */

リストの場合と同様、インプレース関数の第1引数はL-valueでなければなりません。L-valueとは、値を代入できる変数などのエンティティです。インプレース関数は、リストまたは式を直接操作します。これらは、たとえば、Remove FromInsert Intoなどのように、関数名にFromまたはIntoが付いています。結果を戻さないため、結果を見るには式を表示する必要があります。

polynomial = Expr( a * x ^ 2 + b * x + c );
Insert Into( polynomial, Expr( d * x ^ 3 ), 1 );
Show( polynomial );

polynomial = d * x ^ 3 + a * x ^ 2 + b * x + c

インプレース関数でない場合には、式を直接記述するか、式を含む変数の名前をNameExprに指定する必要があります。そうした関数は名前の中にFromあるいはInto含みません。このタイプの関数は、第1引数の元のリストや式には直接、変更を加えないで、変更した後のリストや式を戻します。

cubic = Insert( Expr( a * x ^ 2 + b * x + c ), Expr( d * x ^ 3 ), 1 );

d * x ^ 3 + a * x ^ 2 + b * x + c

 
quadratic = Expr( a * x ^ 2 + b * x + c );
cubic = Insert( Name Expr( quadratic ), Expr( d * x ^ 3 ), 1 );

d * x ^ 3 + a * x ^ 2 + b * x + c

Substitute(置換)

置換はとても強力な機能です。すでに説明したSubstitute(置換)を参照してください。ここでは、式で置換を行うときの注意点をいくつか説明します。

Substitute(pattern,name,replacement)は式の名前を置き換えます。

NameExpr()は指定された変数に含まれている式を、評価せずに戻します。

a = Expr(
	Distribution( Column( x ), Normal Quantile Plot )
);
Show( Name Expr( a ) );

Name Expr(a) = Distribution(Column(x), Normal Quantile Plot);

Substitute()では引数がすべて評価されるため、引数を正しくクォートする必要があります。

b = Substitute( Name Expr( a ), Expr( x ), Expr( :"体重(ポンド)"n ) );
Show( Name Expr( b ) );

Name Expr(b) = Distribution(Column(:"体重(ポンド)"n), Normal Quantile Plot);

SubstituteInto()の場合、第1引数はL-value(左辺に指定できるもの)です。NameExprを用いる必要はありません。

Substitute Into( a, Expr( x ), Expr( :"体重(ポンド)"n ) );
Show( Name Expr( a ) );

Name Expr(a) = Distribution(Column(:"体重(ポンド)"n), Normal Quantile Plot);

Substitute()は式の一部を変更するときに便利な関数です。次の例は、Is NumberIs Matrix関数などの複数の関数を用いる例です。

data = {1, {1, 2, 3}, [1 2 3], "abc", x, x( y )};
ops = {is number, is list, is matrix, is string, is name, is expr};
m = J( N Items( data ), N Items( ops ), 0 );
test = Expr(
	m[r, c] = _op( data[r] )
);
For( r = 1, r <= N Items( data ), r++,
	For( c = 1, c <= N Items( ops ), c++,
		Eval( Substitute( Name Expr( test ), Expr( _op ), ops[c] ) )
	)
);
Show( m );

m =

[1 0 0 0 0 0,

0 1 0 0 0 1,

0 0 1 0 0 0,

0 0 0 1 0 0,

0 0 0 0 1 1,

0 0 0 0 0 1];

SubstituteInto()を使うと、JMPで2次方程式を求めることができます。次の例では、4x2 - 9 = 0を求めています。

/* 次の方程式の解を求める

a*x^2 + b*x + c = 0

2次の式はx=(-b + - sqrt(b^2 - 4ac))/2a

リストを使って、+-演算の+と-両方の結果を保存する */

x = {Expr(
	(-b + Sqrt( b ^ 2 - 4 * a * c )) / (2 * a)
), Expr(
	(-b - Sqrt( b ^ 2 - 4 * a * c )) / (2 * a)
)};
Substitute Into( x, Expr( a ), 4, Expr( b ), 0, Expr( c ), -9 );
 

// 係数に挿入する

Show( x ); // 置換結果を表示する
Show( Eval Expr( x ) ); // 解を表示する

x = {Expr(((-0) + Sqrt(0 ^ 2 - 4 * 4 * -9)) / (2 * 4)), Expr(((-0) - Sqrt(0 ^ 2 - 4 * 4 * -9)) / (2 * 4))};

Eval Expr(x) = {1.5, -1.5};

リストと式を操作する関数については、この前の節、リストの操作で説明していますが、その概要を表8.4に示します。

表8.4 リストと式を操作する関数

関数

構文

説明

Remove

x = Remove(list |expr)

x = Remove(list |expr, position)

x = Remove(list |expr, {positions})

x = Remove(list |expr, position, n)

指定の場所(position)の項目を削除したリスト(list)または式(expr)を戻す。場所(position)を省略したときは、最後の項目が削除されます。positionをリストで指定することもできます。追加の引数nを指定すると、1つの項目ではなくn個の項目が削除されます。

Remove From

Remove From(list|expr, position)

Remove From(list|expr)

Remove From(list|expr, position, n)

リストから項目を削除する。よって、戻り値を何かに割り当てることはできません。第1引数はL-value(左辺に指定できるもの)でなければなりません。

Insert

x = Insert(list|expr, item, position)

x = Insert(list|expr, item)

リスト(list)または式(expr)の指定箇所(position)に項目(item)を挿入する。位置を指定しない場合、文字列は末尾に挿入されます。

Insert Into

Insert Into(list|expr, item, position)

Insert Into(list|expr, item)

Insert関数と同じだが、結果を元の変数に格納する。リスト(list)や式(expr)はL-value(左辺に指定できるもの)でなければなりません。

Shift

x = Shift(list |expr)

x = Shift(list |expr, n)

1つまたはn個の項目を、リスト(list)または式(expr)の前から後ろへシフトする。nの値が負のときは、後ろから前へシフトします。

Shift Into

Shift Into(list|expr)

Shift Into(list|expr, n)

項目をシフトして、その結果を元の変数に割り当てる。

Reverse

x=Reverse(list|expr)

リスト(list)や式(expr)の項目の順序を逆にする。

Reverse Into

Reverse Into(list|expr)

リスト(list)や式(expr)の項目の順序を逆にし、結果を元の変数に割り当てる。

Sort List

x=Sort List(list|expr)

リスト(list)や式(expr)の項目を並べ替える。まず数値を昇順に並べ、その後に名前・文字列・演算子の内部コード順に並べます。たとえば、+(プラス記号)は-(マイナス記号)よりも、文字コードでは前に位置しているので、1+2は1-2より小さいと判断されます。また、{1,2}は{1,3}より小さく、{1,3}は{1,3,0}より小さいと判断されます。{1000}は{"a"}より小さくなりますが、{a}と{"a"}は同じです。

Sort List Into

Sort List Into(list|expr)

リスト(list)や式(expr)の項目を並べ替え、その結果を元の変数に割り当てる。

Sort Ascending

Sort Ascending(list|matrix)

リスト(list)または行列(matrix)の要素を昇順に並べたリストを戻す。

Sort Descending

Sort Descending(list|matrix)

リスト(list)または行列(matrix)の要素を降順に並べたリストを戻す。

Loc Sorted

Loc Sorted(A, B)

行列Aの値と行列Bの値が一致する位置を、添え字の行列で作成する。Aは昇順に並べた行列でなければなりません。

Substitute

R = Substitute(list|expr, Expr(pattern), Expr(replacement), ...)

リスト(list)または式(expr)の中で、指定のパターン(pattern)に一致する部分を検索し、replacement式で置き換える。パターン(pattern)は名前でなければなりません。第2引数と第3引数は適用される前に評価されるため、ほとんどの場合、Expr関数を使って引数をクォートする必要があります。引数の評価を延期するときは、Exprの代わりにName Exprを使います。複数の置換を実行する場合、1つのステートメントでpatternとreplacementのペアを複数指定できます。

Substitute Into

Substitute Into(list|expr, Expr(pattern), Expr(replacement), ...)

Substitute関数と同じだが、結果を元の変数に格納する。リスト(list)や式(expr)はL-value(左辺に指定できるもの)でなければなりません。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).