コンテンツにスキップ

GNU Octave 2.1.x 日本語マニュアル/始めましょう

出典: フリー教科書『ウィキブックス(Wikibooks)』

2 始めましょう

[編集]

この章では,Octave の基本機能のいくつかについて説明しています。 これには,Octaveセッションを開始する方法,コマンドプロンプトでヘルプを得る方法,コマンドラインの編集のしかた,およびシェルからコマンドとして実行するためのOctave プログラムを書く方法が含まれています。

2.1 Octave の起動

[編集]

通常は,何も引数を与えずに‘octave’ を実行することにより,Octave は対話的に使用することができます。 一度開始してしまえば,終了の命令を与えるまで,Octave は端末からコマンドを読み込みます。 コマンドラインでファイル名を指定することもできます。 そのとき,Octave はそのファイルを読み込んで実行し,末尾まで読み込んだ後に終了します。 次の節で解説してあるコマンドラインオプションを使用することにより,どのようにOctave を起動するかを,さらにコントロールすることができます。

2.1.1 コマンドラインオプション

[編集]

Octave が受け入れるすべてのコマンドラインオプションの完全な一覧を示します。

--debug

[編集]

-d パーサデバッグモードに入ります。このオプションを使うと,Octave のパーサが,読み込んだコマンドについて多くの情報を表示するようになります。 これは,おそらく実際にパーサのデバッグを試みるときにのみ有用でしょう。

--echo

[編集]

-commands

-x コマンドが実行されるときに,そのコマンドを表示します。

--exec-path path

[編集]

実行すべきプログラムを検索するパスを指定します。 コマンドラインで指定したpath の値は,環境変数OCTAVE_EXEC_PATH の値を上書きすることになります。 しかし,組み込み変数EXEC_PATH をセットしているシステムあるいはユーザのスタートアップファイル内のコマンドには影響しません。

--help

[編集]

-h

-?

短いヘルプメッセージを表示して終了します。

--info-file filename

[編集]

使用すべきinfo ファイルの名前を指定します。 コマンドラインで指定したfilename の値は,環境変数OCTAVE_INFO_FILE の値を上書きすることになります。 しかし,組み込み変数INFO_FILE をセットしているシステムあるいはユーザのスタートアップファイル内のコマンドには影響しません。

--info-program program

[編集]

使用すべきinfo プログラムの名前を指定します。コマンドラインで指定したprogramの値は,環境変数OCTAVE_INFO_PROGRAM の値を上書きすることになります。しかし,組み込み変数INFO_PROGRAM をセットしているシステムあるいはユーザのスタートアップファイル内のコマンドには影響しません。

--interactive

[編集]

-i 強制的に対話的挙動をするようにします。 これは,リモートシェルコマンドあるいはEmacs のシェルバッファを通してOctave を実行する際に有用です。 Emacs 内でOctaveを実行するための別の方法は,付記D [Emacs]を参照してください。

--no-history

[編集]

-H コマンドライン履歴を使用できなくします。

--no-init-file

[編集]

ファイル‘~/.octaverc’あるいは‘.octaverc’を読みません。

--no-line-editing

[編集]

コマンドライン編集を不可にします。

--no-site-file

[編集]

site-wide ‘octaverc’ ファイルを読みません。

--norc

[編集]

-f 起動時に一切のシステムあるいはユーザ初期化ファイルを読みません。これは,--no-init-fileと--no-site-fileの両方のオプションを指定したものと等価です。

--path path

[編集]

-p path 関数ファイルの検索パスを指定します。コマンドラインで指定したpath の値は,環境変数OCTAVE_PATH の値を上書きすることになります。しかし,組み込み変数LOADPATHをセットしているシステムあるいはユーザのスタートアップファイル内のコマンドには影響しません。

--silent

[編集]

--quiet

[編集]

-q 起動時のメッセージとバージョン情報を表示しません。

--traditional

[編集]

--braindead

[編集]

Matlab との互換性を保つため,ユーザ設定変数の初期値として,以下の値をセットします。

PS1 = ">> "
PS2 = ""
beep_on_error = true
crash_dumps_octave_core = false
default_save_format = "mat-binary"
fixed_point_format = true
page_screen_output = false
print_empty_dimensions = false
warn_function_name_clash = false

--verbose

[編集]

-V 冗長な出力に切り替えます。

