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]