[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. リスト

1.1 リストについて  
1.2 リストに関する諸定義  


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.1 リストについて

リストはMAXIMAとLISPにとって基本要素である。配列(array)、細切れ表 (hash table)、数値(number)の他の全てのデータの種類は全てLISPのリストとして 表現され、これらはLISPのリストとして次の例に示す書式を持っている。

 
((mplus) $A 2)

これは式A+2を意味するが、MAXIMA階層では中置表記でA+2と なっている。

 
(* 訳者注:

中置表記(infix notation)とは、この例の"+"の様に二つ引数の間に配置される
演算子の表記の事である。詳しくは"色々な演算子"のinfixの項を参照されたい。

*)

MAXIMAは次の例で示されるリストも持つ。
 
[1, 2, 7, x+y]
このリストは4個の元を持つ。この表現は内部のLISPのリスト形式では次の書式 となる。
 
((mlist) 1  2  7  ((mplus)  $X $Y ))
maximaの式を分類する分類欄(type field)のフラグを簡易化しても、リストそれ 自身である。
 
((mlist simp) 1 2 7 ((mplus simp) $X $Y))

 
(* 訳者注:

MaximaはCommon Lispで記述される為、扱うデータは基本的にリストや原子である。
ここで注意する事は演算子がリストの先頭に置かれ、リストのS式に近いものとなる。
但し,+、-等のLISPの演算子を利用するのでは無く、例えば、Maximaでの和(+)は
(mplus)と云う風にリストで演算子を表現する。その為、Maxima内部では、演算子の
部分が0、それ以降の成分に1,2,...と番号が振られる。ここでSUBSTPARTを用いれば、
成分の入れ換えが行え、この入れ換えは関数の引数に留まらず、演算子自体の入れ替
えも可能となる。これは内部表現を上手く利用して、成分を入れ替える為である。

*)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.2 リストに関する諸定義

関数: APPEND (list1, list2, ...)
list1の元に続けてlist2以下の元を並べた一つのリストを返す。APPENDは一般的な 式に対しても使える。例えば、APPEND(F(A,B),F(C,D,E);->F(A,B,C,D,E); 例はEXAMPLE(APPEND);を参照せよ。

関数: ATOM (exp)
expが原子(即ち、数値か名前)の場合はTRUE、それ以外はFALSEとなる。 例えば、ATOM(5)はTRUEであるが、ATOM(A[1])とATOM(SIN(X))はFALSEとなる。 (ここで、A[1]とXが不定元のままの場合である)

関数: COPYLIST (L)
リストLの複製を生成する。

関数: DELETE (exp1, exp2)
exp2に含まれているexp1を全て削除する。 exp1はexp2の項(和の場合)か、exp2の因子 (積の場合)である。
 
(C1)  DELETE(SIN(X),X+SIN(X)+Y);
(D1)               Y + X

DELETE(exp1, exp2, integer)はexp2に現れるexp1をintegerで指定した回数分を 頭から削除する。勿論、exp1がexp2の中に現れる回数がintegerよりも少ない場合は、 exp2からexp1を全て削除する。

関数: ENDCONS (exp, list)
expをlistの元の後に繋げたリストを返す。ENDCONSは一般表現にも使える。 例えば、ENDCONS(X,F(A,B,C)); -> F(A,B,C,X).

関数: FIRST (exp)
expの最初の部分を返す。リストの場合はリストの先頭の元、行列の場合は第一番目 の行、和の場合は第一項等々となる。FIRSTとそれに関連する関数のRESTとLASTは 入力ではリストに分類されるものの、表示ではリストとして表示されない書式のexp に対しても使える。大域変数のINFLAG[FALSE]がTRUEに設定されると、これらの関数は expの内部表現に対して作用する。尚、簡易化で式の再順序付けが行なわれる事に 注意せよ。例えば、FIRST(X+Y)はINFLAGがTRUEの場合はXだが、INFLAGがFALSEの場合は Yとなる。(FIRST(Y+X)でも同じ結果となる)

関数: GET (a, i)
利用者が設定した属性iを原子aで入れ換えるが、属性iが存在しなければFALSEを返す。

 
(C1) PUT(%E,'TRANSCENDENTAL,'TYPE);
(D1) 			        TRANSCENDENTAL
(C2) PUT(%PI,'TRANSCENDENTAL,'TYPE)$
(C3) PUT(%I,'ALGEBRAIC,'TYPE)$
(C4) TYPEOF(EXP) := BLOCK([Q],
                        IF NUMBERP(EXP)
                        THEN RETURN('ALGEBRAIC),
                        IF NOT ATOM(EXP)
                        THEN RETURN(MAPLIST('TYPEOF, EXP)),
                        Q : GET(EXP, 'TYPE),
                        IF Q=FALSE
			THEN ERRCATCH(ERROR(EXP,"is not numeric.")) ELSE Q)$
(C5) TYPEOF(2*%E+X*%PI);
X is not numeric.
(D5) 	     [[TRANSCENDENTAL, []], [ALGEBRAIC, TRANSCENDENTAL]]
(C6) TYPEOF(2*%E+%PI);
(D6) 	        [TRANSCENDENTAL, [ALGEBRAIC, TRANSCENDENTAL]]


関数: LAST (exp)
式末尾の成分(項, 行, 元, 等々)を出力する。

関数: LENGTH (exp)
(表示された)式に含まれる成分の数を(通常は)返す。リストに対しては元の個数、 行列の場合は行数、和に対しては項の数となる(DISPFORMを参照)。 LENGTH命令はINFLAGスイッチ[デフォルト値はFALSE]の影響を受ける。つまり、 LENGHT(A/(B*C));はINFLAGがFALSE(あるいはEXPTDISFLAGがTRUE)の場合は2となるが、 INFLAGがTRUEの場合は3となる。(これは内部表現が本質的にA*B^-1*C^-1となっている 為である。)

変数: LISTARITH
デフォルト値: [TRUE] - FALSEの場合は、任意の算術演算子によるリストの評価が 抑制される。TRUEの場合、入力がリストで出力が行列の演算子であれば、 この値に連動して演算子が通常返す結果の行列を出力する。但し、入出力が リスト対リストの演算子の場合はリストを返す。

関数: LISTP (exp)
expがリストであればTRUE、それ以外はFALSEを返す。

関数: MAKELIST (exp,var,lo,hi)
リストを値として返す。MAKELISTはMAKELIST(exp,var,lo,hi)["lo"と"hi"は整数]や、 MAKELIST(exp,var,list)の様に使われる。最初のMAKELISTはSUMと類似し、第二の MAKELISTはMAP関数に類似している。

 
例:

   MAKELIST(CONCAT(X,I),I,1,6)で[X1,X2,X3,X4,X5,X6]が生成される。
   MAKELIST(X=Y,Y,[A,B,C])で[X=A,X=B,X=C]が生成される。

関数: MEMBER (exp, list)
expがlistに含まれていればTRUEを返し、それ以外はFALSEを返す。MEMBERは リストでない式に対しても使える。

例えば、MEMBER(B,F(A,B,C));-> TRUE。

関数: REST (exp, n)
nが正であれば、expから最初のn個の元を除いたものを返し、nが負であれば、 末尾から-n個の元を除いたものを返す。もしnが1ならば省略可能である。 expにはリスト、行列、その他の式が使える。

関数: REVERSE (list)
listの成分の順序を逆にするが、その成分自体は逆にしない。REVERSEは一般の 式に対しても使える。例えば、REVERSE(A=B);を実行するとB=Aが得られる。 REVERSEのデフォルト値:[FALSE] - グラフ表示関数で、この値がTRUEの場合は 座標系として左手系が採用される。

(* 訳者注:"成分の順序を逆にするが、その成分自身を逆にしない"とは次の状態を 意味する:
 
(C1) a1:[[1,2,3],[4,5],6];

(D1)                        [[1, 2, 3], [4, 5], 6]
(C2) b1:reverse(a1);

(D2)                        [6, [4, 5], [1, 2, 3]]
(C3) a1[1];

(D3)                               [1, 2, 3]
(C4) a1[2];

(D4)                                [4, 5]
(C5) a1[3];

(D5)                                   6
(C6) b1[1];

(D6)                                   6
(C7) b1[2];

(D7)                                [4, 5]
(C8) b1[3];

(D8)                               [1, 2, 3]

この様にリストの第一層の元a1[1],a1[2],a1[3]、即ち[1,2,3],[4,5],6の位置を入れ 換えるが、それより下の階層([]の内側)の元の1,2,3や4,5の入れ換えを行わない事を 意味する。

*)


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Hiroshi Yokota on September, 16 2002 using texi2html