--version

[編集]

-v プログラムのバージョン番号を表示して終了します。

file

[編集]

fileからコマンドを実行します。

Octave には,引数の数やオプションのすべてなど,コマンドラインについての情報を含む組み込み関数がいくつかあります。

argv [Built-in Variable]

[編集]

Octave に渡されたコマンドライン引数は,この変数によって得ることができる。たとえば,以下のコマンドによりOctave を起動したとすれば,

octave --no-line-editing --silent

argvは,--no-line-editingと--silentを含む文字列型配列となります。

もし実行可能なOctave スクリプトを入力したならば,argvはスクリプトに渡された引数リストを含む。実行可能なOctave スクリプトを作成する方法の一例はSection 2.6 [Executable Octave Programs]を参照してください。

program_invocation_name

[編集]

                    [Built-in Variable]

program_name

[編集]

                    [Built-in Variable]

Octave が開始するとき,組み込み変数program_invocation_nameには,Octave を起動するためにシェルに入力した名前が自動的にセットされます。また,program_nameの値には,program_invocation_nameの最後の成分が自動的にセットされます。たとえば,Octave を起動するために‘/usr/local/bin/octave’と打ち込んだならば,program_invocation_nameは"/usr/local/bin/octave" という値をとり,program_nameは"octave"という値となります。

コマンドラインからスクリプトを実行する(たとえば,octave foo.m のように打ち込む)ならば,プログラム名は,スクリプトのファイル名にセットされます。実行可能なOctave スクリプトを作成する方法の一例はSection 2.6 [Executable Octave Programs]を参照してください。これらの変数を,Octave のコマンドラインを再生成するために使用した例を示します。

    printf ("%s", program_name);
    for i = 1:nargin
        printf (" %s", nth (argv, i));
    endfor
    printf ("\n");

注:MATLABとの互換性を保つためには、"endfor"ではなく、"end"を使用した方が良い。

Section 10.1 [Index Expressions] では,Octave において,どのように文字列や部分文字列の添え字を適切に扱うかを説明しています。また,Section 13.1 [Defining Functions] には,変数narginについての情報があります。

2.1.2 スタートアップファイル

[編集]

Octave を起動したとき,以下に示すファイルから,実行すべきコマンドを検索します。 octave-home/share/octave/site/m/startup/octavercoctave-home は,Octave がインストールされているディレクトリ( 標準では‘/usr/local’)です。

このファイルが存在すると,インストールしたOctave の全てのバージョンについて,全てのユーザに対して広域的に標準のOctave 環境を変更することとなります。このファイルを変更するときには,いくぶん注意が必要です。というのも,Octave を利用するすべてのユーザが影響を受けるからです。

octave-home/share/octave/version/m/startup/octaverc

octave-home は,Octave がインストールされているディレクトリ( 標準では‘/usr/local’)です。このファイルが存在すると,インストールしたOctave の特定のバージョンについて,全てのユーザに対して広域的に標準のOctave 環境を変更することとなります。このファイルを変更するときには,いくぶん注意が必要です。というのも,Octave を利用するすべてのユーザが影響を受けるからです。

~/.octaverc

このファイルは,通常は,標準のOctave 環境に個人的な変更を加えるために使用します。

.octaverc

このファイルは,特定のプロジェクトに対して,標準のOctave 環境を変更するために使用することができます。Octave は,‘~/.octaverc’を読み込んだ後に,カレントディレクトリにおいてこのファイルを検索します。‘~/.octaverc’ファイルでcdコマンド利用すると,Octave が‘.octaverc’を検索するディレクトリも影響を受けます。もし,ホームディレクトリでOctave を起動するならば,ファイル‘~/.octaverc’ からのコマンドは一度だけ実行されるでしょう。もしOctave を起動するときに--silentではなく,--verboseオプションをつけるならば,各スタートアップファイルを実行するときには,メッセージを表示するようになります。スタートアップファイルには,妥当な任意のOctave コマンドや関数の定義を含めることができます。

2.2 Octave の終了

[編集]

exit(status)

[編集]

                           [Built-in Function]

quit(status)

[編集]

                          [Built-in Function]

現在のOctave セッションを終了します。オプション引数として整数status を与えるならば,これをOctave の終了ステータスとしてオペレーティングシステムに渡します。

atexit(fcn)

