リストと線形代数
リストは、CindyScript で最も基本的な概念の一つです。CindyScript では、リストはいくつかの目的で使われます。
- オブジェクトを列記する
- データの配列を構造化する
- ベクトルを表す
- 行列を表す
この節では、一般的なリストの作り方とともにそれらの要素へのアクセス方法について一般的なことがらを述べます。リストのそれぞれの側面については次の各節を参照してください。
リストの作成
リストは、カギカッコの中にコンマで区切って要素を並べるだけで簡単に作れます。たとえば
[45,12.5,123,2,5.5,5]
これは数のリストです。
["this", "is", "a", "list", "of", "strings"]
これは文字列のリストです。種類の異なるオブジェクトを混ぜてリストにすることもできます。
["this", 3,"is",5 , "a",654, "mixed",234 , "list"]
リストを要素にしたリストもできて、自由に入れ子(ネスト)にできます
[[4,6], ["a", "b"], 1, [4, "b", [23, "b"]], [ ]]
最後の要素
[ ]
には何も入っていません。これは空リストです。
要素の数が少なくとも2つあるならば、丸括弧
(...)
でくくってリストにすることもできます。これは、数学でよく使われる形で記述するのに便利でしょう。たとえば、3次元ベクトルは次のように表現できます。
(7.3,9.3,-14.3)
リストの要素へのアクセス: take(<list>,<int>)
リストの各要素には、挿入演算子
<list>_<int>
か、関数
take(<list>,<int>)
を用いてアクセスできます。第2引数のインデックスは整数です。インデックスが0か、リストの要素数より大きいときは、
___
が返されます。また、「Index out of range」という Warning メッセージが出ます。
式: | 結果:
|
[2 ,5 ,7 ,3]_3 | 7
|
take([2 ,5 ,7 ,3],2) | 5
|
[2 ,5 ,7 ,3]_5 | ___
|
インデックスは計算式で与えることもできます。また、入れ子にしたリストの要素にもアクセスできます。
式: | 結果:
|
[[2,[4,5]],1]_1 | [2,[4,5]]
|
[[2,[4,5]],1]_(7-5) | 1
|
[[2,[4,5]],1]_1_2 | [4,5]
|
[[2,[4,5]],1]_1_2_2 | 5
|
[[2,[4,5]],1]_1_2_2_2 | ___
|
リストが変数に代入されると、個々の要素は
_
演算子によってアクセスしたのち、それを設定することができます。たとえば次の例を見てください。
a=[[2,[4,5]],1];
a_2="A";
a_1_2_1="B";
この結果、
a
は
[[2,["B",5]],"A"]
になります。
高度な使用法
リストの要素にアクセスするのに、強力なオプションがあります。負の数を使えば、末尾から逆順に数えてアクセスできるのです。次に示すのがその例です。:
式: | 結果:
|
[2 ,5 ,7 ,3]_(-1) | 3
|
take([2 ,5 ,7 ,3],(-3) | 5
|
[[2,6] ,5 ,7 ,3]_(-4)_(-1) | 6
|
整数のリストを使って、まとめてアクセスすることもできます。すると、結果はリストで返されます。
式: | 結果:
|
[2 ,5 ,7 ,3]_[2,3] | [5,7]
|
[2 ,5 ,7 ,3]_[-1,1,1] | [3,2,2]
|