ベクトルの全要素をX倍したい場合,(1,2,3)*Xのように書いても 期待通りにはなりません.以下のようにしてください.
V = (1,2,3) * REP(3,X)より一般的に書くと,以下のようになります.
V = V * REP(#V, X)
ベクトル値に対する多くの演算は,個々の要素に対する演算になります.
このため(1,2,3)==(1,2,3)のような比較は,各要素を比較した結果を要素ごとに
格納し,(1,1,1)という結果になります.
nll> PRINT (1,2,3)==(1,2,3) (1,1,1)
ベクトル値自体の比較には,CMP()を使ってください.(一致で0,不一致で1を返します)
nll> PRINT CMP((1,2,3),(1,2,3)) 0
以下で先頭や末尾に要素を追加できます.
V = (A, %V) V = (%V, A)
以下で先頭や末尾の要素を削除できます.
V = V # -(#V - 1) V = V # (#V - 1)もしくはそのための関数もあります.
V = INSERT(A, 0, %V) V = INSERT(A, -1, %V) V = DELETE(0, %V) V = DELETE(-1, %V)
()の内部の要素数が1個の場合,それはベクトル値ではなく単なるカッコによる演算として扱われます.
これは,例えば(A + 10)のような演算が,意図せずベクトル値になってしまうことを防ぐためです.
このため以下はベクトル値ではなく,スカラー値になります.
nll> PRINT (10) 10 nll> PRINT ((10)) 10
{}を使うとそのような配慮をせずに()と同等の演算を行います.
このため,要素数1のベクトル値を作成することができます.
nll> PRINT {10} (10) nll> PRINT {{10}} ((10))
以下で判定できます.
(!#V): PRINT "This is empty"
以下で判定できます.
(!ABS2SUM(V)): PRINT "This is zero vector"
ベクトル値で要素を空にすることはできますが,空の部分の値は未定義(Undefined)になります.
またUndefinedの値は代入しても無効なため,以下のような代入をしても,要素が空(もしくはUNDEF)の部分の変数の値は残ります.
nll> (A,B,C)=(1,2,3) nll> PRINT A,B,C 1 2 3 nll> (A,B,C)=(10,,UNDEF) nll> PRINT A,B,C 10 2 3 nll>要素が無効であることを明示的に示したいときには,NULLを指定します.
nll> (A,B,C)=(100,NULL,NULL) nll> PRINT A,B,C 100 NULL NULL nll>