[編集]

                          [Built-in Function]

Octave が終了するときに呼び出す関数を登録します。たとえば,

function print_fortune ()
	printf ("%s", system ("fortune"));
	fflush (stdout);
endfunction
atexit ("print_fortune");

この例は,Octave が終了するときにメッセージを表示することになります。

2.3 ヘルプを得るためのコマンド

[編集]

このマニュアルの完全な文章は,Octave プロンプトからhelp -iというコマンドを入力することにより入手できます。さらに,個々のユーザ作成関数および変数についてのドキュメントも,helpコマンドを通して得ることができます。この節ではマニュアル,およびユーザ提供関数や変数に対するドキュメントを読むために使用されるコマンドについて述べています。あなたの書いた関数に対して,どのように文書化すべきかについてのさらなる情報は,Section 13.6 [Function Files] を参照してください。

help

[編集]

                       [Command]

Octave のhelpコマンドは,GNU Info ブラウザを用いて,簡略な使用法を述べたメッセージを表示する,あるいは印刷マニュアルのオンライン版から直接情報を表示するために使用されます。このコマンドを引数なしで呼び出すならば,全ての利用可能な演算子,関数および組み込み変数のリストを出力します。もし1 番目の引数が-iであれば,与えられたトピックに対して,このマニュアルのオンライン版の索引を表示します。 たとえば,help helpは,helpコマンドを説明する短いメッセージを表示し,help -i helpはマニュアルのオンライン版のこのノードにおいて,GNU Info ブラウザを起動します。いちどGNU Info ブラウザを実行すると,キー入力C-hを使用することにより,その使用法についてのヘルプを得ることができる。 helpコマンドは,演算子についての情報を提供します。しかし,コマンドの区切りとして使用されるカンマやセミコロンについては,そうはいきません。それらに関するヘルプを得るには,helpcommaあるいはhelp semicolon と打ち込まなければなりません。

INFO_FILE

[編集]

                       [Built-in Variable]

変数INFO_FILEは,Octave のinfo ファイルの位置を表す。初期状態では,"octavehome/info/octave.info"です。ここでoctave-home は,Octave がインストールされたディレクトリです。

INFO_PROGRAM

[編集]

                       [Built-in Variable]

変数INFO_PROGRAMは,実行すべきinfo プログラムを表す。初期状態では,"octavehome/libexec/octave/version/exec/arch/info" です。ここでoctave-home はOctave がインストールされたディレクトリ,version はOctave のバージョン番号,およびarch はシステムのタイプ(たとえばi686-pc-linux-gnu)です。初期値は,環境変数OCTAVE_INFO_PROGRAM,あるいはコマンドライン引数--info-program NAME,さらにはスタートアップファイルにおいてINFO_PROGRAM変数に値をセットすることで上書きされます。

MAKEINFO_PROGRAM

[編集]

                        [Built-in Variable]

変数MAKEINFO_PROGRAMは,Octave がTexinfo マークアップコマンドを含むヘルプ文章を書式化するために起動するmakeinfo プログラムを表す。その初期値は"makeinfo"です。

suppress_verbose_help_message

[編集]

                         [Built-in Variable]

もしsuppress_verbose_help_messageの値がゼロでないならば,Octave はhelpコマンドからの出力あるいは組み込みコマンドの使用法メッセージの末端に,追加のヘルプ情報を追加することになります。

2.4 コマンドラインの編集

[編集]

Octave は,広範囲なコマンドライン編集とヒストリ機能を提供するために,GNU readline ライブラリを使用しています。このマニュアルでは,最もよく使用される機能のみを解説しています。さらなる情報は,GNU Readline ライブラリのマニュアルを参照してください。

印刷可能文字(アルファベット,数字,機能など)を入力するには,単にその文字を打ち込みます。Octave は,その文字を挿入し,カーソルを次に進めます。コマンドライン編集機能の多くは,制御文字を使用して操作します。たとえば,Control-aという文字は,カーソルを行の先頭に移動します。C-aを入力するには,hCTRLiキーを押したままhaiキーを押します。次の節では,Control-aのような制御文字をC-aと表記しています。コマンドライン編集機能の別のセットは,メタ文字を使用します。ある端末では,hMETAiキーを押しながらhuiを押すことにより,M-uを打ち込みます。もし使用している端末にhMETAiキーが無いならば,ESCキーで始まる2 文字を入力することにより,メタ文字を入力できます。したがって,M-u を入力するには,hESCihuiと打ち込めばよいのです。ESC入力法は,メタキーを持つ端末においても使用できます。以降の節において,Meta-u という¥メタ文字は,M-uと表記しています。

