リストを操作する関数は、ほとんどの式を処理することもできます。必ず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 FromやInsert Intoなどのように、関数名にFromまたはIntoが付いています。結果を戻さないため、結果を見るには式を表示する必要があります。
polynomial = Expr( a * x ^ 2 + b * x + c );
Insert Into( polynomial, Expr( d * x ^ 3 ), 1 );
Show( polynomial );
インプレース関数でない場合には、式を直接記述するか、式を含む変数の名前をNameExprに指定する必要があります。そうした関数は名前の中にFromあるいはIntoを含みません。このタイプの関数は、第1引数の元のリストや式には直接、変更を加えないで、変更した後のリストや式を戻します。
cubic = Insert( Expr( a * x ^ 2 + b * x + c ), Expr( d * x ^ 3 ), 1 );
quadratic = Expr( a * x ^ 2 + b * x + c );
cubic = Insert( Name Expr( quadratic ), Expr( d * x ^ 3 ), 1 );
置換はとても強力な機能です。すでに説明した第 “Substitute(置換)”を参照してください。ここでは、式で置換を行うときの注意点をいくつか説明します。
Substitute(pattern,name,replacement)は、式の名前を置き換えます。
NameExpr()は指定された変数に含まれている式を、評価せずに戻します。
a = Expr(
Distribution( Column( x ), Normal Quantile Plot )
);
Show( Name Expr( a ) );
Substitute()では引数がすべて評価されるため、引数を正しくクォートする必要があります。
b = Substitute( Name Expr( a ), Expr( x ), Expr( :Name("体重(ポンド)") ) );
Show( Name Expr( b ) );
Name Expr(b) = Distribution(Column(:Name("体重(ポンド)")), Normal Quantile Plot);
SubstituteInto()の場合、第1引数はL-value(左辺に指定できるもの)です。NameExprを用いる必要はありません。
Substitute Into( a, Expr( x ), Expr( :Name("体重(ポンド)") ) );
Show( Name Expr( a ) );
Name Expr(a) = Distribution(Column(:Name("体重(ポンド)")), Normal Quantile Plot);
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 );
/* 次の方程式の解を求める */
/* 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 ) ); // 解を表示する
指定の場所(position)の項目を削除したリスト(list)または式(expr)を戻す。場所(position)を省略したときは、最後の項目が削除されます。positionをリストで指定することもできます。追加の引数nを指定すると、1つの項目ではなくn個の項目が削除されます。
|
||
リスト(list)や式(expr)の項目を並べ替える。まず数値を昇順に並べ、その後に名前・文字列・演算子の内部コード順に並べます。たとえば、+(プラス記号)は-(マイナス記号)よりも、文字コードでは前に位置しているので、1+2は1-2より小さいと判断されます。また、{1,2}は{1,3}より小さく、{1,3}は{1,3,0}より小さいと判断されます。{1000}は{"a"}より小さくなりますが、{a}と{"a"}は同じです。
|
||
リスト(list)または式(expr)の中で、指定のパターン(pattern)に一致する部分を検索し、replacement式で置き換える。パターン(pattern)は名前でなければなりません。第2引数と第3引数は適用される前に評価されるため、ほとんどの場合、Expr関数を使って引数をクォートする必要があります。引数の評価を延期するときは、Exprの代わりにName Exprを使います。複数の置換を実行する場合、1つのステートメントでpatternとreplacementのペアを複数指定できます。
|
||