次に挙げる関数でリストを操作します。また、これらの演算子は、次の節、式の操作で説明するように、式の操作にも使うことができます。コマンドとその説明は、表8.4 にまとめられています。
大部分の関数には、新しい値を作成する形と、その場で直接引数に作用する形の2種類があります。たとえば、次の場合が該当します。
// その場で作用する例
A = {2, 3, 4, 2, 1, 2, 1};
A = Remove( A, 3 ); // リストAの3番目の項目を削除し、Aに結果を保存する
Remove From( A, 3 ); // その場でリストAの3番目の項目を削除する
Show( A ); // A = {2, 3, 2, 1, 2, 1};
// 新しい値を作成する例
B = {2, 3, 4, 2, 1, 2, 1};
onetwo = Insert( {1}, 2 ); // {1, 2}
Insert Into( B, {1, 2}, 4 ); // 現在の4番目の項目の前に1、2を挿入する
Show( B ); // B = {2, 3, 4, 1, 2, 2, 1, 2, 1};
メモ: Insert Into関数で挿入する場所を省略した場合は、リストの最後尾に項目が挿入されます。
a = Shift( {1,2,3,4}, 1 ); // aにリスト{2,3,4,1}を保存する
Shift Into( a, -1 );
Show( a ); // a = {1, 2, 3, 4};
b = Reverse( a ); // bは{4,3,2,1}になる
Reverse Into( a ); // aは{4,3,2,1}になる
Show( a ); // a = {4, 3, 2, 1};
s = Sort List( {1,4,2,5, -7.2, Pi(), -11, cat, apple, cake} );
Show( s ); // s = {-11, -7.2, 1, 2, 4, 5, apple, cake, cat, Pi()};
c = {5, pie, 2, Pi(), -2};
Sort List Into( c );
Show( c ); // c = {-2, 2, 5, Pi(), pie};
インプレース関数は、リストまたは式を直接操作します。これらは、たとえば、Remove FromやInsert Intoなどのように、関数名にFromまたはIntoが付いています。結果を戻さないため、結果を見るにはリストを表示させる必要があります。インプレース関数の第1引数は、L-valueでなければなりません。L-valueとは、値を代入できる変数などのエンティティです。
myList = {a, b, c, d};
Insert Into( myList, 2, 3 );
Show( myList );
myList = {a, b, 2, c, d}
以下の例では、入れ子になったリストを用いて、Insert IntoとRemove Fromの使い方を示しています。
a = {{1, 2, 3}, {"A", "B", "C"}};
Show( a );
a = {{1, 2, 3}, {"A", "B", "C"}}
Insert Into( a[1], 99, 1 );
Show( a );
a = {{99, 1, 2, 3}, {"A", "B", "C"}}
Remove From( a[1], 1 );
Show( a );
a = {{1, 2, 3}, {"A", "B", "C"}}
インプレースでない関数の場合には、リストを直接記述するか、評価結果がリストとなる変数の名前を指定する必要があります。そうした関数は名前の中にFromあるいはIntoを含みません。このタイプの関数は、第1引数の元のリストや式には直接、変更を加えないで、変更した後のリストや式を戻します。
myNewList = Insert( {a, b, c, d}, 2, 3 );
{a, b, 2, c, d}
oldList = {a, b, c, d};
newList = Insert( oldList, 2, 3 );
{a, b, 2, c, d}
Substitute()とSubstitute Into()については、詳しく説明する必要があるでしょう。どちらの関数も、リスト(または式)でパターンに一致するものをすべて検索し、それを別の式に置換します。パターン(pattern)は名前でなければなりません。引数は適用される前に評価されるため、ほとんどの場合、Expr()関数を使って引数をクォートする必要があります。
Substitute( {a,b,c}, Expr( a ), 23); // {23,b,c}を戻す
Substitute( Expr( Sine( x ) ), Expr( x ), Expr( y ) ); // Sine(y)を戻す
引数の評価を延期するときは、Exprの代わりにName Exprを使います。
a = {quick, brown, fox, jumped, over, lazy, dogs};
b = Substitute( a, Expr( dogs ), Expr( cat ) );
canine = Expr( dogs );
equine = Expr( horse );
c = Substitute( a, Name Expr( canine ), Name Expr( equine ) );
Show( a, b, c );
a = {quick,brown,fox,jumped,over,lazy,dogs}
b = {quick,brown,fox,jumped,over,lazy,cat}
c = {quick,brown,fox,jumped,over,lazy,horse}
Substitute Intoは同じ操作をインプレースで実行します。
Substitute Into( a, Expr( dogs ), Expr( horse ) );
引数に複数のパターンを列挙すると、一度のステップで2つ以上の置換を実行できます。
d = Substitute( a,
Name Expr( quick ), Name Expr( fast ),
Name Expr( brown ), Name Expr( black ),
Name Expr( fox ), Name Expr( wolf )
);
{fast,black,wolf,jumped,over,lazy,dogs}
同じパターンが式中に複数ある場合には、すべてのパターンに対して代入が行われます。
例:
Substitute( Expr( a + a ), Expr( a ), Expr( aaa ) );
の結果は、次のようになります。
aaa + aaa