2.4.1 カーソルの移動

[編集]

以下のコマンドは,カーソルを移動するものです。

C-b 1 文字戻します。
C-f 1 文字進めます。
hDELi カーソルの左側にある文字を削除します。
C-d カーソルが重なっている文字を削除します。
M-f 後の単語に進めます。
M-b 前の単語に戻ります。
C-a 行の先頭に移動します。
C-e 行の終端に移動します。
C-l スクリーンをクリアし,現在の行を最上部に表示します。
C-_
C-/ 最後に実行したことを取り消して戻します(アンドゥ)。すべての処理をアンドゥし,何も入力していない状態まで戻すことができます。
M-r この行について行った変更をすべてアンドゥします。これは,最初まで戻すために何回も‘undo’ コマンドを入力するのと同じ動作です。

上の表は,入力行の編集を行うために必要な,最も基本的なキーストロークについて解説しています。大部分の端末においては,カーソルを進めたり戻したりするには,C-fやC-bの代わりに矢印キーを使用できます。 C-fが1文字進めるのに対して,M-fは1単語進めることに注意してください。おおざっぱに言えば,コントロールキーの組み合わせは文字を操作するものであって,メタキーの組み合わせは単語を操作するのです。Octave プログラム内でスクリーンをクリアする関数もあります。

clc ()

[編集]

                         [Built-in Function]

home ()

[編集]

                         [Built-in Function]

端末のスクリーンをクリアし,カーソルを左上隅に移動します。

2.4.2 切り取りと貼り付け

[編集]

テキストを切り取る(killing)というのは,その行からテキストを削除し,後で使用するためにその内容を保存しておくことです。通常は,貼り付け(yanking)することにより,それを行に戻します。もしコマンドについての解説で,テキストを「切り取る」という表現があるならば,後でテキストを違う位置(または同じ位置)に戻すことになると思ってください。

テキストを切り取るためのコマンド一覧を示します。

C-k           現在のカーソル位置から行末までのテキストを切り取ります。
M-d           カーソル位置から現在の単語末までを切り取ります。もし,単語間にカーソルがあれば,次の単語末までになります。
M-hDELi       カーソル位置から前の単語の先頭までを切り取ります。もし,単語間にカーソルがあれば,前の単語の先頭までになります。C-w カーソル位置から前の空白までを切り取ります。これはM-hDELiとは異なる動作です。なぜならば,単語区切りが異なるからです。また,テキストを行に貼り付けて戻す方法について示します。貼り付けとは,切り取りバッファから,最も最近切り取ったテキストをコピーすることを意味します。
C-y           最も最近切り取ったテキストを,カーソル位置に貼り付けます。
M-y           切り取りリングを回し,新しい内容を貼り付けます。このコマンドは,事前にC-yまたはM-yコマンドを実行している場合にのみ実行できます。

切り取りコマンドを使用するとき,そのテキストは切り取りリング(kill-ring)に保存されます。任意回数の連続した切り取りは,切り取ったテキストとともに保存されます。その結果,それを貼り付けして戻すとき,それを一気に得ることがことができます。切り取りリングは,特定の行についてのものではありません。つまり,以前に入力した行において切り取ったテキストは,別の行を入力しているときに,後に貼り付けのために利用することができます。

2.4.3 テキストを変更するためのコマンド

[編集]

以降のコマンドは,特別な意味を持つ文字(たとえばTABやC-qなど),を入力する,あるいはタイプミスを素早く修正するために使用できます。

C-q
C-v       これを入力した次の文字を,そのまま行に追加します。これは,たとえば,C-qのような文字を挿入するためな方法です。
M-hTABi   タブ文字を挿入します。
C-t       カーソルの後ろにある文字をカーソル位置の文字の前に移動し,カーソルを進めます。もしカーソルが行の終端にあるならば,
          カーソル前の2つの文字を入れ替えます。
