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

10.6 代入式

代入は,ある新たな値をある変数に格納する式です。たとえば,以下の式 は,1という値を変数zに代入します。

 
z = 1

この式を実行した後,変数zは値1を持ちます。zが代入の前に 持っていた古い値は,どんなものも忘れてしまいます。イコール`='記号 は,代入演算子と呼ばれています。

文字列値も代入することができます。たとえば,以下の式は,変数message"this food is good"という値を格納することになります。

 
thing = "food"
predicate = "good"
message = [ "this " , thing , " is " , predicate ]

(これは,文字列の連結を示してもいます)

大部分の演算子(加算や連結など)は,値を計算すること以外の作用はありませ ん。もしその計算結果を無視するなら,演算子を使うことはないでしょう。でも, 代入演算子は違います。これは値を生み出しますが,たとえその値を無視したと しても,代入は,値の改変を通して関知されています。これを副作用と読ん でいます。

代入の左辺オペランドは,変数(see section 変数)である必要はありません。 これには,行列の要素(see section インデックス式)あるいは返り値のリスト (see section 関数の呼び出し)をとることができます。これらはすべて lvaluesと呼ばれており,代入演算子の左辺に現れることを意味しています。 右辺のオペランドは,どのような式にもなります。これは特定の変数や行列,戻り 値のリストに格納される新しい値を生み出します。

変数は,もともとの型を持っていないことに注意することは重要です。 変数の型は,単にその時点に保持することになったどんな値の型をも取ります。 以下のプログラムの一部分において,変数fooは,最初は数値をもち, その後は文字列値をもちます。

 
octave:13> foo = 1
foo = 1
octave:13> foo = "bar"
foo = bar

2番めの代入によってfooに文字列を与えるとき,以前に数値を持っていた ということを忘れてしまいます。

インデックス付き行列にスカラを代入すると,インデックスで参照した要素のす べてにスカラがセットされます。たとえば,もしaが少なくとも2つの列 をもつ行列であるならば,

 
a(:, 2) = 5

この式は,aの2列めのすべての要素に5をセットします。

空行列 `[]' を代入することは,大部分の場面において,行列またはベクト ルの行あるいは列を削除できるように動作します。空行列を参照 してください。たとえば,4行5列の行列Aが与えられるとき,

 
A (3, :) = []

この代入式は,Aの3行めを削除します。 また,

 
A (:, 1:2:5) = []

この代入文は,1列め,2列めおよび5列めを削除します。

代入は式ですから,値をもちます。したがって,式としてのz = 1は,値 1をもちます。この結果にひとつとして,複数の代入式を一度に書くことができ ます。

 
x = y = z = 0

この式は,すべての3つの変数に値0を格納します。この動作になるのは, z = 0の値は0であり,これをyに代入し,さらにy = z = 0 の値0がxに代入されるためです。

このことは,値のリストを代入するときにも当てはまります。でうから,以下の 式は妥当です。

 
[a, b, c] = [u, s, v] = svd (a)

これは,以下の式と完全に等価です。

 
[u, s, v] = svd (a)
a = u
b = s
c = v

このような表記において,式の各部分の値の数はそろえる必要がありません。 たとえば,

 
[a, b, c, d] = [u, s, v] = svd (a)

この式は,変数`d'の値は変化しないままであることを除いて,上の式と 等価です。また,

 
[a, b] = [u, s, v] = svd (a)

この式は,以下の式と等価です。

 
[u, s, v] = svd (a)
a = u
b = s

式を呼び出したどこの場所でも,代入文を使用することができます。たとえば, yに1をセットした後でxが1に等しいかどうかをテストするため に,x != (y = 1)と書くことは妥当です。しかし,この書き方は,プロ グラムを読みづらくします。使い捨てのプログラムを除き,このような代入の 入れ子を排除するように書き換えるべきです。これは決して難しいことではあ りません。

Built-in Variable: print_rhs_assign_val

もしこの変数の値がゼロでないならば,Octaveは,代入後に左辺の値を表示する 代わりに,代入式の右辺の値を表示するようになります。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated on July, 20 2006 using texi2html 1.76.