Previous: Introduction to Lists, Up: Lists [Contents][Index]
先頭が[で終わりが]のマークはリストです。
[と]は、リスト、配列、ハッシュ配列、配列関数の添字もくくります。
例:
(%i1) x: [a, b, c];
(%o1) [a, b, c]
(%i2) x[3];
(%o2) c
(%i3) array (y, fixnum, 3);
(%o3) y
(%i4) y[2]: %pi;
(%o4) %pi
(%i5) y[2];
(%o5) %pi
(%i6) z['foo]: 'bar;
(%o6) bar
(%i7) z['foo];
(%o7) bar
(%i8) g[k] := 1/(k^2+1);
1
(%o8) g := ------
k 2
k + 1
(%i9) g[10];
1
(%o9) ---
101
list_1の要素のあとに
list_2の要素が続き、…
という1つのリストを返します。
appendは一般式上でも機能します。
例えば、 append (f(a,b), f(c,d,e));は
f(a,b,c,d,e)をもたらします。
例を見るには、 example(append);を実行してください。
この関数は
形式 [x,y,z,...]の入力 listの左辺の中で keyを探します。
ここで listの要素のそれぞれは二項演算子と2つの要素の式です。
例えば、 x=1, 2^3, [a,b]など。
最初のオペランドに対して keyがチェックされます。
もし keyが見つかったら、
assocは二番目のオペランドを返します。
もし keyが見つからなかったら、
default値を返します。
defaultはオプションで、省略すると falseに設定されます。
最初の要素として要素 exprで構成され、
listの要素が続く新しいリストを返します。
consは他の式上でも機能します。
例えば、 cons(x, f(a,b,c)); -> f(x,a,b,c)。
リスト listのコピーを返します。
list_1の要素それぞれにバインドされた x_1で、 また、それぞれのバインドに対して、 x_2を list_2の要素それぞれにバインドして、... それらのバインドを使って formを評価することによって リストを生成します。 結果の要素の数はそれぞれのリストの要素の数の積です。 それぞれの変数 x_iは実際に、シンボルでなければいけません。ーそれは評価されません。 リスト引数は繰り返しの始めに一度だけ評価されます。
(%i1) create_list(x^i,i,[1,3,7]);
3 7
(%o1) [x, x , x ]
二重の繰り返しで:
(%i1) create_list([i,j],i,[a,b],j,[e,f,h]); (%o1) [[a, e], [a, f], [a, h], [b, e], [b, f], [b, h]]
list_iの代わりに、 それぞれが数に評価される2つの引数を供給することもできます。 これらは繰り返しの下限と上限になります。
(%i1) create_list([i,j],i,[1,2,3],j,1,i); (%o1) [[1, 1], [2, 1], [2, 2], [3, 1], [3, 2], [3, 3]]
j変数の範囲やリストは iの現在値に依存することができることに注意してください。
delete(expr_1, expr_2)は、
expr_2から
そのトップレベル演算子の引数のうち、
expr_1と("="で決定される意味で)同じ引数を取り除きます。
"="は、同値ではなく、形式的な同一をテストすることに注意してください。
部分式の引数には影響しないことにも注意してください。
expr_1はアトムか、非アトムの式を取り得ます。
expr_2は任意の非アトムの式を取り得ます。
deleteは新しい式を返します;
expr_2を変更しません。
delete(expr_1, expr_2, n)は、
expr_2から そのトップレベル演算子の引数のうち、 expr_1と同じ最初の n個の引数を取り除きます。 もしそんな引数が n個より少ないなら、 該当するすべての引数が取り除かれます。
例:
リストから要素を削除。
(%i1) delete (y, [w, x, y, z, z, y, x, w]); (%o1) [w, x, z, z, x, w]
和から項を削除。
(%i1) delete (sin(x), x + sin(x) + y); (%o1) y + x
積から因子を削除。
(%i1) delete (u - x, (u - w)*(u - x)*(u - y)*(u - z)); (%o1) (u - w) (u - y) (u - z)
任意の式から引数を削除。
(%i1) delete (a, foo (a, b, c, d, a)); (%o1) foo(b, c, d)
削除する引数の数を制限。
(%i1) delete (a, foo (a, b, a, c, d, a), 2); (%o1) foo(b, c, d, a)
引数が expr_1と同じかどうかは"="で決定されます。
equalですが、"="でない引数は取り除かれません。
(%i1) [is(equal(0, 0)), is(equal(0, 0.0)), is(equal(0, 0b0))];
`rat' replaced 0.0 by 0/1 = 0.0
`rat' replaced 0.0B0 by 0/1 = 0.0B0
(%o1) [true, true, true]
(%i2) [is (0 = 0), is (0 = 0.0), is (0 = 0b0)];
(%o2) [true, false, false]
(%i3) delete (0, [0, 0.0, 0b0]);
(%o3) [0.0, 0.0b0]
(%i4) is (equal ((x + y)*(x - y), x^2 - y^2));
(%o4) true
(%i5) is ((x + y)*(x - y) = x^2 - y^2);
(%o5) false
(%i6) delete ((x + y)*(x - y), [(x + y)*(x - y), x^2 - y^2]);
2 2
(%o6) [x - y ]
式またはリスト exprの8番目の項を返します。
詳細は firstを参照してください。
exprが続く listの要素から成る新しいリストを返します。
endconsは一般式上でも機能します。
例えば、
endcons(x, f(a,b,c)); -> f(a,b,c,x)。
式またはリスト exprの5番目の項を返します。
詳細は firstを参照してください。
リストの最初の要素、行列の最初の行、和の最初の項などに帰着する、
exprの最初の部分を返します。
firstとその関連関数 restと lastは、
入力時にタイプした形式ではなく、 exprの表示形式上で機能することに注意してください。
しかしながら、もし変数 inflagが trueに設定されているなら、
これらの関数は exprの内部形式を見ます。
整理器は式を再配置することに注意してください。
例えば、
first(x+y)は、
もし inflagが trueなら xで、
もし inflagが falseなら y です。
(first(y+x)は同じ結果を与えます。)
関数 second .. tenthは
入力引数の二番目から十番目の部分をもたらします。
式またはリスト exprの4番目の項を返します。
詳細は firstを参照してください。
リストlとmの要素を交互に含む新しいリストを生成します。
結果は、要素 [l[1], m[1], l[2], m[2], ...]を持ちます。
リスト lと mは、任意のタイプの要素を含めます。
もしリストの長さが違ったら、
joinは長いリストの要素を無視します。
もし lか mがリストでなかったら、 Maximaは文句を言います。
例:
(%i1) L1: [a, sin(b), c!, d - 1]; (%o1) [a, sin(b), c!, d - 1] (%i2) join (L1, [1, 2, 3, 4]); (%o2) [a, 1, sin(b), 2, c!, 3, d - 1, 4] (%i3) join (L1, [aa, bb, cc, dd, ee, ff]); (%o3) [a, aa, sin(b), bb, c!, cc, d - 1, dd]
expr最後の(項、行、要素など)部分を返します。
(デフォルトでは) exprの外部(表示)形式の部分の数を返します。
リストに関しては、これは要素の数を返し、
行列に関しては行数であり、
和に関しては項数です。
(dispformを参照してください。)
lengthコマンドは inflagスイッチに影響されます。
だから例えば、 length(a/(b*c));は、
(exptdispflagが trueと仮定して)
もし inflagが falseなら2を与えますが、
もし inflagが trueなら3を与えます。
(内部表現は本質的には a*b^-1*c^-1です。)
デフォルト値: true - もし falseなら、
リストを伴う任意の算術演算が抑制されるようになります;
trueの時、リスト-行列演算では、
リストが行列に変換されるようになり、いつも行列の結果をもたらすよう連鎖します。
しかしながら、リスト-リスト演算はリストを返します。
もし exprがリストなら true、
そうでなければ falseを返します。
要素それぞれが exprから生成されたリストを構成し、返します。
makelist (expr, i, i_0, i_1)は、
i_0から i_1に等しい jに対して
j番目の要素が ev (expr, i=j)に等しい
リストを返します。
makelist (expr, x, list)は、
1から length (list)に等しい jに対して、
j番目の要素が ev (expr, x=list[j])に等しい
リストを返します。
例:
(%i1) makelist(concat(x,i),i,1,6); (%o1) [x1, x2, x3, x4, x5, x6] (%i2) makelist(x=y,y,[a,b,c]); (%o2) [x = a, x = b, x = c]
もし
args(expr_2)の中のある要素aに対して
is(expr_1 = a)なら
trueを返し、
そうでなければ falseを返します。
expr_2は通常リストです。
その場合、 args(expr_2) = expr_2かつ
expr_2の中のある要素 aに対して、
is(expr_1 = a)であることがテストです。
memberは
expr_2の引数の部分を検査しません。
だから、
たとえ expr_1が expr_2のある引数の部分であっても
falseを返すかもしれません。
elementpも参照してください。
例:
(%i1) member (8, [8, 8.0, 8b0]);
(%o1) true
(%i2) member (8, [8.0, 8b0]);
(%o2) false
(%i3) member (b, [a, b, c]);
(%o3) true
(%i4) member (b, [[a, b], [b, c]]);
(%o4) false
(%i5) member ([b, c], [[a, b], [b, c]]);
(%o5) true
(%i6) F (1, 1/2, 1/4, 1/8);
1 1 1
(%o6) F(1, -, -, -)
2 4 8
(%i7) member (1/8, %);
(%o7) true
(%i8) member ("ab", ["aa", "ab", sin(1), a + b]);
(%o8) true
式またはリスト exprの9番目の項を返します。
詳細は firstを参照してください。
popは、リスト listから最初の要素を取り除き、この要素を返します。
listはリストそのものではなく、リストにバインドされたシンボルでなければいけません。
もし引数 listがリストにバインドされていないかリストが空なら、 Maximaはエラーメッセージを生成します。
例には pushも参照してください。
load("basic")はこの関数をロードします。
pushは項目 itemをリスト listの先頭に追加し、
新しいリストのコピーを返します。
listはリストそのものではなく、リストにバインドされたシンボルでなければいけません。
itemは任意のMaximaシンボルや式が使えます。
もし引数 listがリストにバインドされていないかリストが空なら、 Maximaはエラーメッセージを生成します。
リストから最初の項目を取り除くには popも参照してください。
load("basic")はこの関数をロードします。
例:
(%i1) ll:[];
(%o1) []
(%i2) push(x,ll);
(%o2) [x]
(%i3) push(x^2+y,ll);
2
(%o3) [y + x , x]
(%i4) a:push("string",ll);
2
(%o4) [string, y + x , x]
(%i5) pop(ll);
(%o5) string
(%i6) pop(ll);
2
(%o6) y + x
(%i7) pop(ll);
(%o7) x
(%i8) ll;
(%o8) []
(%i9) a;
2
(%o9) [string, y + x , x]
もし nが正なら、
頭の n個の要素を取り除いた
exprを返し、
もし nが負なら、
お尻の - n個の要素を取り除いた
exprを返します。
もし nが1なら、省略できます。
exprは、リスト、行列、他の式を取り得ます。
list のメンバーの順序を逆にします。
(メンバー自身は変えません。)
reverseは、一般式でも機能します。
例えば、 reverse(a=b);は b=aを与えます。
式またはリスト exprの二番目の項を返します。
詳細は firstを参照してください。
式またはリスト exprの7番目の項を返します。
詳細は firstを参照してください。
式またはリスト exprの6番目の項を返します。
詳細は firstを参照してください。
任意の隣り合う要素についてP (L[k], L[k + 1])がtrue
になるように
2つの引数の述語論理Pに従ってリストLをソートします。
述語論理は関数や2値中値演算子の名前として、lambda式として指定されるかもしれません。
もし演算子名として指定されたなら、名前は「ダブルクォート」でくくられます。
ソートされたリストは新しいオブジェクトとして返されます;
Lは変更されません。
戻り値を構成するために、
sortは、Lの要素の浅いコピーを実行します。
もし述語論理PがLの要素の総順序でなければ、
sortは、エラーなしに実行を完了するかもしれませんが、結果は未定義です。
もし述語論理がtrueもしくはfalse以外の何かに評価されるなら、
sortはエラーを出力します。
sort (L)は sort (L, orderlessp)と同値です。
すなわち、デフォルトソート順序は昇順です。orderlesspで決められているように。
述語論理ordergreatpはリストを降順にソートします。
述語論理ordermagnitudepはMaxima数や数値を持つ定数シンボル、
定数に評価されることができる式を大きさによってソートします。
リストLの他のすべての要素はorderlesspによってソートされます。
述語論理"<"も大きさによる順序付けを許しますが、
もしリストLの要素が"<"の下で比較可能でないなら完全には並べません。
例:
(%i1) sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9 * c,
19 - 3 * x]);
5
(%o1) [- 17, - -, 3, 7.55, 11, 2.9b1, b + a, 9 c, 19 - 3 x]
2
(%i2) sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9*c, 19 - 3*x],
ordergreatp);
5
(%o2) [19 - 3 x, 9 c, b + a, 2.9b1, 11, 7.55, 3, - -, - 17]
2
(%i3) sort ([%pi, 3, 4, %e, %gamma]);
(%o3) [3, 4, %e, %gamma, %pi]
(%i4) sort ([%pi, 3, 4, %e, %gamma], "<");
(%o4) [%gamma, %e, 3, %pi, 4]
(%i5) my_list: [[aa,hh,uu], [ee,cc], [zz,xx,mm,cc], [%pi,%e]];
(%o5) [[aa, hh, uu], [ee, cc], [zz, xx, mm, cc], [%pi, %e]]
(%i6) sort (my_list);
(%o6) [[%pi, %e], [aa, hh, uu], [ee, cc], [zz, xx, mm, cc]]
(%i7) sort (my_list, lambda ([a, b], orderlessp (reverse (a),
reverse (b))));
(%o7) [[%pi, %e], [ee, cc], [zz, xx, mm, cc], [aa, hh, uu]]
Maxima数と定数、定数式を大きさ順に並べ、他のすべての要素を降順で並べます:
(%i8) sort([%i,1+%i,2*x,minf,inf,%e,sin(1),0,1,2,3,1.0,1.0b0],
ordermagnitudep);
(%o8) [minf, 0, sin(1), 1, 1.0, 1.0b0, 2, %e, 3, inf, %i,
%i + 1, 2 x]
述語論理pがtrueを返すlistの要素のリストを返します。
例:
(%i1) L: [1, 2, 3, 4, 5, 6]; (%o1) [1, 2, 3, 4, 5, 6] (%i2) sublist (L, evenp); (%o2) [2, 4, 6]
述語論理 maybe(P(x))が trueを返す、
リスト Lの要素 xのインデックスを返します;
これは falseはもちろん unknownも除外します。
Pは関数名かラムダ式を取り得ます。
Lはリストリテラルでなければいけません。
例:
(%i1) sublist_indices ('[a, b, b, c, 1, 2, b, 3, b],
lambda ([x], x='b));
(%o1) [2, 3, 7, 9]
(%i2) sublist_indices ('[a, b, b, c, 1, 2, b, 3, b], symbolp);
(%o2) [1, 2, 3, 4, 7, 9]
(%i3) sublist_indices ([1 > 0, 1 < 0, 2 < 1, 2 > 1, 2 > 0],
identity);
(%o3) [1, 4, 5]
(%i4) assume (x < -1);
(%o4) [x < - 1]
(%i5) map (maybe, [x > 0, x < 0, x < -2]);
(%o5) [false, true, unknown]
(%i6) sublist_indices ([x > 0, x < 0, x < -2], identity);
(%o6) [2]
リスト Lの重複しない要素を返します。
Lの要素すべてが重複しない時、
uniqueは、
L自身ではなく、
Lの浅いコピーを返します。
もし Lがリストでないなら、
uniqueはLを返します。
例:
(%i1) unique ([1, %pi, a + b, 2, 1, %e, %pi, a + b, [1]]); (%o1) [1, 2, %e, %pi, [1], b + a]
式またはリスト exprの10番目の項を返します。
詳細は firstを参照してください。
式またはリスト exprの三番目の項を返します。
詳細は firstを参照してください。
Previous: Introduction to Lists, Up: Lists [Contents][Index]