M-t       カーソルの後ろにある単語をカーソルの前にある単語の位置に移動します。
M-u       カーソル位置から現在の(あるいは次の)単語の末尾までの文字を大文字に変換し,カーソルをその単語末まで移動します。
M-l       カーソル位置から現在の(あるいは次の)単語の末尾までの文字を小文字に変換し,カーソルをその単語末まで移動します。
M-c       カーソルに続く文字(もしカーソルが単語間にあるならば,次の単語の始まり)を大文字に変換し,カーソルをその単語末に移動します。

2.4.4 readline 入力

[編集]

以下のコマンドは,Octave でコマンドや変数名を補完できるようにするものです。

hTABi      カーソル前の位置にテキストの補完を試みます。Octave は,コマンド名および変数名を補完できます。
M-?        カーソル前の位置に補完することのできるテキストの一覧を表示します。
completion_append_char                                    [Built-in Variable]

completion_append_charの値は,コマンドライン補完の試みがうまくいったときに付加する文字として使用します。初期状態の値は," "(単一のスペース)です。

completion_matches (hint)

[編集]

                        [Built-in Function]

hint により与えられる可能な補完を生成します。この関数は,Emacs のようなOctave を操作したりユーザの入力を管理できるようなプログラムの利便のために提供されています。この関数が呼ばれるとき,現在のコマンド番号はインクリメントされません。これは仕様であり,バグではありません。

2.4.5 履歴編集のためのコマンド

[編集]

Octave は,通常,あなたがタイプしたコマンドの履歴を保持しています。これにより,編集や再実行するために以前のコマンドを呼び出すことができます。Octave を終了するとき,最も最近入力したコマンドはファイルに保存されます。保存数の上限は,history_sizeなる変数で指定されます。Octave を起動するとき,変数history_fileで指定したファイル名から,コマンドの初期リストを読み込みます。 履歴リストを単純に閲覧および検索するためのコマンドを示します。

hLFDi

hRETi カーソル位置にかかわらず,その行を受け入れます。この行が空でないならば,それを履歴リストに追加します。もしこの行が履歴行であったならば,その履歴行をもとの位置に復元します。

C-p 履歴リストを「上に」(古い方に)移動します。
C-n 履歴リストを「下に」(新しい方に)移動します。
M-< 履歴における最初の行に移動します。
M-> 入力された履歴の末端に移動します。つまり,いま入力している行ですね!
C-r 現在の行から開始し,必要に応じて履歴を「上に」さかのぼって検索します。これはインクリメンタルサーチです。
C-s 現在の行から開始し,必要に応じて履歴を「下に」新しい方に向けて検索します。

大部分の端末では,履歴リストをたぐるために,C-pおよびC-nの代わりに矢印キーも使うことができます。 履歴リストを移動するためのキーボードコマンドに加えて,Octave は,履歴リストからのコマンド群を閲覧,編集,再実行するための関数を提供しています。

history options [Command]

もし引数なし実行するならば,historyは,あなたが実行したコマンドのリストを表示します。以下のオプションが使用できる。

-w file 現在の履歴をファイルfile に書き込む。もしそのファイル名を省略するならば,標準のファイル名(通常は‘~/.octave_hist’)を使用します。
-r file ファイルfile を読み込み,現在の履歴をその内容で置き換える。もしファイル名を省略するならば,標準のファイル名(通常は‘~/.octave_hist’)を使用します。

n 履歴の最近n 行のみを表示します。

-q 履歴リストを表示するときに,番号をつけない。これは,X Window System を使っているときに,コマンドの切り取りと貼り付けをするのに便利です。

たとえば,最近入力した5 つのコマンドを,行番号なしで表示するには,history -q 5 というコマンドを使用します。

edit_history options                           [Command]

もし引数なしで実行するならば,edit_historyは,EDITOR変数で指定したエディタを使用して履歴リストを編集できるようにします。編集されることになるコマンド群は,最初にテンポラリファイルへとコピーされます。エディタを終了するとき,Octave は,そのファイルに残ったコマンドを実行します。関数を定義するためにedit_historyを使う方が,コマンドラインに直接入力しようとするよりも,より便利です。標準設定により,一連のコマンドは,エディタを終了するとすぐに実行されます。コマンドの実行を避けるためには,エディタを終了する前に,バッファから単に全ての行を削除してください。edit_historyコマンドは,編集したい最初と最後のコマンドの履歴番号を指定するための2つのオプション引数をとります。たとえば,以下のコマンド

