Maxima 5.46.0 Manual: Functions and Variables for Lists

Previous: Introduction to Lists, Up: Lists [Contents][Index]

#### 5.5.2 Functions and Variables for Lists

特殊シンボル: [
特殊シンボル: ]

  先頭が`[`で終わりが`]`のマークはリストです。

  `[`と`]`は、リスト、配列、ハッシュ配列、配列関数の添字もくくります。

  例:

      (%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

  Lists ·Operators ·

関数: append (list_1, …, list_n)

  list_1の要素のあとに list_2の要素が続き、… という１つのリストを返します。 `append`は一般式上でも機能します。 例えば、 `append (f(a,b), f(c,d,e));`は `f(a,b,c,d,e)`をもたらします。

  例を見るには、 `example(append);`を実行してください。

  Lists ·Expressions ·

関数: assoc (key, list, default)
関数: assoc (key, list)

  この関数は 形式 `[x,y,z,...]`の入力 listの左辺の中で keyを探します。 ここで listの要素のそれぞれは二項演算子と２つの要素の式です。 例えば、 `x=1`, `2^3`, `[a,b]`など。 最初のオペランドに対して keyがチェックされます。 もし `key`が見つかったら、 `assoc`は二番目のオペランドを返します。 もし `key`が見つからなかったら、 default値を返します。 defaultはオプションで、省略すると `false`に設定されます。

  Lists ·Expressions ·

関数: cons (expr, list)

  最初の要素として要素 exprで構成され、 listの要素が続く新しいリストを返します。 `cons`は他の式上でも機能します。 例えば、 `cons(x, f(a,b,c));` -> `f(x,a,b,c)`。

  Lists ·Expressions ·

関数: copylist (list)

  リスト listのコピーを返します。

  Lists ·

関数: create_list (form, x_1, list_1, …, x_n, list_n)

  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の代わりに、 それぞれが数に評価される２つの引数を供給することもできます。 これらは繰り返しの下限と上限になります。

      (%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`の現在値に依存することができることに注意してください。

  Lists ·

関数: delete (expr_1, expr_2)
関数: delete (expr_1, expr_2, n)

  `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 ]

  Lists ·Expressions ·

関数: eighth (expr)

  式またはリスト exprの8番目の項を返します。 詳細は `first`を参照してください。

  Lists ·Expressions ·

関数: endcons (expr, list)

  exprが続く `list`の要素から成る新しいリストを返します。 `endcons`は一般式上でも機能します。 例えば、 `endcons(x, f(a,b,c));` -> `f(a,b,c,x)`。

  Lists ·Expressions ·

関数: fifth (expr)

  式またはリスト exprの5番目の項を返します。 詳細は `first`を参照してください。

  Lists ·Expressions ·

関数: first (expr)

  リストの最初の要素、行列の最初の行、和の最初の項などに帰着する、 exprの最初の部分を返します。 `first`とその関連関数 `rest`と `last`は、 入力時にタイプした形式ではなく、 exprの表示形式上で機能することに注意してください。 しかしながら、もし変数 `inflag`が `true`に設定されているなら、 これらの関数は exprの内部形式を見ます。 整理器は式を再配置することに注意してください。 例えば、 `first(x+y)`は、 もし `inflag`が `true`なら `x`で、 もし `inflag`が `false`なら `y` です。 (`first(y+x)`は同じ結果を与えます。) 関数 `second` .. `tenth`は 入力引数の二番目から十番目の部分をもたらします。

  Lists ·Expressions ·

関数: fourth (expr)

  式またはリスト exprの4番目の項を返します。 詳細は `first`を参照してください。

  Lists ·Expressions ·

関数: join (l, m)

  リスト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]

  Lists ·

関数: last (expr)

  expr最後の(項、行、要素など）部分を返します。

  Lists ·Expressions ·

関数: length (expr)

  (デフォルトでは) exprの外部(表示)形式の部分の数を返します。 リストに関しては、これは要素の数を返し、 行列に関しては行数であり、 和に関しては項数です。 (`dispform`を参照してください。)

  `length`コマンドは `inflag`スイッチに影響されます。 だから例えば、 `length(a/(b*c));`は、 (`exptdispflag`が `true`と仮定して) もし `inflag`が `false`なら2を与えますが、 もし `inflag`が `true`なら3を与えます。 (内部表現は本質的には `a*b^-1*c^-1`です。)

  Lists ·Expressions ·

オプション変数: listarith

  デフォルト値: `true` - もし `false`なら、 リストを伴う任意の算術演算が抑制されるようになります; `true`の時、リスト-行列演算では、 リストが行列に変換されるようになり、いつも行列の結果をもたらすよう連鎖します。 しかしながら、リスト-リスト演算はリストを返します。

  Lists ·Global flags ·

関数: listp (expr)

  もし exprがリストなら `true`、 そうでなければ `false`を返します。

  Lists ·Predicate functions ·

関数: makelist (expr, i, i_0, i_1)
関数: makelist (expr, x, list)

  要素それぞれが 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]

  Lists ·

関数: member (expr_1, expr_2)

  もし `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

  Lists ·Expressions ·Predicate functions ·

関数: ninth (expr)

  式またはリスト exprの9番目の項を返します。 詳細は `first`を参照してください。

  Lists ·Expressions ·

関数: pop (list)

  `pop`は、リスト listから最初の要素を取り除き、この要素を返します。 listはリストそのものではなく、リストにバインドされたシンボルでなければいけません。

  もし引数 listがリストにバインドされていないかリストが空なら、 Maximaはエラーメッセージを生成します。

  例には `push`も参照してください。

  `load("basic")`はこの関数をロードします。

  Lists ·Expressions ·

関数: push (item, list)

  `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]

  Lists ·Expressions ·

関数: rest (expr, n)
関数: rest (expr)

  もし nが正なら、 頭の n個の要素を取り除いた exprを返し、 もし nが負なら、 お尻の `- n`個の要素を取り除いた exprを返します。 もし nが1なら、省略できます。 exprは、リスト、行列、他の式を取り得ます。

  Lists ·Expressions ·

関数: reverse (list)

  list のメンバーの順序を逆にします。 (メンバー自身は変えません。) `reverse`は、一般式でも機能します。 例えば、 `reverse(a=b);`は `b=a`を与えます。

  Lists ·Expressions ·

関数: second (expr)

  式またはリスト exprの二番目の項を返します。 詳細は `first`を参照してください。

  Lists ·Expressions ·

関数: seventh (expr)

  式またはリスト exprの7番目の項を返します。 詳細は `first`を参照してください。

  Lists ·Expressions ·

関数: sixth (expr)

  式またはリスト exprの6番目の項を返します。 詳細は `first`を参照してください。

  Lists ·Expressions ·

関数: sort (L, P)
関数: sort (L)

  任意の隣り合う要素について`P (L[k], L[k + 1])`が`true` になるように ２つの引数の述語論理`P`に従ってリストLをソートします。 述語論理は関数や２値中値演算子の名前として、`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]

  Lists ·

関数: sublist (list, p)

  述語論理`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]

  Lists ·

関数: sublist_indices (L, P)

  述語論理 `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]

  Lists ·

関数: unique (L)

  リスト 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]

関数: tenth (expr)

  式またはリスト exprの10番目の項を返します。 詳細は `first`を参照してください。

  Lists ·Expressions ·

関数: third (expr)

  式またはリスト exprの三番目の項を返します。 詳細は `first`を参照してください。

  Lists ·Expressions ·

Previous: Introduction to Lists, Up: Lists [Contents][Index]