| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
多くの他のコンピュータ言語とは異なり,Octaveでは,1つ以上の値を返す関数 が定義できるようになっています。複数の値を返す関数を定義するための文法 は,以下のようなものです。
function [ret-list] = name (arg-list) body endfunction |
ここでname,arg-listおよびbodyは,以前のものと同じ意味
であり,ret-listは,関数から戻った値を保持することになる変数名をカ
ンマで区切ったリストである。戻り値のリストは,少なくとも1つの要素を持って
いなければなりません。もしret-listが1つの要素しか含まないならば,
このfunctionステートメントの形式は,前の節で解説した形式と等価で
す。
あるベクトルの最大の要素と,その値がそのベクトルに最初に出現するインデッ クスの,2つの値を返す関数の例を示します。
function [max, idx] = vmax (v)
idx = 1;
max = v (idx);
for i = 2:length (v)
if (v (i) > max)
max = v (i);
idx = i;
endif
endfor
endfunction
|
この具体例において,2つの値は単一の配列の要素として返されることになり ます。しかし,これが常に可能であったり便利だったりするわけではありま せん。返される値は,整合性のある次元でないこともあります。また,個々 の返り値に別個の名前を与えることは,しばしば好ましいものです。
関数が呼ばれるたびにnarginをセットすることに加え,Octaveは,
nargoutを,返されると期待される値の数に初期化します。これは,
関数のユーザがリクエストした値の数に依存して,異なる挙動をするような
関数を書くことができるようにします。組み込み変数ansへの暗黙的
な代入は,出力引数のカウントにおいて,判断されません。ゆえに,
nargoutの値はゼロになります。
svdとlu関数は,nargoutの値によって異なる挙動を
する組み込み関数の例です。
ある戻り値のみをセットする関数を書くことが可能です。たとえば,以下ある関数
function [x, y, z] = f () x = 1; z = 2; endfunction |
について,以下のように呼び出すとします。
[a, b, c] = f () |
その結果は,
a = 1 b = [](0x0) c = 2 |
であり,組み込み変数warn_undefined_return_valuesがゼロでない
ならば,警告が発生します。
ある関数の内部で,呼び出し側が受け取ことを期待する値の数を返す。もしオプ ション引数fcn_nameを付けて呼び出すならば,その関数が返すことのでき る戻り値の最大数を返す。もしその関数が不定数の戻り値を返すならば,-1 を返す。
たとえば,
f () |
は,関数fの内部ではnargoutが0になり,また,
[s, t] = f () |
この関数fの内部では,nargoutが2となる。
トップレベルでは,nargoutは定義されない。
もしwarn_undefined_return_valuesがゼロでないならば,ある関数が
期待される戻り値のリストにおいて1つでも値が定義されていないときに,
警告を表示する。
もしnがnargin_minからnargin_maxまでの範囲にあるならば, 空行列を返す。そうでなければ,nが大きすぎるか小さすぎるかどうかを 示すメッセージを返す。
この関数は,関数に与えた引数の数が,受け入れられる範囲内にあることを 確かめるために便利である。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
This document was generated on July, 20 2006 using texi2html 1.76.