edit_history 13

は,履歴リストの13 番目から最後までの全てのコマンドを取り出します。以下のコマンドedit_history 13 169は,13 番目から169 番目までのコマンドのみを展開します。最初の番号よりも2 番目の番号に大きい値を指定するならば,編集するためのバッファにおく前に,コマンドのリストを逆順にします。もし両方の引数を省略するならば,履歴リストに存在する以前のコマンドが使用されます。run_history [first] [last] [Command]edit_historyと同様であるが,エディタを実行せず,履歴リストに存在するコマンドを単に実行します。

EDITOR

[編集]

                       [Built-in Variable]

A string naming the editor to use with the edit_history command. If the environment
variable EDITOR is set when Octave starts, its value is used as the default.
Otherwise, EDITOR is set to "emacs".
history_file [Built-in Variable]

この変数は,コマンド履歴を保存するために使用するファイル名を指定します。標準の値は"~/.octave_hist"であるが,環境変数OCTAVE_HISTFILEによって上書きすることができる。

history_size

[編集]

                     [Built-in Variable]

この変数は,どのくらいの項目を履歴ファイルに保存するかを指定します。標準の値は1024であるが,環境変数OCTAVE_HISTSIZEによって上書きすることができる。

saving_history

[編集]

   [Built-in Variable]

もし変数saving_historyがゼロでないならば,コマンドラインで入力した行が,変数history_fileによって指定したファイルに保存されます。

2.4.6 readlineのカスタマイズ

[編集]
read_readline_init_file (file)                            [Built-in Function]
readline 初期化ファイルfile を読み込む。
もしfile を省略するならば,標準のファイル(通常は‘~/.inputrc’)を読み込む。

2.4.7 プロンプトのカスタマイズ

[編集]

以下の変数は,コマンドラインプロンプトの見た目をカスタマイズするために利用できます。Octaveでは,バックスラッシュでエスケープされる数々の特殊文字を挿入することにより,プロンプトをカスタマイズできるようになっています。それらの特殊文字は,以下のように解釈されます。

‘\t’ 時間です。
‘\d’ 日付です。
‘\n’ ラインフィードに続くキャリッジリターンを表示することにより,新しい行を開始します。
‘\s’ プログラム名(通常は‘octave’)です。
‘\w’ 現在の作業ディレクトリです。
‘\W’ 現在の作業ディレクトリのベース名です。
‘\u’ 現在のユーザ名です。
‘\h’ 最初の‘.’ までのホスト名です。
‘\H’ ホスト名です。
‘\#’ 現在のコマンドの,Octave wを起動したときからカウントしたコマンド番号です。
‘\!’ このコマンドの履歴番号です。これは,Octave を起動したときの履歴リストのコマンド番号という点で,‘\#’とは異なっています。
‘\$’ もし有効なUID が0 ならば‘#’,そうでなければ‘$’です。
‘\nnn’ 8 進数の文字コードで表記した文字がnnn です。
‘\\’ バックスラッシュです。
PS1 [Built-in Variable]

プライマリプロンプトの文字列です。対話的に実行するとき,Octave がコマンドを読み込む準備ができたときに,プライマリプロンプトを表示します。 PS1の初期値は"\s:\#> "です。これを変更するには,

octave:13> PS1 = "\\u@\\H> "

のようなコマンドを入力します。これは,ホスト‘kremvax.kgb.su’にログインしたユーザ‘boris’について,‘boris@kremvax> ’なるプロンプトになるだろう。2 つのバックスラッシュは,文字列に1 個のバックスラッシュを入力するために必要であることに留意してください。Chapter 5 [Strings] を参照してください。

PS2 [Built-in Variable]

セカンダリプロンプトの文字列です。これは,Octave が,コマンド入力を完了するために追加入力を期待するときに表示するものです。たとえば,複数行にわたる関数を定義するとき,Octave は,2 行目以降の各行の先頭にPS1の値を表示することになります。PS2の初期値は">"です。

PS4 [Built-in Variable]

もしOctave が--echo-commandsオプションをつけて起動されるならば,各入力行をエコーする前にPS4の値を表示します。PS4の初期値は\n"+ "です。--echo-commandsの解説は,Section 2.1 [Invoking Octave] を参照してください。

2.4.8 日記とエコーコマンド

