SET $LISTGET(var1,var2,...)=list
SET $LISTGET の var 引数は、コンマで区切られた変数のリストです。これらの変数はそれぞれ、対応する位置にある list 要素の値に設定されます。したがって、var1 は、最初の list 要素の値に設定され、var2 は 2 つ目の list 要素の値に設定されるというようになります。var 引数が既存の変数である必要はありません。変数は、SET $LISTGET によって値に割り当てられるときに、定義されます。
-
var 引数の数は、list 要素の数より少なくても、多くてもかまいません。未指定の var 値には NULL 文字列値が割り当てられます。前に値が定義されている場合、前の値は NULL 文字列に置換されます。前に変数が定義されていない場合、変数が定義されます。この動作を SET $LISTBUILD と比較してください。余分な list 要素は無視されます。
-
var 引数と list 要素のいずれかまたは両方に、プレースホルダのコンマで表された、省略された値を含めることができます。省略された var 引数は未定義です。list 要素を省略すると、対応する var 値が NULL 文字列に設定されます。前に値が定義されている場合、前の値は削除されます。前に変数が定義されていない場合、変数が定義されます。この動作を SET $LISTBUILD と比較してください。
SET $LISTGET はアトミック処理です。コンパイル済みのプログラムでの var 引数の最大数は 1024 個です。ターミナルから実行した場合の var 引数の最大数は 128 個です。これらの制限を超過しようとすると、<SYNTAX> エラーが発行されます。
var 引数がオブジェクト・プロパティ (object.property) である場合、プロパティは多次元でなければなりません。すべてのプロパティは、オブジェクト・メソッド内で i%property インスタンス変数として参照できます。
以下の例では、(等号の右側にある) $LISTBUILD によって、4 つの要素を使用してリストが作成されます。
以下の例では、SET $LISTGET によって、リストから最初の 2 つの要素が取り出され、2 つの変数に取り込まれます。
SET colorlist=$LISTBUILD("red","blue","green","white")
SET $LISTGET(a,b)=colorlist
WRITE "a=",a," b=",b /* a="red" b="blue" */
以下の例では、SET $LISTGET によって、リストから要素が取り出され、5 つの変数に取り込まれます。指定された list には 5 つ目の要素がないため、対応する var 変数 (e) は NULL 文字列 ("") の値で定義されます。
SET (a,b,c,d,e)=0
SET colorlist=$LISTBUILD("red","blue","green","white")
SET $LISTGET(a,b,c,d,e)=colorlist
WRITE "a=",a," b=",b," c=",c," d=",d," e=",e
/* a="red" b="blue" c="green" d="white" e= */
以下の例では、SET $LISTGET によって、リストから要素が取り出され、4 つの変数に取り込まれます。指定された list には 3 つ目の要素がないため、対応する var 変数 (c) は NULL 文字列 ("") の値で定義されます。
SET (a,b,c,d)=0
SET colorlist=$LISTBUILD("red","blue",,"white")
SET $LISTGET(a,b,c,d)=colorlist
WRITE "a=",a," b=",b," c=",c," d=",d
/* a="red" b="blue" c= d="white" */
以下の例では、SET $LISTGET によって、リストから要素が取り出され、4 つの変数に取り込まれます。list の 3 つ目の要素は入れ子になったリストであるため、対応する var 変数 (c) にはリスト値が含まれます。
SET (a,b,c,d)=0
SET colorlist=$LISTBUILD("red","blue",$LISTBUILD("green","yellow"),"white")
SET $LISTGET(a,b,c,d)=colorlist
WRITE "a=",a," b=",b," c=",c," d=",d
/* a="red" b="blue" c=$LB("green","yellow") d="white" */
例
以下の例の $LISTGET 関数は、position で指定されたリスト要素の値を返します (position の既定は 1 です)。
SET list=$LISTBUILD("A","B","C")
WRITE !,$LISTGET(list) ; returns "A"
WRITE !,$LISTGET(list,1) ; returns "A"
WRITE !,$LISTGET(list,3) ; returns "C"
WRITE !,$LISTGET(list,*) ; returns "C"
WRITE !,$LISTGET(list,*-1) ; returns "B"
以下の例の $LISTGET 関数は、リストの未定義の 2 つ目の要素が見つかった場合に、値を返します。最初の 2 つは、ユーザが default 値として定義した疑問符 (?) を返します。その後の 2 つは、ユーザが default 値を指定していないため、NULL 文字列を返します。
WRITE "returns:",$LISTGET($LISTBUILD("A",,"C"),2,"?"),!
WRITE "returns:",$LISTGET($LISTBUILD("A",,"C"),*-1,"?"),!
WRITE "returns:",$LISTGET($LISTBUILD("A",,"C"),2),!
WRITE "returns:",$LISTGET($LISTBUILD("A",,"C"),*-1)
以下の例は、リスト内のすべての要素の値を返します。この例は、リストの末尾の前後の位置も列挙します。値が存在しない場合は、default 値が返されます。
SET list=$LISTBUILD("a","b",,"d",,,"g")
SET llen=$LISTLENGTH(list)
FOR x=0:1:llen+1 {
WRITE "position ",x,"=",$LISTGET(list,x," no value"),!
}
WRITE "end of the list"
以下の例は、リスト内のすべての要素の値を逆の順序で返します。値が省略されると、default 値が返されます。
SET list=$LISTBUILD("a","b",,"d",,,"g")
SET llen=$LISTLENGTH(list)
FOR x=0:1:llen {
WRITE "position *-",x,"=",$LISTGET(list,*-x," no value"),!
}
WRITE "beginning of the list"
以下の例の $LISTGET 関数は、NULL 文字列の list 要素値を返します。これらの関数は、default 値を返しません。
WRITE "returns:",$LISTGET($LB(""),1,"no value"),!
WRITE "returns:",$LISTGET($LB(""),*,"no value"),!
WRITE "returns:",$LISTGET($LB(""),*-0,"no value")
以下の例の $LISTGET 関数は、すべて default 値を返します。
WRITE $LISTGET("",1,"no value"),!
WRITE $LISTGET($LB(),1,"no value"),!
WRITE $LISTGET($LB(UndefinedVar),1,"no value"),!
WRITE $LISTGET($LB(,),1,"no value"),!
WRITE $LISTGET($LB(,),*,"no value"),!
WRITE $LISTGET($LB(,),*-1,"no value"),!
WRITE $LISTGET($LB(""),2,"no value"),!
WRITE $LISTGET($LB(""),*-1,"no value")
関連項目