[編集]

Octave の日記機能は,打ち込んだ入力およびOctave が表示した出力を記録することにより,対話セッションの全ての実行結果(ログ)を,別のファイルに保存できるようにします。

diary options                            [Command]

全てのコマンドおよびそれらが生み出した出力結果のリストを生成します。これは,端末で見えているように,入力と表示を一緒に混ぜる。

on       現在の作業ディレクトリの‘diary’なる名前のファイルに,実行結果の記録を開始します。
off      日記ファイルへの記録を中止します。
file     file という名前のファイルに実行結果を記録します。
引数を何もつけないときは,現在の設定のオン・オフを切り替える。

ときどき,関数あるいはスクリプトが評価されるときに,そのコマンドを見ることが有用なこともあります。これは,ある種の問題のデバッグに特に役立ちます。

echo options [Command]

コマンドを実行したときに,それを表示(エコー)するかどうかどうかをコントロールします。以下のオプションが利用できる。

on スクリプトファイルで実行されるコマンドを,画面に表示するようにします。
off スクリプトファイルで実行されるコマンドを,画面に表示しないようにします。
on all スクリプトファイルと関数で実行されるコマンドを,画面に表示するようにします。
off all スクリプトファイルと関数で実行されるコマンドを,画面に表示しないようにします。
もし引数をつけずに実行するならば,現在の設定のオン・オフを切り替える。
echo_executing_commands [Built-in Variable]

この変数は,エコー設定をコントロールするために使用されます。これは,以下の値の合計となります。

1 スクリプトファイルから読み込んだコマンドをエコーします。
2 関数から読み込んだコマンドをエコーします。
4 コマンドラインから読み込んだコマンドをエコーします。

1つ以上の設定を同時に行うことができる。たとえば,3 という値は,echo on allコマンドと等価です。echo_executing_commandsの値は,echoコマンドおよびコマンドラインオプション--echo-inputによって設定されます。

2.5 Octave はどのようにエラーを報告するのか

[編集]

Octave は,妥当ではないプログラムについて,2 種類のエラーを報告します。もしOctave が打ち込まれた内容を理解できないならば,parse error が発生します。たとえば,キーワードのスペルを間違ったとします。

octave:13> functon y = f (x) y = x^2; endfunction

Octave は,以下のようなメッセージをただちに表示するでしょう。

parse error:
functon y = f (x) y = x^2; endfunction
^

大部分のパースエラーについて,Octave では,あなたの入力で意味をなすことのできない行の位置をマークするために,キャレット記号(‘^’)を使用します。この例の場合,functionというキーワードのスペルが誤っていたため,Octave はエラーを生成しました。‘function f’と解釈するのではなく,Octave は2 つの連続する変数名として解釈しました。これは,この文脈では妥当ではありません。yにおいてエラーをマークしたのは,最初の名前(functon)がそれ自身,妥当な入力として受け入れられたからです。

エラーメッセージの別の種類は,評価時に発生します。これらのエラーは実行時(ランタイム)エラー,あるいは時々評価エラーとも呼ばれます。これは,それらのエラーは,プログラムが実行(run),あるいは評価(evaluated)されたときに発生することによるものです。たとえば,以前の関数定義におけるミスを修正した後に,以下のように打ち込むとします。

octave:13> f ()

Octave は以下のように応答するでしょう。

error: `x' undefined near line 1 column 24
error: evaluating expression near line 1, column 24
error: evaluating assignment expression near line 1, column 22
error: called from `f'

このエラーメッセージは複数の部分に分かれており,エラーの原因を突き止める手助けとなる一片の情報を与えています。これらメッセージは,最も奥にあるエラー点から生成されており,式および関数呼び出しを囲むトレースバックを提供します。

上の例において,最初の行は,‘x’なる名前の変数が,何かの関数あるいは式の1 行24 桁目付近で定義されていないことが判明したことを示しています。関数内で発生したエラーについて,その行は,関数の定義を含むファイルの始まりからカウントされます。トップレベルで発生したエラーについて,その行番号は,入力行の番号を示します。これは,通常はプロンプト文字列に示されています。この例の2 行目および3 行目は,代入式でエラーが発生したことを示しており,エラーメッセージの最後の行は,エラーが関数fの中で発生したことを示しています。もし仮に,関数fが別の関数(たとえばg)から呼ばれていたならば,エラーのリストはもう1 行多くなったことでしょう。

error: called from `g'

これらの関数呼び出しリストは,ふつうは,エラーが起こる前にプログラムを実行したパスをかなり容易にたどれるようになっており,再度実行する前にエラーを修正しやすくなっています。

2.6 Octave で書かれたプログラムの実行

[編集]

いちどOctave を習得してしまえば,‘#!’スクリプト機構を使用して,自己完結型のOctave スクリプトを書きたいと思うかもしれません。これは,GNU システムおよび多くのUNIX システム1 で実行できます。 たとえば,以下のような行を含む‘hello’という名前のテキストファイルを作成してみます(ここでoctave-interpreter-name は,お使いのOctave バイナリの完全なファイル名で置き換えるべきです)。

#! octave-interpreter-name -qf
# a sample Octave program
printf ("Hello, world!\n");

このファイルを(chmodを用いて)実行可能にした後,シェルから単に以下のように入力できます。helloシステムは,以下のように入力したかのようにOctave を実行する手はずを整えるでしょう。

octave hello

‘#!’で始まる行は,実行すべきインタプリタのフルパス名と,インタプリタに渡すコマンドライン引数を並べて項目リストとします。オペレーティングシステムは,与えた引数および実行したプログラムの引数リストをつけてインタプリタをを実行します。このリストの最初の項目は,Octave プログラムの完全なファイル名です。項目リストの残りは,Octave のオプション,あるいはデータファイル,またはその両方をとることができます。‘-qf’オプションは,通常の起動時メッセージの表示を抑制し,特定ユーザの‘~/.octaverc’ファイルの内容に依存して異なる挙動をしないようにするため,ふつうは,単独で実行するOctave プログラムにおいて指定されます。これについて,Section 2.1[Invoking Octave] を参照してください。オペレーティングシステムの中には,‘#!’の後に認 識される文字数に制限があるものがあるかもしれません。自己完結型のOctave スクリプトは,プログラムをOctave 言語で記述する知識のないユーザが実行できるプログラムを書きたいときに役立ちます。実行可能なOctave スクリプトを,コマンドライン引数をつけて実行するならば,その引数は組み込み変数argvとして利用することができます。これについて,Section 2.1.1 [Command LineOptions] を参照してください。たとえば以下のプログラムは,それを実行するために使用したコマンドラインを再生産するでしょう。

#! /bin/octave -qf
printf ("%s", program_name);
for i = 1:nargin
    printf (" %s", argv{i});
endfor
printf ("\n");

2.7 Octave プログラム内のコメント

[編集]

コメントは,人間が読むためにプログラムに含められ,ふつうはプログラムの一部ではないテキストのことです。コメントは,そのプログラムが行うことと,それがどのような動作をするか説明することができます。ほぼ全てのプログラミング言語は,コメント機能を提供しています。なぜならば,プログラムはコメントなしで理解することは概して困難であるためです。1 ‘#!’機構はBerkeley Unix, System V Release 4,およびいくつかのSystem V Release 3 systems から派生したUNIX システムで動作します。

Octave 言語において,コメントはシャープ記号‘#’,あるいはパーセント記号‘%’のいずれかで始まり,行末まで続きます。Octave インタプリタは,シャープまたはパーセント記号以降の行の内容を無視します。たとえば,関数fに以下のようなコメントをおくことができます。

function xdot = f (x, t)
# usage: f (x, t)
#
# This function defines the right hand
# side functions for a set of nonlinear
# differential equations.
r = 0.25;
...
endfunction

helpコマンド(Section 2.3 [Getting Help])は,関数のコメントの最初のブロック(コマンドラインから直接入力された関数についても)を見つけることができます。これは,Octaveのユーザが,組み込み関数と自分で定義した関数のヘルプを得るためには,同じコマンドを使用できることを意味します。たとえば,上のように関数fを定義した後,help fというコマンドを実行すると,以下の出力が得られます。

usage: f (x, t)
This function defines the right hand
side functions for a set of nonlinear
differential equations.

キーボードから入力した一時的なOctave プログラムにコメント行を含めることは可能ですが,ふつうはあまり役に立ちません。なぜならば,コメントの目的は,後から,そのプログラムを入力者または別の人に理解してもらう手助けをすることだからです。