HP Fortran リファレンスガイド

HP Fortran リファレンス ガイド
第7版
Manufacturing Part Number : B3908-90016
2007 年 9 月
© Copyright 2007 Hewlett-Packard Development Company, L.P.
ご注意
(1) 本書に記載した内容は、予告なしに変更することがあります。
(2) 本書は内容について細心の注意をもって作成いたしましたが、万一ご不審な点や誤り、記載
もれなど、お気付きの点がございましたら当社までお知らせください。
(3) お客様の誤った操作に起因する損害については、当社は責任を負いかねますのでご了承くだ
さい。
(4) 当社では、本書に関して特殊目的に対する適合性、市場性などについては、一切の保証をい
たしかねます。また、備品、パフォーマンスなどに関連した損傷についても保証いたしかねま
す。
(5) 当社提供外のソフトウェアの使用や信頼性についての責任は負いかねます。
(6) 本書の内容の一部または全部を、無断でコピーしたり、他のプログラム言語に翻訳すること
は法律で禁止されています。
(7) 本製品パッケージとして提供した本書や媒体は本製品用だけにお使いください。プログラム
をコピーする場合はバックアップ用だけにしてください。プログラムをそのままの形で、あるい
は変更を加えて第三者に販売することは固く禁じられています。
U.S. Government License
Confidential computer software. Valid license from HP required for possession, use or copying. Consistent
with FAR 12.211 and 12.212, Commercial Computer Software, Computer Software Documentation, and
Technical Data for Commercial Items are licensed to the U.S. Government under vendor's standard
commercial license.
著作権
©Copyright 2007 Hewlett-Packard Development Company, L.P.
本書には著作権によって保護されている内容が含まれています。本書の内容の一部または全部を
著作者の許諾なしに複製、改変、および翻訳することは、著作権法下での許可事項を除き、禁止
されています。
商標
Intel® および Itanium® は、米国ならびに他の国における Intel Corporation またはその関連会社の商
標または登録商標です。
Unix® は、The Open Group の登録商標です。
2
目次
1. HP Fortran の概要
HP Fortran の機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
プログラム形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
データ型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ポインター . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
制御構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
演算子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
手続き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
モジュール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
入出力機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
32
32
32
33
33
33
33
34
34
35
2. 言語要素
文字集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
構文素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
名前 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
プログラム構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文番号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文............................................................................
プログラムファイルのプログラム形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
自由形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
固定形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INCLUDE 行. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
39
40
41
42
43
45
45
47
50
3. 配列
配列の基礎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
配列宣言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
形状明示配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
形状引き継ぎ配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
形状無指定配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
大きさ引き継ぎ配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
部分配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
添え字三つ組 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ベクトル添え字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
配列値を持つ構造体成分の引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
配列構成子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
配列式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
54
54
56
58
61
63
64
65
67
70
72
3
目次
配列値をとる関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
利用者定義関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
配列問い合わせ組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
74
74
76
4. 式と代入
式............................................................................
演算対象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
演算子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
特殊形式の式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
代入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
代入文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ポインター代入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
配列選別代入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
78
79
85
90
90
92
94
5. データ型およびデータオブジェクト
組み込み型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
組み込み型の型宣言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
暗黙の型宣言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
定数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文字部分列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
自動割り付けデータオブジェクトとしての文字列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
構造型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
構造型を定義する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
列構造型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
構造体成分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
構造型のオブジェクトを宣言する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
構造体構成子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
構造型オブジェクトのデータの割り付け境界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
構造型の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ポインター . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ポインター結合状態 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
境界の正しくないデータの問題の解決 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Itanium® ベースのアプリケーションの場合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
100
102
107
108
114
115
117
117
119
119
120
120
121
122
125
126
130
130
6. 実行制御
制御構文およびブロック . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
CASE 構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4
目次
DO 構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IF 構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
フロー制御文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTINUE 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CYCLE 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXIT 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
割り当て形 GO TO 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
計算形 GO TO 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
単純 GO TO 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
算術 IF 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
論理 IF 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PAUSE 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
STOP 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
136
140
142
142
143
144
144
145
146
147
147
148
149
7. プログラム単位および手続き
用語と概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
プログラム単位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
手続き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
有効範囲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
結合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
主プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
外部手続き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
手続き定義 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
手続き引用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
手続き引用から返す . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
代替入口点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
内部手続き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
引き数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
引き数結合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
引き数キーワード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
省略可能な引き数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
二重結合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INTENT 属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
%VAL および %REF 組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
手続き引用仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
引用仕様宣言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
総称手続き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
152
152
153
153
153
155
158
158
159
161
163
164
166
168
168
172
173
174
175
175
178
179
181
5
目次
利用者定義演算子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
利用者定義代入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
モジュール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
モジュールプログラム単位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
USE 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
見本プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
初期値設定プログラム単位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
182
184
188
188
190
191
196
8. 入出力およびファイル処理
記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
書式付き記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
書式なし記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイル終了記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
外部ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
内部ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
装置へのファイルの接続 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
外部ファイルへ接続する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
内部ファイルに対して入出力を実行する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
事前に接続済みの装置番号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
自動的に開かれる装置番号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイル探査方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
順番探査 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
直接探査 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
停留入出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
入出力文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
入出力文の構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
I/O 指定子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
入出力項目並び . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
バイナリ入出力変換 (Itanium® ベース システム ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
使用可能な変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
バイナリ変換の指定方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ASA 復帰制御 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
プログラム例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
内部ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
停留入出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイル探査 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
200
200
200
200
201
201
201
203
203
204
204
205
206
206
212
213
214
216
216
218
223
223
223
225
226
226
228
230
目次
9. 入出力の編集
FORMAT 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
書式仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文字列編集記述子 (’...’ または ”...”) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
改行編集記述子 ($) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
スラッシュ編集記述子 (/) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
コロン編集記述子 (:) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A および R ( 文字 ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B (2 進 ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BN および BZ ( 空白 ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D, E, EN, ES, F, G および Q ( 実数 ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
H ( ホレリス ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
I ( 整数 ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
L ( 論理 ) 編集記述子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
M および N 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
O (8 進 ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
P ( 桁移動数 ) 編集記述子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Q ( 残りバイト数 ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
S, SP および SS ( 正符号 ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
T, TL, TR および X ( タブ ) 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Z (16 進 ) 編集記述子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文字式の書式仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
入れ子の書式仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
書式仕様と入出力データの並び . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
234
235
236
239
239
240
240
241
243
245
246
251
252
254
255
255
257
258
259
259
259
262
263
264
10. HP Fortran 文
属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文および属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ACCEPT ( 拡張 ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ALLOCATABLE ( 文と属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ALLOCATE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ASSIGN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
266
268
269
271
273
276
AUTOMATIC ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
BACKSPACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
BLOCK DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
BUFFER IN ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
BUFFER OUT ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
7
目次
BYTE ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CALL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CHARACTER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CLOSE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COMMON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COMPLEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTAINS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTINUE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CYCLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DEALLOCATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
287
289
292
295
298
300
304
307
309
310
312
316
DECODE ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
DIMENSION ( 文および属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
DO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
DOUBLE COMPLEX ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DOUBLE PRECISION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ELSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ELSE IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ELSEWHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
329
331
333
334
336
ENCODE ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
END . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
END ( 構文 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
END ( 構造体定義、拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
END INTERFACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
END TYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ENDFILE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ENTRY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EQUIVALENCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
342
343
344
345
346
348
352
356
EXTERNAL ( 文および属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
GO TO ( 割り当て形 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GO TO ( 計算形 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GO TO ( 単純 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IF ( 算術 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IF THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
365
366
367
368
369
目次
IF ( 論理 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IMPLICIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INCLUDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INQUIRE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INTEGER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
370
371
373
375
385
INTENT ( 文および属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
INTERFACE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
INTRINSIC ( 文および属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
LOGICAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
MAP ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MODULE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MODULE PROCEDURE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NAMELIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NULLIFY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
398
399
401
403
405
ON ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
OPEN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
OPTIONAL ( 文および属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OPTIONS ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PARAMETER ( 文および属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PAUSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
418
421
422
425
POINTER ( クレイ形式拡張 ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
POINTER ( 文および属性 ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
PRINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
PRIVATE ( 文および属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
PROGRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
PUBLIC ( 文および属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
REAL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
RECORD ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
RETURN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
REWIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
SAVE ( 文および属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
SELECT CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
SEQUENCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
STATIC ( 文、属性、拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
STOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
STRUCTURE ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
SUBROUTINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
9
目次
TARGET ( 文と属性 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TASK COMMON ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TYPE ( 宣言 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TYPE ( 定義 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TYPE ( 入出力 ) ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
UNION ( 拡張 ). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
USE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
481
484
486
489
491
492
493
VIRTUAL ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
VOLATILE ( 拡張 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
WHERE ( 文および構文 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
WRITE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
496
497
499
503
11. 組み込み手続き
基本用語と概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
組み込み関数の可用性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
サブルーチンおよび関数の組み込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
総称関数名と個別関数名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
組み込み関数の分類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
最適化された組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
規格に定められていない組み込み手続き . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
データ表現の数体系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
データ表現の数体系の組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ビットの数体系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
整数の数体系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
実数の数体系 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
組み込み手続きの機能分類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
組み込み手続きの仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ABORT() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ABS(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ACHAR(I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ACOS(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ACOSD(X). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ACOSH(X). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ADJUSTL(STRING) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ADJUSTR(STRING) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
AIMAG(Z) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
AINT(A, KIND). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ALL(MASK, DIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
510
510
510
510
511
512
513
514
514
515
516
516
518
521
521
521
522
523
523
524
525
525
526
526
527
目次
ALLOCATED(ARRAY) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
AND(I, J) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ANINT(A, KIND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ANY(MASK, DIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ASIN(X). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ASIND(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ASINH(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ASSOCIATED(POINTER, TARGET) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ATAN(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ATAN2(Y, X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ATAN2D(Y, X). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ATAND(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ATANH(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BADDRESS(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BIT_SIZE(I). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BTEST(I, POS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CEILING(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CHAR(I, KIND). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CMPLX(X, Y, KIND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONJG(Z) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COS(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COSD(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COSH(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
COUNT(MASK, DIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CSHIFT(ARRAY, SHIFT, DIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DATE(DATESTR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DATE_AND_TIME(DATE, TIME, ZONE, VALUES) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DBLE(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DCMPLX(X,Y) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DFLOAT(A). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DIGITS(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DIM(X, Y) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DNUM(I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DOT_PRODUCT(VECTOR_A, VECTOR_B). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DPROD(X, Y) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DREAL(A). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EOSHIFT(ARRAY, SHIFT, BOUNDARY, DIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EPSILON(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
528
528
529
530
531
532
532
533
534
535
535
536
537
537
538
538
539
540
541
541
542
543
543
544
545
546
546
548
549
549
550
550
551
551
552
553
553
555
11
目次
EXIT(STATUS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXP(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
EXPONENT(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FLOOR(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FLUSH(LUNIT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FNUM(UNIT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FRACTION(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FREE(P) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FSET(UNIT, NEWFD, OLDFD). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FSTREAM(UNIT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GETARG(N, STRING) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GETENV(VAR, VALUE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
GRAN() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HFIX(A). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HUGE(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IACHAR(C) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IADDR(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IAND(I, J) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IARGC(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IBCLR(I, POS). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IBITS(I, POS, LEN). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IBSET(I, POS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ICHAR(C) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IDATE(MONTH, DAY, YEAR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IDIM(X, Y) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IEOR(I, J). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IGETARG(N, STR, STRLEN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IJINT(A). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IMAG(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INDEX(STRING, SUBSTRING, BACK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INT(A, KIND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INT1(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INT2(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INT4(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INT8(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
INUM(I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IOMSG(N, MSG). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IOR(I, J) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
556
556
557
557
558
558
558
559
559
559
560
560
560
561
561
562
563
563
564
565
565
566
567
567
568
568
569
570
570
571
572
573
573
574
574
575
575
575
目次
IQINT(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IRAND() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IRANP(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISHFT(I, SHIFT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISHFTC(I, SHIFT, SIZE). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISIGN(A, B). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ISNAN(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IXOR(I, J) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IZEXT(A). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
JNUM(I). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
JZEXT(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
KIND(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
KZEXT(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LBOUND(ARRAY, DIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LEN(STRING). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LEN_TRIM(STRING). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LGE(STRING_A, STRING_B). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LGT(STRING_A, STRING_B) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LLE(STRING_A, STRING_B) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LLT(STRING_A, STRING_B) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LOC(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LOG(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LOG10(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LOGICAL(L, KIND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LSHFT(I, SHIFT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LSHIFT(I, SHIFT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MALLOC(SIZE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MATMUL(MATRIX_A, MATRIX_B) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAX(A1, A2, A3, ...) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXEXPONENT(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXLOC(ARRAY, MASK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MAXVAL(ARRAY, DIM, MASK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MCLOCK() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MERGE(TSOURCE, FSOURCE, MASK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MIN(A1, A2, A3, ...) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MINEXPONENT(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MINLOC(ARRAY, MASK). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MINVAL(ARRAY, DIM, MASK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
576
577
577
578
579
580
580
581
582
582
583
583
584
584
586
586
587
588
588
589
590
590
591
591
592
592
593
593
594
595
595
597
598
598
599
600
600
602
13
目次
MOD(A, P). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MODULO(A, P) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MVBITS(FROM, FROMPOS, LEN, TO, TOPOS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NEAREST(X, S) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NINT(A, KIND). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
NOT(I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OR(I, J). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PACK(ARRAY, MASK, VECTOR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRECISION(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRESENT(A). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRODUCT(ARRAY, DIM, MASK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QEXT(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QFLOAT(A). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QNUM(I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
QPROD(X, Y) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RADIX(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RAN(ISEED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RAND() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RANDOM_NUMBER(HARVEST) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RANDOM_SEED(SIZE, PUT, GET) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RANGE(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
REAL(A, KIND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
REPEAT(STRING, NCOPIES) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RESHAPE(SOURCE, SHAPE, PAD, ORDER) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RNUM(I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RRSPACING(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RSHFT(I, SHIFT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
RSHIFT(I, SHIFT). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCALE(X, I) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SCAN(STRING, SET, BACK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SECNDS(X). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SELECTED_INT_KIND(R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SELECTED_REAL_KIND(P, R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SET_EXPONENT(X, I). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SHAPE(SOURCE). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIGN(A, B) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIN(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIND(X). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
603
603
604
605
606
606
607
608
609
610
610
612
612
613
613
613
614
615
615
616
616
617
618
619
620
621
621
621
622
622
623
624
624
625
626
626
627
628
目次
SINH(X). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIZE(ARRAY, DIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SIZEOF(A). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SPACING(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SPREAD(SOURCE, DIM, NCOPIES) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SQRT(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SRAND(ISEED) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SUM(ARRAY, DIM, MASK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SYSTEM(STR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
SYSTEM_CLOCK(COUNT, COUNT_RATE, COUNT_MAX) . . . . . . . . . . . . . . . . . . . . . . . .
TAN(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TAND(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TANH(X) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TIME(TIMESTR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TINY(X). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TRANSFER(SOURCE, MOLD, SIZE). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TRANSPOSE(MATRIX). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TRIM(STRING). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
UBOUND(ARRAY, DIM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
UNPACK(VECTOR, MASK, FIELD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
VERIFY(STRING, SET, BACK). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XOR(I, J) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ZEXT(A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
628
629
630
630
631
632
632
633
634
634
635
636
636
637
637
638
639
640
640
641
642
643
644
12. BLAS および libU77 ライブラリ
libU77 および BLAS ルーチンの呼び出し . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
コンパイル行オプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2000 年への適合性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ライブラリ関数を宣言する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ライブラリルーチンを EXTERNAL として宣言する. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
マニュアルページ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
libU77 ルーチン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
BLAS ルーチン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
646
646
647
647
648
649
650
660
A. 入出力実行時エラーメッセージ
実行時入出力エラー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
用語集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
15
目次
索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
16
表一覧
表 1. 表記の規約 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
表 2-1. Fortran 90 文字集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
表 2-2. プログラム単位中の文の順序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
表 2-3. 有効域内で使用できる文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
表 2-4. 空白を省略可能なキーワード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
表 3-1. 配列問い合わせ組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
表 4-1. 論理演算子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
表 4-2. 演算子の優先順位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
表 4-3. 演算子の優先順位の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
表 4-4. 初期値式と宣言式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
表 4-5. variable=expression の変換 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
表 5-1. 組み込み型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
表 5-2. 型宣言文中の属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
表 5-3. エスケープ文字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
表 5-4. 構造体記憶領域の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
表 7-1. 単純宣言文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
表 7-2. 実行文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
表 8-1. 並び入出力の入力値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
表 8-2. 並び入力データの形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
表 8-3. 並び出力データの編集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
表 8-4. データ転送文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
表 8-5. ファイル位置付け文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
表 8-6. 補助入出力文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
表 8-7. 入出力文および指定子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
表 8-8. ASA 復帰制御文字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
表 9-1. 編集記述子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
表 9-2. 文字列編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
表 9-3. 入力時の文字データ欄の内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
表 9-5. A および R 編集記述子 : 入力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
表 9-4. 出力時の文字データ欄の内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
表 9-6. A および R 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
表 9-7. B 編集記述子 : 入力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
表 9-8. B 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
表 9-9. BN および BZ 編集記述子 : 入力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
表 9-10. D, E, F および G 編集記述子 : 入力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
表 9-11. D および E 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
表 9-12. EN および ES 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
表 9-13. F 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
表 9-14. G 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
表 9-15. H 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
表 9-16. I 編集記述子 : 入力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
17
表一覧
表 9-17. I 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 9-18. L 編集記述子 : 入力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 9-19. L 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 9-20. O 編集記述子 : 入力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 9-21. O 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 9-22. P 編集記述子 : 入力例と出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 9-23. Z 編集記述子 : 入力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 9-24. Z 編集記述子 : 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 9-25. 編集制御と入れ子の書式仕様 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-1. 相互利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-2. ALLOCATABLE 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-3. BYTE 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-4. CHARACTER 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-5. COMMON 文 : 共通ブロックの割り付け例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-6. COMPLEX 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-7. DIMENSION 文 : 利用可能な属性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-8. DOUBLE COMPLEX 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-9. DOUBLE PRECISION 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-10. EXTERNAL 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-11. INQUIRE 文 : ACCESS= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-12. INQUIRE 文 : ACTION= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-13. INQUIRE 文 : BLANK= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-14. INQUIRE 文 : DELIM= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-15. INQUIRE 文 : DIRECT= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-16. INQUIRE 文 : EXIST= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-17. INQUIRE 文 : FORM= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-18. INQUIRE 文 : FORMATTED= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-19. INQUIRE 文 : NAMED= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-20. INQUIRE 文 : OPENED= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-21. INQUIRE 文 : PAD= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-22. INQUIRE 文 : POSITION= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-23. INQUIRE 文 : READ= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-24. INQUIRE 文 : READWRITE= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-25. INQUIRE 文 : SEQUENTIAL= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-26. INQUIRE 文 : UNFORMATTED= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-27. INQUIRE 文 : WRITE= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-28. INTEGER 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-29. INTENT 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-30. INTRINSIC 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-31. LOGICAL 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
表 10-32. ON 文によって処理される例外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
253
254
255
256
256
258
260
261
264
266
271
287
295
302
304
322
329
331
357
376
376
376
377
377
377
378
378
379
379
380
380
380
381
381
382
382
385
388
393
395
408
表一覧
表 10-33. OPEN 文 : ACCESS= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411
表 10-34. OPEN 文 : ACTION= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
表 10-35. OPEN 文 : BLANK= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
表 10-36. OPEN 文 : DELIM= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
表 10-37. OPEN 文 : FORM= の値. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
表 10-38. OPEN 文 : PAD= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
表 10-39. OPEN 文 : POSITION= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
表 10-40. OPEN 文 : STATUS= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
表 10-41. OPTIONAL 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
表 10-42. PARAMETER 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
表 10-43. PARAMETER 文 : 利用可能な組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
表 10-44. POINTER 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
表 10-45. PRIVATE 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
表 10-46. PUBLIC 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
表 10-47. READ 文 : ADVANCE= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
表 10-48. REAL 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
表 10-49. SAVE 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
表 10-50. STATIC 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
表 10-51. TARGET 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
表 10-52. TARGET 文 : array-spec の構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
表 10-53. TYPE 文 : 利用可能な属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
表 10-54. WRITE 文 : ADVANCE= の値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
表 11-1. 最適化された組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
表 11-2. データ表現の数体系関連の組み込み関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
表 11-3. 組み込み手続きの分類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
表 11-4. AND 組み込み関数の真偽表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
表 11-5. BOUNDARY 引き数のデフォルト値 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
表 11-6. IAND 組み込み関数の真偽表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
表 11-7. IEOR 組み込み関数の真偽表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
表 11-8. IOR 組み込み関数の真偽表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
表 11-9. IXOR 組み込み関数の真偽表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
表 11-10. NOT 組み込み関数の真偽表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
表 11-11. OR 組み込み関数の真偽表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
表 12-1. libU77 の名前の競合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
表 12-2. libU77 ルーチンの分類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
表 12-3. libU77 ルーチン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
表 12-4. BLAS ルーチン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
表 A-1. 実行時入出力エラー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
19
表一覧
20
出版履歴
出版の日付は、最新版ができるたびに変更します。内容の小さな変更に対しては、増刷の際に対
応し、出版日の変更は行いません。マニュアルの部品番号は、改訂が行われるたびに変更しま
す。
新版の作成は、記載内容の訂正もしくはドキュメント製品の変更にともなって行われます。お手
元のマニュアルが最新版かどうかは、当社の営業担当に確認してください。
•
1998 年 10 月 第 1 版、B3908-90002 ( 英語版のみ )
•
2001 年 9 月 第 2 版、B6252-90004 ( 英語版 : B3908-90003)
•
2003 年 6 月 第 3 版、B3908-90005 ( 英語版 : B3908-90004)
•
2003 年 9 月 第 4 版、B3908-90007 ( 英語版 : B3908-90006)
•
2004 年 12 月 第 5 版、B3908-90009 ( 英語版 : B3908-90008)
•
2007 年 2 月 第 6 版、B3908-90014 ( 英語版 : B3908-90013)
•
2007 年 9 月 第 7 版、B3908-90016 ( 英語版 : B3908-90015)
原典
本書は『HP Fortran Programmer's Reference』(HP Part No. B3908-90015) を翻訳したものです。
21
22
納入後の保証について
•
保証の期間は、ご購入時に当社よりお出しした見積書に記載された期間とします。保証サー
ビスは、当社の定める休日を除く月曜日から金曜日までの、午前 8 時 45 分から午後 5 時 30
分の範囲で無料で行います。当社で定めたシステム製品については出張修理を行い、その他
の製品については当社にご返却いただいた上での引取り修理となります。当社が定める地域
以外における出張修理対象製品の修理は、保証期間中においても技術者派遣費が有料となり
ます。
•
ソフトウェア製品の保証は上記にかかわらず、下記に定める範囲とさせていただきます。
— ソフトウェア製品およびマニュアルは当社が供給した媒体物の破損、資料の落丁および
プログラムインストラクションが実行できない場合のみ保証いたします。
— バグおよび前記以外の問題の解決は、別に締結するソフトウェアサポート契約に基づい
て実施されます。
•
次のような場合には、保証期間内でも修理が有料となります。
— 取扱説明書等に記載されている保証対象外部品の故障の場合。
— 当社が供給していないソフトウェア、ハードウェア、または補用品の使用による故障の場合。
— お客様の不適当または不十分な保守による故障の場合。
— 当社が認めていない改造、酷使、誤使用または誤操作による故障の場合。
— 納入後の移設が不適切であったための故障または損傷の場合。
— 指定外の電源 ( 電圧、周波数 ) 使用または電源の異常による故障の場合。
— 当社が定めた設置場所基準に適合しない場所での使用、および設置場所の不適当な保守
による故障の場合。
— 火災、地震、風水害、落雷、騒動、暴動、戦争行為、放射能汚染、およびその他天災地
変等の不可抗力的事故による故障の場合。
•
当社で取り扱う製品は、ご需要先の特定目的に関する整合性の保証はいたしかねます。ま
た、そこから生じる直接的、間接的損害に対しても責任を負いかねます。
•
当社で取り扱う製品を組み込みあるいは転売される場合は、最終需要先における直接的、間
接的損害に対しては責任を負いかねます。
•
製品の保守、修理用部品の供給期間は、その製品の製造中止後 5 年間とさせていただきます。
本製品の修理については取扱説明書に記載されている最寄の事業所へお問い合わせください。
23
24
まえがき
本書は、HP Fortran V2.0 以降を使用するプログラマーのための言語リファレンスで、PA-RISC お
よび Itanium® ベース アーキテクチャ対応の HP Fortran プログラミング言語の特徴と要件につい
て説明しています。
本書は、HP Fortran アプリケーションを書いたり、移植することに関心のあるプログラマーを対
象にしています。また、パラレルの概念と指令、および、それを使用するプログラムの最適化に
関する情報が掲載されています。
本書で紹介する概念は、HP 社のパラレルアーキテクチャ、プログラミングモデル、または最適
化の概念に慣れていなくても理解できます。
25
マニュアルの範囲
本書は、次のマシンでの HP Fortran 90 コンパイラを使用したプログラミング手法について説明し
ています。
•
HP-UX 11i v1 以降のバージョン (HP 9000 システム )
•
HP-UX 11i v2 以降のバージョン (Integrity システム )
HP Fortran は、拡張共有メモリー プログラミングモデルをサポートしています。HP-UX 11i v1 以
降には、必要なアセンブラ、リンカー、およびライブラリが組み込まれています。
HP Fortran は、略して Fortran 90、Fortran95 と呼ばれる、Fortran 国際規格を完全にサポートして
います。それらは、ISO/IEC 1539:1991(E) と ISO/IEC 1539:1997(E) により定義されています。
26
表記規約
本項では、本書で使用する表記規約について説明します。
表 1 表記の規約
bold monospace
コマンド例中の bold monospace ( 太字のモノ
スペースフォント ) は、正確にそのとおり入力
しなければならない項目を示します。
monospace
本文中の monospace ( モノスペースフォント )
は、コマンド名、システムコール、データ構
造、型を示します。
コマンド例中の monospace ( モノスペースフォ
ント ) は、エラーメッセージを初めとするコマ
ンド出力を示します。
italic
構文中の italic ( イタリック ) は、指定しなけ
ればならない変数を示します。
次に示す例では、変数 output_file が省略可
能であることを示すために角かっこ ( [ ] ) を使
用しています。
commandinput_file [output_file]
角かっこ ( [ ] )
コマンド例中の角かっこは、省略可能な入力項
目を示します。
中かっこ ({})、縦線
(|)
コマンド構文中の中かっこで囲まれた文字は、
選択肢を示します。選択肢は、中かっこで囲ま
れ、縦線 (|) で区切られます。
次に示すコマンド例では、a または b を入力で
きることを示します。
command {a | b}
27
表 1 表記の規約 ( 続き )
水平省略記号 (...)
コマンド例中の水平省略記号は、直前の項目の
繰り返しを示します。
垂直省略記号
垂直省略記号は、例文の中でコードが 1 行以上
省略されていることを表します。
Keycap
Keycap は、コマンド例を実行するために押す
キーボードのキーを示します。
マニュアルページの参照先は、mnpgname(1) 形式で表記されています。ここで mnpgname は、マ
ニュアルページ名で、後続のかっこ内は項番号です。このマニュアルページを参照するには、次
のように入力します。
% man 1 mnpgname
注記
「注記」は、重要な補足情報を示します。
コマンドの構文
次の例について説明します。
COMMAND input_file [...] {a | b} [output_file]
COMMAND は、このとおり入力します。
input_file は、ユーザーが指定するファイル名を示します。
角かっこ中の水平省略記号は、省略可能な入力ファイル名を追加指定できることを示しま
す。
a または b を指定する必要があります。
[output_file] は、省略可能なファイル名を示します。
28
関連文書
次の文書は、コンパイラおよび関連ツール使用時の参考資料です。
• 『HP aC++ Online Programmer's Guide』は、aC++ についての参照情報と簡単な演習を提供しま
す。本マニュアルは html フォーマットでのみ利用できます。
• 『HP C/HP-UX Programmer's Guide』では、C についての選択された項目が説明されています。
• 『HP C/HP-UX Reference Manual』は、HP 社により実装された C プログラミング言語の参照情
報を提供します。
• 『HP-UX フローティング・ポイント・ガイド』は、HP 9000 シリーズ 800 システムでの浮動小
数点演算の実装方法や、浮動小数点の動作がプログラマーに与える影響について説明してい
ます。浮動小数点を多用するプログラムを書いたり、移植したりするプログラマーにとって
有用な情報が書かれています。
• 『HP Fortran プログラマーガイド』は、広範囲の使用情報 ( コンパイル方法やリンク方法など
)、HP Fortran に移行するための推奨事項とツール、および HP Fortran 用の C および HP-UX
ルーチンを呼び出す方法が掲載されています。
• 『HP MPI User's Guide』は、HP 社のメッセージパッシング インタフェースライブラリを使用
するメッセージパッシング プログラミングを説明しています。
• 『HP MLIB User's Guide VECLIB and LAPACK』は、工業的で科学的なアプリケーションに対応
する数学的なソフトウェアや計算用のカーネルについて説明しています。
• 『HP-UX リンカー&ライブラリー・ユーザーガイド』では、HP 社のコンパイラ、アセンブ
ラ、リンカー、ライブラリ、およびオブジェクトファイルを使用した、HP-UX でのソフト
ウェアの開発方法について説明しています。
• 『HP-UX パラレル プログラミング ガイド』では、HP-UX に実装されたコンパイラ (HP
Fortran, HP aC++ (ANSI C++), HP C) を使用して、共有メモリーを効率的にプログラミングす
る方法を説明しています。このマニュアルは、HP-UX 11i v1 以降を使用する、Fortran、C、
および C++ に習熟したプログラマーを対象としています。
• 『Programming with Threads on HP-UX』は、POSIX スレッドによるプログラミングについて説
明しています。
• 『Threadtime』(Scott J. Norton と Mark D. DiPasquale による共著 ) は、POSIX スレッド構造、ス
レッド管理機能、およびスレッドの作成、終了、同期を初めとする、スレッド管理の基本に
ついての詳細なガイドラインを提供します。
29
注記
30
これらの文書の多くは、HP テクニカルドキュメント Web サイト http://docs.hp.com
( 英語版 )、http://docs.hp.com/ja ( 日本語版 ) から入手できます。特定の文書を検索
するには、このサイトの検索リンクを使用して、文書名または主題を検索してく
ださい。
1 HP Fortran の概要
本章では、Fortran 77 にはなかった HP Fortran の標準機能を要約しています。本章で説明する項
目は、次のとおりです。
•
プログラム形式
•
データ型
•
ポインター
•
配列
•
制御構文
•
演算子
•
手続き
•
モジュール
•
入出力機能
•
組み込み関数
第1章
31
HP Fortran の概要
HP Fortran の機能
HP Fortran の機能
ここでは、FORTRAN 77 規格にはなかった Fortran の機能と、本書での掲載個所を要約します。
プログラム形式
FORTRAN 77 の固定形式は、文区切り記号のセミコロン (;) と先頭に感嘆符 (!) を付けた注釈行が
機能拡張されています。
また、自由形式のソースコードもサポートされます。ソースプログラムファイルで使用する形式
は、通常はファイルの接尾辞で示されますが、デフォルトの形式は +source コンパイル行オプ
ションを使用して無効にできます。
プログラム形式についての詳細は、45 ページの「プログラムファイルのプログラム形式」の項
を参照してください。
データ型
•
データ宣言には、種別型パラメータ、つまり、宣言されるデータオブジェクトの値の範囲と
精度を決定する整数値が含まれます。この種別型パラメータ値は、その型の言語要素を表す
バイト数です。ただし、複素数型の言語要素の場合は、種別型の値の 2 倍のバイト数が必要
です。
原則的には、Fortran には、大きな文字集合を扱う言語用のマルチバイト文字データは、文字
型の種別型パラメータを使用して実装できます。ただし、HP Fortran では、ファイル名、注
釈、および文字定数には EUC ( 拡張 UNIX コード ) を使用してください。
•
Fortran は、組み込み型 ( 整数型、実数型、複素数型、論理型、文字型 ) の言語要素や、前もっ
て定義された構造型の言語要素で構成される構造型をサポートします。構造型のオブジェク
トは、組み込み型のオブジェクトと同様に宣言できます。
組み込み型と構造型については、100 ページの「組み込み型」の項と 117 ページの「構造型」の
項を参照してください。
ポインター
ポインターは、同じ型の他の変数のアドレスを含む変数です。Fortran 90 では、ポインターは
POINTER 属性で宣言されます。ポインターは別名であり、別名が表す変数 ( または割り付けられ
た空間 ) はその指示先です。ポインターを使用すると、データに動的にアクセスして処理できま
す。詳細は、125 ページの「ポインター」の項を参照してください。
32
第1章
HP Fortran の概要
HP Fortran の機能
配列
Fortran 90 規格では、配列に関して次の新機能が定義されています。
•
全体配列または配列要素の部分集合を処理するための演算が許される部分配列。式、関数、
および代入に配列値を使用できます。WHERE 構文および文は、マスク配列の代入に使用され
ます。
•
配列構成子。要素として定数または変数を使用できる名前なしの 1 次元配列です。RESHAPE 組
み込み関数を使用すると、配列構成子を高次元の配列値に変換できます。
•
新種の配列
— 形状引き継ぎ配列は、対応する実引き数の大きさと形状を引き継ぐ仮引き数です。
— 形状無指定配列は、指示先の配列オブジェクトと結合されると確定されます。
— 自動割り付け配列には、定数でない上下限が最低 1 個は含まれます。
配列については、51 ページの第 3 章 「配列」を参照してください。
制御構文
•
CASE 構文では、整数型、文字型、または論理型の場合に、選択子の値に基づいて、結合して
いる 1 つ以上の文を選択し、実行します。
•
他の形式の DO 文を使用すると、DO ループの最後に分岐したり、DO ループから抜け出すことが
できます。
これらの構文については、134 ページの「制御構文およびブロック」の項を参照してください。
演算子
組み込み型または構造型の演算対象を使用すると、独自の手続きを書くことによって代入などの
組み込み演算子用の新規演算を定義できます。182 ページの「利用者定義演算子」の項と 184
ページの「利用者定義代入」の項を参照してください。
手続き
•
Fortran 90 には、外部手続きの明示的な引用仕様を提供する手続き引用仕様宣言と呼ばれる機
能があります。この機能によって、手続きの呼び出しに対して仮引き数の名前と属性が使用
可能になり、コンパイラは仮引き数と実引き数が一致していることを確認できます。引用仕
様宣言については、178 ページの「手続き引用仕様」の項を参照してください。
第1章
33
HP Fortran の概要
HP Fortran の機能
•
実引き数は、引き数の並びから省略したり、仮引き数と異なる順序で指定できます。
•
利用者定義演算子を実装したり、代入演算子などの組み込み演算子を拡張できます。182
ページの「利用者定義演算子」の項と 184 ページの「利用者定義代入」の項を参照してくだ
さい。
•
手続きの仮引き数には、INTENT 属性 (IN, OUT, または INOUT) を指定することができます。
175 ページの「INTENT 属性」の項を参照してください。
•
モジュール副プログラム、外部副プログラム、または主プログラム単位内に副プログラムを
書くことができます。164 ページの「内部手続き」の項を参照してください。
•
再帰的手続き (HP FORTRAN 77 の拡張機能 ) は、Fortran 90 の標準機能です。詳細は、161 ペー
ジの「再帰的引用」の項を参照してください。
モジュール
モジュールは、データオブジェクト、名前付き定数、構造型、手続き、演算子、および変数群の
指定に使用できるプログラム単位です。これらのモジュール言語要素への部分アクセスまたは完
全アクセスは、USE 文によって可能です。言語要素を PRIVATE 宣言すると、そのモジュール内
でしか識別できなくなります。
モジュールの用途の 1 つは、大域データへのアクセスを制御し、COMMON ブロックより安全な
代替手段とすることです。また、モジュールを使用すると、構造型の仕様とそれに結合された演
算を容易にカプセル化できます。
モジュールについては、188 ページの「モジュール」の項を参照してください。
入出力機能
•
停留入出力
FORTRAN 77 では、記録に基づいた入出力処理を行った後、ファイルポインターは次の記録
の最初に移動します。Fortran 90 では、ADVANCE=NO 指定子を使用して、次の記録の最初では
なく、読み書きされた文字の直後にファイルポインターを位置付けることができます。停留
入出力によって、可変長記録の長さを判別できます。詳細は、213 ページの「停留入出力」
の項を参照してください。
•
変数群入出力
従来は FORTRAN 77 の拡張機能として使用可能だった変数群入出力が、Fortran 90 の標準機
能になりました。この機能によって、名前付きの変数群に対して反復的な入出力処理を実行
できます。詳細は、210 ページの「変数群入出力」の項を参照してください。
34
第1章
HP Fortran の概要
HP Fortran の機能
組み込み関数
Fortran 90 には、配列操作用に新しい組み込み手続きが多数提供されています。その多くは要素
別であり、スカラまたは配列引き数をとります。後者の場合、結果は手続きを各配列要素に個別
に適用した場合と同じになります。
さらに、配列全体を処理する変形関数と、計算された値ではなく引き数の属性に関する情報を返
す問い合わせ関数も提供されます。
表 3-1 は、配列問い合わせ組み込み関数を示しています。すべての組み込み手続きについては
509 ページの第 11 章 「組み込み手続き」を参照してください。
第1章
35
HP Fortran の概要
HP Fortran の機能
36
第1章
2 言語要素
本章では、HP Fortran プログラムの基本要素について説明します。説明する項目は、次のとおり
です。
•
文字集合
•
構文素
•
プログラム構造
•
文番号
•
文
•
プログラムファイルのプログラム形式
•
INCLUDE 行
第2章
37
言語要素
文字集合
文字集合
Fortran 90 規格の文字集合は、表 2-1 のように、英字、数字、下線、および特殊文字から構成さ
れます。HP Fortran 文字集合は、Fortran 90 文字集合と、次の文字から構成されます。
•
制御文字 ( タブ、改行、および復帰 )。通常、復帰とタブはソースプログラム中で「空白」と
して処理されます。これらの制御文字を自由に使用して、ソースを読みやすくすることがで
きます。
•
1 桁目に指定されたハッシュ文字 (#) は、注釈の始まりを表します。これは、ソースファイル
に埋め込まれた C プリプロセッサ指令を注釈として処理できるようにするための HP 拡張機
能です。
表 2-1 Fortran 90 文字集合
分類
文字
英字
A ~ Z, a ~ z
数字
0~9
下線
_
特殊文字
空白
: ! " % & ; < > ?$
= + - * / ( ) , . '
小文字のアルファベット文字は、文字列またはホレリス定数で使用する場合を除き、大文字と等
価です。
HP Fortran では、102 ページの「組み込み型の型宣言」の項で説明するように、デフォルトの文
字型である CHARACTER(KIND=1) しかサポートしません。ただし、EUC ( 拡張 UNIX コード ) と
Shift-JIS コードは、サポートします。
38
第2章
言語要素
構文素
構文素
構文素は、文字の並びからなるプログラムの構築ブロックです。構文素は、名前、演算子、定数
表現、文番号、キーワード、囲み記号、および、次のように文字と文字の組み合わせを含みま
す。
,
第2章
=
=>
:
::
;
%
39
言語要素
名前
名前
Fortran 90 では、名前は、変数、手続き、構造型、名前付き定数、および COMMON ブロックな
どの言語要素を表します。名前は英字で始まり、その後は英字、数字、および下線 (_) を任意に
組み合わせて使用できます。HP Fortran の拡張機能として、名前にドル記号を使用できますが、
先頭文字には使用できません。
Fortran 90 規格では、名前の最大長は 31 文字です。HP Fortran では、この制限が 255 文字まで拡
張され、255 文字すべてが意味を持ちます。つまり、2 つの名前は、255 番目の文字が 1 つ異な
るだけで区別されます。ただし、名前とキーワードの場合は、大文字と小文字が区別されませ
ん。たとえば、Title$23_Name と TITLE$23_NAME は同じ名前です。
CASE, IF, および DO 構文には、必要に応じて名前を与えることができます。構文名は、構文の最
初の文の前に表示され、その後にコロン (:) が付きます。それと同じ名前を、構文の最後の文の
終わりに指定する必要があります。これらの構文についての詳細は、134 ページの「制御構文お
よびブロック」の項を参照してください。
40
第2章
言語要素
プログラム構造
プログラム構造
Fortran の完全実行可能プログラムは、主プログラム単位 1 つと、次のようにその他の 1 つ以上の
プログラム単位から構成できます。
•
外部関数副プログラム単位
•
外部サブルーチン副プログラム単位
•
初期値設定プログラム単位
•
モジュールプログラム単位
各プログラム単位は、個別にコンパイルできます。プログラムの実行は、主プログラムから始ま
ります。制御は、他のプログラム単位に渡されることがあります。
Fortran 90 プログラム単位と、プログラム単位間での制御の移行については、151 ページの第 7 章
「プログラム単位および手続き」を参照してください。
第2章
41
言語要素
文番号
文番号
Fortran 90 文の先頭には、1 ~ 5 桁の数字からなる文番号を付けることができます。同じ有効域内
のすべての文番号は一意でなければならず、先頭のゼロは識別されません。ほとんどの文に文番
号を付けることができますが、すべての文が飛び先になるというわけではありません。
FORMAT 文には、文番号を付けなければなりません。INCLUDE 行は、文ではなくコンパイラ指令
であり、文番号を付けることはできません。
42
第2章
言語要素
文
文
265 ページの第 10 章 「HP Fortran 文」では、すべての HP Fortran 文をアルファベット順で説明し
ています。
表 2-2 は、Fortran 90 規格によるプログラム単位中の文に必須の順序を示しています。縦線は混
在可能な文を区切るときに使用し、横線は混在させることができない文を区切るときに使用しま
す。たとえば、DATA 文は複数の実行文の間に挿入できますが、CONTAIN 文と混在させることは
できません。また、USE 文を使用する場合は、プログラム単位の見出しの直後に配置する必要が
あります。
表 2-2 プログラム単位中の文の順序
PROGRAM, FUNCTION, SUBROUTINE, MODULE, または BLOCK DATA 文
USE 文
FORMAT およ
び ENTRY 文
IMPLICIT NONE 文
PARAMETER 文
IMPLICIT 文
PARAMETER 文および DATA
文
構造型の定義、引用仕様宣
言、型宣言、文関数、およ
び単純宣言文
DATA 文
実行構文
CONTAINS 文
内部副プログラムまたはモジュール副プログラム
END 文
表 2-2 には、注釈、INCLUDE 行、および指令を挿入できる位置は示されていません。注釈は、
END 文の後など、ソースファイル中のどこにでも挿入できます。INCLUDE 行は、END PROGRAM 文
の前であればどこにでも挿入できます。
第2章
43
言語要素
文
表 2-3 は、有効域内で使用できる文を示しています。○印は、指定した有効域内で文を使用でき
ることを示します。この表の目的上、型宣言には、PARAMETER 文、IMPLICIT 文、型宣言文、構
造型定義、および単純宣言文が含まれます。
初期値設定プログラム単位
○ ○ ○ ○ ○
内部手続き
DATA
モジュール手続き
○ ○ ○ ○
モジュール
CONTAINS
外部手続き
有効域
主プログラム
文
引用仕様本体
表 2-3 有効域内で使用できる文
○
ENTRY
○
実行文
○ ○
○ ○
FORMAT
○ ○
○ ○
引用仕様宣言
○ ○ ○ ○ ○ ○
文関数
○ ○
型宣言
○ ○ ○ ○ ○ ○ ○
USE
○ ○ ○ ○ ○ ○ ○
44
○
○ ○
第2章
言語要素
プログラムファイルのプログラム形式
プログラムファイルのプログラム形式
HP Fortran コンパイラでは、固定形式 (FORTRAN 77 プログラムの標準ソース形式 ) または自由形
式のソースファイルを使用できます。以降の項では、両方の形式について説明します。
コンパイラでは、名前が拡張子 .f90 で終わるソースファイルは自由形式と見なされ、名前が拡
張子 .f または .F で終わるソースファイルは固定形式と見なされます。これらの想定は、
+source=free または +source=free オプションを指定してコンパイルすれば無効にできます。
詳細は、
『HP Fortran リファレンス ガイド』を参照してください。
この 2 つの形式はまったく異なりますが、コンパイラで両方の形式を使用できるように Fortran
90 のソースファイルをフォーマットできます。たとえば、INCLUDE 行によって形式が不明な
ファイルに挿入されるコードを含むソースファイルを準備する場合に、この作業が必要になりま
す。自由形式でも固定形式でも受け入れ可能になるようにソースファイルをフォーマットするに
は、次の規則を使用します。
•
1 ~ 5 桁目に文番号を挿入します。
•
7 ~ 72 桁目に文の本体を配置します。
•
注釈は、先頭に感嘆符を付けて 6 桁目以外の任意の桁から始めます。
•
すべての継続行は、継続する行の 73 桁目と次行の 6 桁目にアンパサンド (&) を使用して指定し
ます。
•
構文素中には空白を挿入しないでください。
•
隣接する名前とキーワードは空白で区切ります。
自由形式
自由形式の場合、ソース行は固定形式と違って、事前に定義された幅のフィールドには分割され
ません。このため、対話型の端末でテキストの入力が容易になります。
ソース行
自由形式の行の長さは、0 ~ 132 文字です。+extend_source オプションを使用すると、行が
254 桁目まで拡張されます。この機能拡張については、
『HP Fortran プログラマーガイド』を参照
してください。1 行のソース行に、複数の文をセミコロンで区切って指定できます。47 ページの
「文の継続」で後述するように、単一の Fortran 90 文を複数のソース行に拡張できます。
複数の文を同じ行に書くには、セミコロン (;) で区切ります。
第2章
45
言語要素
プログラムファイルのプログラム形式
文番号
文番号は、1 ~ 5 桁目以外でも指定できますが、最低 1 個の空白で文と区切らなければなりませ
ん。
空白
空白は、次のような意味を持ちます。
•
名前や演算子などの構文素には挿入できません。
•
一般に、隣接する文のキーワード、名前、定数、または文番号を区切るために、1 個以上の
空白が必要です。ただし、表 2-4 に示すキーワードの間では、空白は省略可能です。END の
後に使用可能なキーワードは、BLOCK DATA, DO, FILE, FUNCTION, IF, INTERFACE, MAP,
MODULE, PROGRAM, SELECT, SUBROUTINE, STRUCTURE, TYPE, UNION, または WHERE です。
表 2-4 空白を省略可能なキーワード
BLOCK DATA
GO TO
DOUBLE PRECISION
IN OUT
ELSE IF
SELECT CASE
END keyword
•
英字の先頭と最後は、名前の一部ではあり得ない特殊記号になっているので、名前と演算子
を空白で区切る必要はありません。文字文脈中を除き、複数の空白は空白 1 個と同じです。
次の文中の空白について説明します (b は空白を示します )。
IFbb(TEXT.EQ.'bbbYES') ...
! Valid
IF の後の 2 個の空白は許され、1 個の空白と等価です。.EQ. は曖昧な語ではないので、前後の
空白は必要ありません。ただし、文字定数中の 3 個の空白には意味があります。
次に例を示します。
IF(MbARY.bGE.MIKE) ...
! Faulty in free source form
この場合、空白は自由形式では不正ですが、固定形式では許されます。
46
第2章
言語要素
プログラムファイルのプログラム形式
注釈
感嘆符 (!) は、文字文脈中に指定される場合を除き、自由形式では注釈の開始を示します。コン
パイラは、感嘆符から後の部分は注釈として処理します。したがって、同じソース行の中でプロ
グラムテキストに注釈を埋め込むことはできませんが、プログラムテキストに続けて記述するこ
とはできます。後に注釈がある 1 行に書かれた文は、後続行に継続することができます。
文の継続
文は、最終行を除く各ソース行にアンパサンド (&) を追加することによって、複数のソース行に
分割できます。アンパサンドは、文字定数中では使用できません。
文は、最大 40 ソース行に記述できます。HP Fortran では、拡張機能によって、この制限を 100
ソース行まで増やしています。END 文は、継続行を使用して分割することはできません。注釈は
文ではないので、次行に継続できません。
継続行内のソース文のテキストは、1 桁目から始まるものと見なされます。ただし、その行の最
初の空白以外の記号がアンパサンドの場合、テキストはアンパサンドの後の最初の桁から始まり
ます。
次の 2 つの文について説明します。
INTEGER
marks, total, difference,&
mean, average
! work variables
INTEGER
marks, total, difference, mean_&
&value, average
! work variables
第 2 の文では、整変数 mean_value を宣言しています。継続の結果として変数名に含まれる空白
は、不正になります。このため、継続行にはアンパサンドが使用されています ( また、value を
1 桁目に置くことも可能です )。アンパサンドを使用して構文素と文字定数を複数のソース行に
分割することも許されますが、推奨しません。
固定形式
文またはその一部は、7 ~ 72 桁目に書く必要があります。72 桁目以降のテキストは無視されま
す。+[no]extend_source オプションを使用すると、文が 254 桁目まで拡張されます。1 ~ 6 桁
目は、特殊な用途に使用するために予約されています。
注記
コンパイラが 72 桁目以降の文字を無視することに依存しているプログラムは、
+extend_source オプションを指定すると正しくコンパイルされません。
複数の文を、セミコロン (;) で区切って同一行に書くことができます。
第2章
47
言語要素
プログラムファイルのプログラム形式
空白
空白は、文字文脈中を除き意味を持ちません。たとえば、次の 2 つの文の場合、
RETURN
R E T U R N
は等価ですが、
c = "abc"
c = "a b c"
は等価ではありません。
ソース行
固定形式には、次の 3 種類の行があります。
•
開始行
•
継続行
•
注釈行
以降の項では、この 3 種類のソース行についてそれぞれ説明します。
開始行 開始行の形式は、次のとおりです。
•
1 ~ 5 桁目には、文番号を入れることができます。
•
6 桁目には、空白または数字のゼロを入れます。
•
7 ~ 72 桁目 ( オプションにより 254 桁目まで ) には、文を入れます。
継続行 継続行の形式は、次のとおりです。
•
1 ~ 5 桁目は空白です。
•
6 桁目には、ゼロまたは空白以外の文字を入れます。慣例では、継続行には 1 から始まる連番
を付けることになっています。
•
7 ~ 72 桁目 ( オプションにより 254 桁目まで ) には、文の続きを入れます。
規格には、文の継続行は 19 行以内でなければならないと明記されています。規格の拡張により、
HP Fortran では最大 99 の継続行を書くことができます。
注釈行
プログラムに注釈行を含めることができます。注釈行は、コンパイルにはまったく影響せず、通
常は説明を書き込むために使用します。行の 1 桁目の英字 C、英字 c, またはアスタリスク (*)
48
第2章
言語要素
プログラムファイルのプログラム形式
は、その行が注釈行であることを示し、注釈テキストを 1 ~ 72 桁目に記述できます。コンパイ
ラは、1 ~ 72 桁目で空白文字しか含まれていない行も注釈行として処理します。また、1 桁目
や、6 桁目以外の桁に感嘆符 (!) が含まれている行も、注釈行と見なします。
注釈に対する HP 拡張機能は、次のとおりです。
•
1 桁目に D または d がある行は、デフォルトで注釈として処理されます。+dlines オプション
を指定すると、これらの行はコンパイル対象の文として処理されます。この注釈の拡張機能
はデバッグ行と呼ばれ、デバッグ段階でコンパイルされる PRINT 文を取り込んでプログラム
の状態を表示するときに役立ちます。
•
1 桁目にハッシュ文字 (#) がある行は、注釈として処理されます。この拡張機能によって、C
プリプロセッサ (cpp) で前処理済みのソースファイルをコンパイルできます。
•
HP Fortran では、タブを編集できます。つまり、タブ文字を行の 1 桁目に入力して、文番号の
桁を飛び越すことができます。タブ文字に続く文字が数字であれば、その数字は 6 桁目の継
続指示桁にあるものと見なされます。タブ文字に続く他の文字は、すべて 7 桁目、つまり新
しい文の先頭と見なされます。行の他の桁にあるタブ文字は、空白として処理されます。
第2章
49
言語要素
INCLUDE 行
INCLUDE 行
INCLUDE 行は、Fortran 90 文ではなくコンパイラに対する指令です。この行があると、コンパイ
ル前にプログラムにテキストが挿入されます。挿入されたテキストによって INCLUDE 行が置き
換えられ、コンパイル可能なソーステキストの一部になります。INCLUDE 行の形式は、次のとお
りです。
INCLUDE char-literal-const
ここで char-literal-const は、取り込むテキストを含むファイルの名前です。文字定数表現
には、名前付き定数である種別パラメータを使用できません。
char-literal-const でファイル名のみを指定すると ( つまり、パス名を指定しなければ )、コ
ンパイラはユーザーが指定したパスを検索します。-Idir オプションを使用すると、コンパイラ
に対して取り込むファイルの検索先を指定できます。
INCLUDE 行は、後続の注釈を除くテキストを付けずに、1 行に指定する必要があります。文番号
は使用できません。つまり、たとえば、分岐などはできず、IF 文の一部である単純実行文にす
ることはできません。また、区切り記号としてセミコロンを使用して、同じ行に第 2 の INCLUDE
や他の Fortran 90 文を入れることは許されません。アンパサンドを使用して INCLUDE 行を継続す
ることもできません。
取り込まれるファイルのテキストは、完全な Fortran 90 文で構成する必要があります。
INCLUDE 行は、入れ子にすることもできます。つまり、取り込まれるテキスト内に第 2 の
INCLUDE 行を挿入し、それを含むテキストにも INCLUDE 行を挿入できます。HP Fortran の場合、
INCLUDE 行の最大入れ子レベルは 10 です。ただし、どのレベルでも、テキストを再帰的に取り
込むことはできません。たとえば、テキスト B にテキスト A が含まれている場合、取り込まれ
るテキスト A にテキスト B を取り込むことはできません。
次の例は、INCLUDE 行を示しています。
INCLUDE ”MY_COMMON_BLOCKS”
INCLUDE ”/usr/include/machine_parameters.h”
次の例では、プログラムの実行可能部で INCLUDE 行を使用して、直前の READ 文からの入力値を
使用するコードを指定しています。
READ *, theta
INCLUDE ”FUNCTION_CALCULATION”
50
第2章
3 配列
本章では、配列と HP Fortran の配列処理機能について説明します。本章で説明する項目は、次
のとおりです。
•
配列の基礎
•
配列宣言
•
配列値を持つ構造体成分の引用
•
配列構成子
•
配列式
•
配列値をとる関数
•
配列問い合わせ組み込み関数
第3章
51
配列
配列の基礎
配列の基礎
配列は要素の集合であり、各要素は配列に対して宣言されたのと同じ型および型パラメータを持
つスカラです。要素は次元単位で編成されています。Fortran 90 では、最大 7 次元までの配列
を使用できます。配列内の次元の数によって、その次元数が決定されます。
次元には、上限と下限があります。次元の中の要素の総数、つまり寸法の計算式は、次のとおり
です。
upper-bound - lower-bound + 1
配列の大きさは、その寸法の積です。次元の寸法が 0 であれば、その配列は要素が含まれていな
い大きさ 0 の配列です。
配列中の要素は、次元ごとに 1 つずつの添え字によって引用されます。添え字は、かっこで囲ま
れた宣言式です。HP Fortran では、拡張機能として実数型の添え字式を使用でき、この式は評
価後に整数型に変換されます。
配列の形状は、その次元数と、配列の各次元の寸法によって決定されます。配列の形状は、各要
素が対応する次元の寸法であるベクトルとして表すことができます。たとえば、次の宣言につい
て説明します。
REAL, DIMENSION(10,2,5) :: x
x の形状は、ベクトル [10, 2, 5] で表すことができます。
2 つの配列は、両方の形状が同じであれば形状適合ですが、対応する次元の下限と上限は同じで
なくてもかまいません。スカラは、配列と形状適合です。
全体配列は、次の文のように、名前のみで引用される配列です。
REAL, DIMENSION(10) :: x, y, z
PRINT *, x
x = y + z
HP Fortran で配列の保存に使用される配列要素順序は、列順です。つまり、最初の次元の添え
字の変化が最も急激で、最後の次元の添え字の変化が最も低速です。たとえば、次の宣言につい
て説明します。
INTEGER, DIMENSION(3,2) :: a
各要素の順序は次のようになります。
a(1,1)
a(2,1)
a(3,1)
52
第3章
配列
配列の基礎
a(1,2)
a(2,2)
a(3,2)
次の配列宣言は、本項で説明する概念の一部を示しています。
! The rank of a1 is 1 as it only has one dimension, the extent of
! the single dimension is 10, and the size of a1 is also 10.
! a1 has a shape represented by the vector [10].
REAL, DIMENSION(10) : a1
! a2 is declared with two dimensions and consequently has a rank
! of 2, the extents of the dimensions are 2 and 4
! respectively,and the size of a2 is 8.
! The array’s shape can be represented by the vector [2, 4].
INTEGER, DIMENSION(2,4) :: a2
! a3 has a rank of 3, the extent of the first two dimensions is
! 5,and the extent of the third dimension is zero. The size of
! a3 is the product of all the extents and is therefore zero.
! The shape of a3 can be represented by the vector [5, 5, 0].
LOGICAL, DIMENSION(5,5,0) :: a3
! a and b are conformable, c and d are conformable. The shape of
! a and b can be represented by the vector [3, 4]. The shape of
! c and d can be represented by the vector [6, 8].
REAL, DIMENSION :: a(3,4), b(3,4), c(6,8), d(-2:3,10:17)
第3章
53
配列
配列宣言
配列宣言
配列は、DIMENSION 属性を持つデータオブジェクトです。その次元数、および寸法も、配列
仕様によって定義されます。配列仕様はかっこで囲まれ、次のように DIMENSION 属性に結びつ
けることができます。
INTEGER, DIMENSION(17) :: a, b
または、次のように配列名に結びつけることもできます。
REAL :: y(3,25)
配列仕様が同じ宣言文中の DIMENSION 属性と配列名に結びつけられている場合、名前に結びつ
けられている仕様が優先されます。次に例を示します。
INTEGER, DIMENSION(4,7) :: a, b, c(15)
a と b は 2 次元配列として宣言されていますが、c は 1 次元配列として宣言されています。
配列仕様では、配列を次のいずれかとして宣言できます。
•
形状明示配列
•
形状引き継ぎ配列
•
形状無指定配列
•
大きさ引き継ぎ配列
以降の項では、これらの型と、各型の配列仕様の形式について説明します。配列構成子を使用し
て配列を初期化する方法については、70 ページの「配列構成子」の項を参照してください。
形状明示配列
形状明示配列の場合、次元ごとに上下限が明示的に宣言されています。つまり、上下限が配列の
実引き数から取り込まれたり (「引き継ぎ」) 使用前に指定される (「形状無指定」) ことはあり
ません。形状明示配列の各次元の形式は、次のとおりです。
[lower-bound :] upper-bound
ここで lower-bound と upper-bound は、宣言式であり、正の値、負の値、または 0 を指定で
きます。lower-bound のデフォルトは 1 です。
54
第3章
配列
配列宣言
特定の次元の lower-bound と upper-bound の値によって、その次元の配列の範囲を定義しま
す。通常、lower-bound には、upper-bound より小さい値を指定します。lower-bound が
upper-bound と同じであれば、その次元には要素が 1 つしか含まれていません。lower-bound
が upper-bound より大きければ、その次元には要素が含まれておらず、次元の寸法は 0 であ
り、配列は大きさ 0 となります。
最も単純な形式の配列宣言では、次のように配列名は仮引き数でなく、すべての上下限は定数式
です。
INTEGER :: a(100,4,5)
この形式の配列は SAVE 属性を持ち、任意のプログラム単位で宣言できます。
その他に、次のような形式の形状明示配列があります。
•
自動割り付け配列 : 副プログラムで宣言されるが、仮引き数ではなく、最低 1 つは定数でない
上下限を持つ配列。自動割り付け配列は、サブルーチンや関数内で宣言できますが、SAVE
属性を与えることや初期化することはできません。
文字列を自動割り付けデータオブジェクトとして宣言することもできます。115 ページの
「自動割り付けデータオブジェクトとしての文字列」および 295 ページの「CHARACTER」
の項を参照してください。
•
仮配列 : 仮引き数の並びに含まれることによって識別され、その上下限として定数または式
を使用できる配列。仮配列は、サブルーチンまたは関数でしか宣言できません。
•
整合配列 : 特定の形式の仮配列。仮配列名は、仮引き数の並びで指定し、その上下限の少な
くとも 1 つが非定数の宣言式です。
形状明示配列は、74 ページの「配列値をとる関数」の項と 169 ページの「配列仮引き数」の項
で説明するように、関数の結果として使用することもできます。
次のコードセグメントは、さまざまな形式の形状明示配列を示しています。
SUBROUTINE sort(list1,list2,m,n)
!
examples of arrays with explicit shape
INTEGER :: m,n
INTEGER :: cnt1(2:99)
! a rank-one array, having an explicit shape represented by
! the vector [98]
REAL :: list1(100), list2(0:m-1,-m:n)
! two dummy arrays with explicit shape: list1 is a rank-one
! array with an extent of 100; list2 is a rank-two array with an
! extent of m * (m+n+1). list2 is also an adjustable array.
REAL :: work(100,n)
第3章
55
配列
配列宣言
! work is an automatic array; it does not appear in the dummy
! argument list and at least one of its bounds is not constant
INTEGER, PARAMETER :: buffsize = 0
REAL :: buffer (1: buffsize)
! buffer has explicit shape, but no elements and is zero-sized
.
.
.
END SUBROUTINE sort
形状引き継ぎ配列
形状引き継ぎ配列は、対応する実引き数の形状を引き継ぐ仮引き数です。POINTER 属性を与えて
はいけません。形状引き継ぎ配列の各次元の形式は、次のとおりです。
[lower-bound] :
ここで lower-bound は、宣言式です。lower-bound のデフォルトは 1 です。
実引き数とそれに対応する仮引き数では、次元ごとに異なる上下限を指定できます。形状引き継
ぎ配列の添え字は、指定した lower-bound から、lower-bound に実引き数のその次元の寸法を
加え、そこから 1 を差し引いた上限値まで拡張できます。
次のコードセグメントは、形状引き継ぎ配列のさまざまな宣言を示しています。
SUBROUTINE initialize (a,b,c,n)
! examples of assumed-shape arrays
INTEGER :: n
INTEGER :: a(:)
! the array a is a rank-one assumed-shape array, it takes its
! shape and size from the corresponding actual argument; its
! lower bound is 1 regardless of the lower bound defined for
! the actual argument
COMPLEX :: b(ABS(n):)
! a rank-one assumed-shape array, the lower bound is ABS(n) and
! the upper bound will be the lower bound plus the extent of
! the corresponding actual argument minus one
REAL, DIMENSION(:,:,:,:,:) :: c
! an assumed-shape array with 5 dimensions; the lower bound for
! each dimension is 1
56
第3章
配列
配列宣言
.
.
.
END SUBROUTINE initialize
手続きの引き数が形状引き継ぎ配列であれば、その引用仕様は呼び出し側のプログラム単位で明
示的に指定する必要があります。手続きの引用仕様が明示的になるのは、それが呼び出し側手続
きの内部手続きである場合、または、引用仕様が呼び出し側の引用仕様宣言で宣言されている場
合です。
たとえば、前述の例で外部サブルーチン initialize を呼び出すには、次のように、その引用仕
様を引用仕様宣言内で指定する必要があります。
PROGRAM main
INTEGER :: parts(0:100)
COMPLEX :: coeffs(100)
REAL
:: omega(-2:+3, -1:+3, 0:3, 1:3, 2:3)
INTERFACE
SUBROUTINE initialize (a,b,c,n)
INTEGER :: n
INTEGER :: a(:)
COMPLEX :: b(ABS(n):)
REAL, DIMENSION(:,:,:,:,:) :: c
END SUBROUTINE initialize
END INTERFACE
CALL initialize(parts,coeffs,omega,lbound(omega,1))
.
.
.
END PROGRAM main
SUBROUTINE initialize (a,b,c,n)
INTEGER :: n
INTEGER :: a(:)
COMPLEX :: b(ABS(n):)
REAL, DIMENSION(:,:,:,:,:) :: c
.
.
.
END SUBROUTINE initialize
詳細情報の参照先は、次のとおりです。
•
内部手続きについては、164 ページの「内部手続き」の項を参照してください。
第3章
57
配列
配列宣言
•
引用仕様宣言については、178 ページの「手続き引用仕様」の項を参照してください。
•
仮引き数として使用される配列については、169 ページの「配列仮引き数」の項を参照して
ください。
形状無指定配列
形状無指定配列は、POINTER 属性または ALLOCATABLE 属性を持っています。その形状は、配列
にポインターが代入されるか、または割り付けられるまで、指定されません。形状無指定配列に
は形状引き継ぎ配列と同じ形式を使用できますが、両者は同じものではありません。形状引き継
ぎ配列は仮引き数であり、POINTER 属性を指定することはできません。
形状無指定配列の配列仕様の形式は、次のとおりです。
: [ , : ] ...
形状無指定配列の仕様では、上下限ではなく次元数を定義します。上下限は、配列の割り付け
時、または配列ポインターが指示先に結合されるときに定義されます。
配列ポインターと割り付け配列については、以降の項で後述します。
配列ポインター
配列ポインターは、POINTER 属性を持つ形状無指定配列です。その上下限と形状は、配列がポイ
ンター代入文または ALLOCATE 文で指示先に結合している場合にのみ定義されます。配列ポイン
ターは、結合されるまで引用できません。
次の例は、配列ポインターの宣言を示しています。
! p1 is declared as a pointer to a rank-one
! array of type real; p1 is not associated with any target
REAL, POINTER, DIMENSION(:) :: p1
! p2 is a pointer to an integer array of rank-two;
! it must be associated with a target before it can be referenced
INTEGER, POINTER :: p2(:,:)
! err is a pointer to a rank-3 array of type err_type
TYPE err_type
INTEGER :: class
REAL :: code
END TYPE err_type
TYPE(err_type), POINTER, DIMENSION(:,:,:) :: err
58
第3章
配列
配列宣言
! The next statement is ILLEGAL:
! explicit shape.
INTEGER, POINTER :: p3(n)
pointers cannot have an
配列ポインターを指示先に結合する方法については、125 ページの「ポインター」の項を参照し
てください。POINTER 属性と ALLOCATE 文については、265 ページの第 10 章 「HP Fortran 文」
を参照してください。
割り付け配列
割り付け配列は、ALLOCATABLE 属性を持つ形状無指定配列です。その上下限と形状は、
ALLOCATE 文による割り付け時に定義されます。割り付け後の割り付け配列は、他の配列を含む
任意の文脈で使用できます。また、割り付け配列は、DEALLOCATE 文を使用して解放することも
できます。
割り付け配列の割り付け状態は、ALLOCATED 組み込み問い合わせ関数を使用してテストできま
す。その状態が割り付け解除になるのは、配列が最初に宣言される時点と、DEALLOCATE 文を使
用して解放された後です。ALLOCATE 文を実行すると、割り付け状態になります。割り付け解除
状態の割り付け配列は、ALLOCATED 組み込み関数の引き数として使用する場合や、ALLOCATE 文
で使用する場合を除き、引用できません。割り付け状態になっている場合、ALLOCATE 文では引
用できません。すでに割り付けられている割り付け配列を割り付けたり、割り付け前や解放後に
解放すると、エラーとなります。
HP Fortran では、割り付け解除状態になっている割り付け配列は、手続きに対して局所的であ
り、SAVE 属性を持ちません。手続きの終了時には自動的に解放されます。
次の例 alloc_array.f90 では、割り付け配列の割り付けおよび解放を実行するサブルーチンを呼
び出し、ALLOCATED 組み込み関数を使用して割り付け状態をテストしています。
例 3-1
alloc_array.f90
PROGRAM main
! driver program for calling a subroutine that allocates and
! deallocates an allocatable array
CALL test_alloc_array
END PROGRAM main
SUBROUTINE test_alloc_array
! demonstrate how to allocate and deallocate an allocatable array
! the array matrix is rank-2 allocatable array, with no
! shape or storage
REAL, ALLOCATABLE, DIMENSION(:,:) :: matrix
第3章
59
配列
配列宣言
INTEGER :: n
LOGICAL :: sts
! sts is assigned the value .FALSE. as the array is not yet
! allocated
sts = ALLOCATED(matrix)
PRINT *, 'Initial status of matrix: ', sts
PRINT *, 'Enter an integer (rank of array to be allocated):'
READ *,n
! dynamically create the array matrix; after allocation, array
! will have the shape [ n, n ]
ALLOCATE(matrix(n,n))
! test allocation by assigning to array
matrix(n,n) = 9.1
PRINT *, 'matrix(',n,',',n,') = ', matrix(n,n)
! sts is assigned the value .TRUE. as the allocatable array
! does exist and its allocation status is therefore allocated
sts = ALLOCATED(matrix)
PRINT *, 'Status of matrix after ALLOCATE: ', sts
DEALLOCATE (matrix)
! sts is assigned the value .FALSE. as the
! allocation status of a deallocated array
sts = ALLOCATED (matrix)
PRINT *, 'Status of matrix after DEALLOCATE:
END SUBROUTINE test_alloc_array
', sts
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 alloc_array.f90
$ a.out
Initial status of matrix:
F
Enter an integer (rank of array to be allocated):
4
matrix( 4 , 4 ) = 9.1
Status of matrix after ALLOCATE:
T
Status of matrix after DEALLOCATE:
F
60
第3章
配列
配列宣言
ALLOCATABLE, ALLOCATE, DEALLOCATE 文についての詳細は、265 ページの第 10 章 「HP
Fortran 文」を参照してください。また、528 ページの「ALLOCATED(ARRAY)」の項も参照
してください。
大きさ引き継ぎ配列
大きさ引き継ぎ配列は、結合している実引き数から大きさが引き継がれる仮引き数です。その宣
言では、最後の次元を除き、各次元の次元数と寸法を指定します。最後の次元の寸法は、次のよ
うにアスタリスク (*) で表されます。
INTEGER :: a(2,5,*)
すべての仮配列引き数とそれに対応する実引き数は、同じ初期要素を共有し、記憶列結合されて
います。形状明示配列と大きさ引き継ぎ配列の場合、実配列と仮配列の形状や次元数は同じでな
くてもかまいません。ただし、仮配列の大きさが実引き数の大きさを超えてはいけません。した
がって、大きさ引き継ぎ配列の最後の次元の添え字は、下限から引用が実引き数に結合している
記憶領域を超えない値まで拡張できます。
大きさ引き継ぎ配列の最後の次元には上限がないため、次元には寸法もなく、結果的に配列は形
状を持ちません。したがって、大きさ引き継ぎ配列の名前は、関数結果や全体配列の引用など、
形状が必要な文脈には使用できません。
次の例 assumed_size.f90 は、x (subr 内で宣言 ) および i_array (func で宣言 ) という 2 つの大
きさ引き継ぎ配列を示しています。
例 3-2
assumed_size.f90
PROGRAM main
REAL :: a(2,3)
! an explicit-shape array, represented by the
!
vector [10, 10]
k = 0
DO i = 1, 3
DO j = 1, 2
k = k + 1
a(j, i) = k
END DO
END DO
PRINT *, 'main: a =', a
CALL subr (a)
END PROGRAM main
SUBROUTINE subr(x)
REAL :: x(2,*) ! an assumed-size array; the subscript for the
第3章
61
配列
配列宣言
!
! PRINT *, x
last dimension may take any value 1 - 3
! ILLEGAL, whole array reference not allowed
PRINT *, ‘main: x(2, 2) = ‘, x(2, 2)
PRINT *, 'returned by func: ', func(x), ', the value in x(2,3)'
END SUBROUTINE subr
REAL FUNCTION func(y)
REAL :: y(0:*) ! an assumed-size array; the subscript may
!
take any value 0 - 5
func = y(5)
END FUNCTION func
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 assumed_size.f90
$ a.out
main: a = 1.0 2.0 3.0 4.0 5.0 6.0
main: x(2, 2) = 4.0
returned by func: 6.0 , the value in x(2,3)
大きさ引き継ぎ配列は、FORTRAN 77 の機能ですが、形状引き継ぎ配列に置き換えられていま
す。56 ページの「形状引き継ぎ配列」の項を参照してください。
62
第3章
配列
部分配列
部分配列
部分配列は、他の配列 ( 親 ) の選択された部分で、要素が 1 つしか含まれていない場合や、まっ
たく含まれていない場合にも、それ自体が配列です。部分配列は、配列名を使用できる個所であ
ればどこででも使用できます。
部分配列を指定する構文は、次のとおりです。
array-name (section-subscript-list)[ (substring-range) ]
section-subscript-list
section-subscript をコンマで区切った並びです。
section-subscript
次のいずれかです。
•
subscript
•
subscript-triplet
•
vector-subscript
subscript
スカラ整数式です。
subscript-triplet
形式は次のとおりです。
[subscript]:[subscript][:stride]
ここで stride は、スカラ整数式です。
vector-subscript
1 次元の整数配列式です。
substring-range
114 ページの「文字部分列」の項で説明したように、文字部分列を指定しま
す。substring-range を指定した場合は、文字型の array-name を指定する
必要があります。
第3章
63
配列
部分配列
Section-subscript-list では、親配列の各次元の section-subscript を指定する必要があ
ります。部分配列の次元数は、section-subscript-list に表示される subscript-triplets
と vector-subscripts の数です。部分配列も配列なので、少なくとも 1 つは
subscript-triplet または vector-subscript を指定する必要があります。
以降の項では、subscript-triplet と vector-subscript について詳細を説明します。
添え字三つ組
添え字三つ組では、親配列から他の配列となる要素が選択されます。親配列の任意の次元の下
限、上限、および刻み幅が指定されます。各要素は、次元から通常の方法で選択されます。たと
えば、刻み幅では、要素を 2 つおきに選択できます。
添え字三つ組の 3 つの成分は、いずれも省略可能です。上限または下限を省略すると、親配列か
ら引き継がれます。ただし、大きさ引き継ぎ配列の最後の次元に添え字三つ組を使用する場合
は、上限を指定する必要があります。
選択される要素がすべて宣言された上下限の範囲内に含まれる場合、添え字三つ組内の上下限は
親配列のその次元に対して宣言された上下限の範囲内でなくてもかまいません。刻み幅を省略す
ると、デフォルトの増分は 1 となります。
刻み幅として 0 を指定することはできません。正の値であれば、添え字の範囲は刻み幅の間隔で
下限から上限までとなります。上限と下限の差が刻み幅の倍数でない場合、添え字三つ組によっ
て選択される最後の添え字の値は、上限以下で最大の整数値となります。配列式 a(1: 9: 3) で
は、a から添え字 1, 4, および 7 が選択されます。
刻み幅には負の値を指定することもできます。刻み幅が負の場合は、刻み幅の単位で、親配列の
下限から開始して上限より大きい最後の値までさかのぼることによって、親配列から要素を選択
します。たとえば、式 a(9:1:- 3) では、a から添え字 9, 6, および 3 が順番に選択されます。
部分配列の上下限が、その次元の要素を選択しないような値である場合 ( たとえば、部分配列
a(2:1))、その部分配列は大きさゼロの配列となります。
次の例は、配列要素の通常パターンに同じ値を代入する添え字三つ組の記述法を示しています。
INTEGER, DIMENSION(3,6) :: x,y,z
! declare 3 3x6 arrays
! initialize the arrays, using whole-array assignments.
x = 0; y = 0; z = 0
! assign to
x(3,2:4:1)
y(2,2:6:2)
z(1:2,3:6)
64
elements of x, y, and z, using subscript triplets
= 1
= 2
= 3
第3章
配列
部分配列
! The arrays
!
x
! 0 0 0 0 0
! 0 0 0 0 0
! 0 1 1 1 0
x, y, and z now
y
0
0 0 0 0 0
0
0 2 0 2 0
0
0 0 0 0 0
have the following values:
z
0
0 0 3 3 3 3
2
0 0 3 3 3 3
0
0 0 0 0 0 0
次に示す配列部分列の例で、変数 dates(5:10) は親配列 dates の要素 5 ~ 10 を含む部分配列
で、変数 dates(5:10)(8:11) も配列 dates の部分配列ですが、要素 5 ~ 10 の最後の 4 つの文
字位置のみが含まれています。
CHARACTER(11) :: dates(20)
dates(5:10)(8:11) = ”1776”
ベクトル添え字
ベクトル添え字は、整数値を持つ 1 次元配列となる任意の式です。この配列の値によって、特定
の次元の親配列から対応する要素が選択されます。ベクトル添え字では変則パターンを指定でき
るため、間接配列のアドレス指定に役立ちます。たとえば、v が値 4, 3, 1, 7 で初期化される 1 次
元の整数配列を表す場合、部分配列 a(v) は配列要素 a(4), a(3), a(1), および a(7) によって、
この順番で構成される 1 次元配列です。
通常、ベクトル添え字を指定するには、次の項で説明するように配列構成子を使用します。たと
えば、式 a(v) および a((/ 4, 3, 1, 7/)) では、配列 a の同じ部分が引用されます。
ベクトル添え字は、次のような場合は使用できません。
•
ポインター代入文の右辺
•
内部ファイルとしての入出力文
•
INTENT(OUT) または INTENT(INOUT) で宣言されているか、INTENT で宣言されていない仮引
き数に結合されている実引き数の場合
ベクトル添え字では、同じ要素を複数回指定できます。この形式のベクトル添え字で指定されて
いる部分配列を、重複部分配列と呼びます。次の例は、重複部分配列を示しています。
a( (/ 4, 3, 4, 7/) )
ここで要素 4 は、2 度選択されています。重複部分配列は、入力項目並びや、代入文の左辺には
使用できません。
次の例 vector_sub.f90 は、部分配列添え字並びを使用する部分配列を示しています。
第3章
65
配列
部分配列
例 3-3
vector_sub.f90
PROGRAM main
! m is a rank-1 array that has been
! initialized with the values of an array constructor
INTEGER, DIMENSION(4) :: m = (/ 2, 3, 8, 1/)
INTEGER :: i
! initialize a (a rank-1 array) with the values
! 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 11.0
REAL, DIMENSION(10) :: a = (/ (i*1.1, i=1,10) /)
! b is an uninitialized 4x2 array
REAL, DIMENSION(4,2) :: b
! print a section of a, using a vector subscipt
PRINT *,a(m)
! assign the values 5.5, 11.0, 6.6, and 5.5 to the first column
! b; this is an example of a many-one array
b(:,1) = a( (/ 5, 10, 6, 5/) )
! the vector subscript MIN(m,4) represents a rank-1 array with
! the values 2, 3, 4, 1; the second column of b is assigned
! the values 11.0, 6.6, 5.5, 5.5
b(:,2) = b(MIN(m,4),1)
! increment a(2), a(3), a(8), and a(1) by 20.0
a(m) = a(m) + 20.0
! print the new values in a
PRINT *,a
END PROGRAM main
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 vector_sub.f90
$ a.out
2.2 3.3 8.8 1.1
21.1 22.2 23.3 4.4 5.5 6.6 7.7 28.8 9.9 11.0
66
第3章
配列
配列値を持つ構造体成分の引用
配列値を持つ構造体成分の引用
構造体成分の引用では、配列またはスカラを指定できます。たとえば、引用中で親が配列として
宣言され、成分の 1 つも配列として宣言されている場合は、配列値を持つ構造体成分の引用が可
能になります。概念的には、配列値を持つ構造体成分の引用は、部分配列の引用に似ています
(63 ページの「部分配列」の項を参照 )。
次のコードについて説明します。
TYPE student_data
CHARACTER(25) :: name
INTEGER
:: average, test(4)
END TYPE student_data
TYPE course_data
CHARACTER(25) :: course_title
INTEGER
:: course_num, class_size
TYPE(student_data) :: student(10)
END TYPE course_data
TYPE (course_data) :: course(5)
これらの文では、1 コース当り 10 人の受講者で、合計 50 人の受講者のコース情報を保守できる
ようにデータベースが準備されます。受講者に関する情報は、student、つまり構造型の配列に
保持されます。同様に、5 つのコースに関する情報は course に保持されますが、これも構造型
の配列であり、その成分の 1 つとして student があります。次の文では、構造体成分の引用を
使用してテストの得点が 1 コースの 1 受講者に代入されています。
course(5)%student(7)%test(4) = 95
この引用はスカラ値を持ちます。つまり、95 が 1 つの要素、つまり、course(5) の
student(7) の test(4) に代入されます。
ただし、構造体成分の引用で複数の要素を引用することもできます。次の文では、同じ得点が 1
つのコースの受講者全員が受験した 1 つのテストに代入されています。
course(4)%student%test(3) = 60
第 3 の要素には 1 つの引用が代入されているので、この構造体成分の引用は配列値を持ちます。
引用先は、配列全体ではなく配列 course の 1 部分です。
次の文でも、配列値を持つ構造体成分の引用によって 1 コースの 1 受講者のすべてのテストが初
期化されます。
course(3)%student(3)%test = 0
第3章
67
配列
配列値を持つ構造体成分の引用
次の文では、配列値を持つ構造体成分の引用で添え字三つ組を使用して、同じ得点を 1 コースの
受講者 3 人の 1 回のテストに代入しています。
course(2)%student(1:3)%test(4) = 82
すべてのコースの受講者全員のすべてのテストを 0 に初期化できれば便利です。しかし、規格で
は、構造体成分の引用のうち、複数部で 0 より大きい次元数を指定することは許されません。つ
まり、次の例は不正です。
course%student%test = 0
! ILLEGAL
次の例 array_val_ref.f90 には、本項で説明したコード例が含まれています。
例 3-4
array_val_ref.f90
PROGRAM main
! illustrates array-valued structure component references
! define a derived type that will be used to declare an
!
object of this type as a component of another derived type
TYPE student_data
CHARACTER(25) :: name
INTEGER
:: average, test(4)
END TYPE student_data
TYPE course_data
CHARACTER(25) :: course_title
INTEGER
:: course_num, class_size
TYPE(student_data) :: student(10)
! an array of derived
! type
END TYPE course_data
TYPE (course_data) :: course(5)
! type
! an array of derived
! scalar-valued structure component reference
course(5)%student(7)%test(4) = 95
PRINT *, course(5)%student(7)%test(4)
! array-valued structure component reference
course(4)%student%test(3) = 60
PRINT *, course(4)%student%test(3)
! array-valued structure component reference
68
第3章
配列
配列値を持つ構造体成分の引用
course(3)%student(3)%test = 0
PRINT *, course(3)%student(3)%test
! array-valued structure component reference, using
! a subscript triplet to reference a section of the
! array component student
course(2)%student(1:3)%test(4) = 82
PRINT *, course(2)%student(1:3)%test(4)
!
!
!
!
!
the following commented-out statement is illegal:
only one part (of the combined components and
parent) in a structure component reference
may have a rank greater than 0.
course%student%test = 0
END PROGRAM main
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 array_val_ref.f90
$ a.out
95
60 60 60 60 60 60 60 60 60 60
0 0 0 0
82 82 82
第3章
69
配列
配列構成子
配列構成子
配列構成子は、配列に値を代入するときに使用します。生成される値は、スカラ値、任意の次元
数の配列、および DO 形反復宣言の並びから与えられます。配列構成子は、1 次元の配列式が許
される任意の文脈に使用できます。次元数が 1 より大きい配列は、RESHAPE 組み込み関数を使
用して構成できます。配列構成子の型は並びに含まれる値から取り込まれ、そのすべてが同じ型
および型パラメータ ( 文字長など ) を持たなければなりません。寸法は、指定した値の数から取
り込まれます。
配列構成子の構文は、次のとおりです。
(/ ac-value-list /)
ここで ac-value-list は、1 つ以上の ac-values をコンマで区切った並びです。各 ac-value
には、次のいずれかを指定できます。
•
次のようなスカラ式
(/ 1.2, 0.0, 2.3 /)
•
次のような配列式
(/ x(0:5) /)
ここで x(0) ~ x(5) の値は、配列構成子の値となります。値の並びに含まれる配列の次元
数が 1 より大きければ、値は 52 ページの「配列の基礎」の項で説明したように列順で生成
されます。
•
DO 形反復宣言の形式は、次のとおりです。
(ac-value-list, do-var = expr1, expr2 [, expr3])
ここで do-var はスカラ整変数の名前、expr1 は初期値、expr2 は終値、expr2 は刻み幅
( デフォルトは 1) です。次に例を示します。
(/ i, i = 1, 10 )
型宣言や代入文における配列の初期化に使用する場合は、その配列中のすべての要素を初期化し
なければなりません。たとえば、次の場合は不正です。
INTEGER :: i(10) = (/ 1, 2, 3 /)
! ILLEGAL: too few
!
initializers
値を指定しなければ、配列構成子の大きさは 0 になります。たとえば、次の配列構成子の場合、
(/ ( i, i=10,n) /)
70
第3章
配列
配列構成子
大きさは、変数 n の値に依存します。したがって、この変数の値が 10 より小さければ、構成子
には値が含まれません。
並びに定数値しか含まれていなければ、配列構成子では名前付き定数や型宣言文を初期化できま
す。配列構成子では、DATA 文の変数は初期化できません。この文には、スカラ定数しか含める
ことができません。
HP Fortran では、拡張機能として (/ と /) の代わりに [ と ] を使用できます。
次の例は、配列構成子を示しています。
! array x is assigned three real values.
x = (/19.3, 24.1, 28.6/)
! One vector, consisting of 16 integer values, is assigned to j
j = (/4, 10, k(1:5), 2 + l, (m(n), n = -7,-2),16, 1/)
! assign 5 values
a = (/(base(k), k=1,5)/)
! The named constant t is a rank-one array initialized with
!
the values 36.0 and 37.0
REAL,DIMENSION(2):: t
PARAMETER (t=(/ 36.0, 37.0/))
! the array constructor is reshaped as 1 3 5 7
!
2 4 6 8
! and is then assigned to z
z=RESHAPE((/1,2,3,4,5,6,7,8/), (/2,4/) )
! an array constructor is used for the second component of
! the structure constructor
alaska = site(”NOME”,(/-63,4/))
diagonal = (/ (b(i,i), i=1,n) /)
hilbert = RESHAPE( (/ ((1.0/(i+j), i=1,n), j=1,n) /), (/ n,n /) )
ident = RESHAPE ( (/ (1, (0, i=1,n), j=1,n-1), 1 /), (/ n,n /) )
最後の 3 つの例のように、DO 形反復と RESHAPE 関数を持つ配列構成子は、他の記述法で表せな
い配列を構成できます。
第3章
71
配列
配列式
配列式
配列演算は、パラレルに実行されます。つまり、演算は要素ごとに独立して順不同で実行されま
す。これにより、代入文の左辺と右辺には同じ配列を使用できるため、代入前に右辺が評価され
ます。これは、計算の中間結果を保持するために、コンパイラによって一時的な領域が作成され
る場合があることを意味します。
スカラは、配列式に使用できます。次のように、全体配列の引用を含む式にスカラを使用する場
合、
a = b + 2.0
! a and b are conformable arrays of type real
スカラが評価されてから、それぞれがスカラ値を持つ要素の形状適合配列を形成するためにブ
ロードキャストされた場合と同じ効果があります。したがって、配列の文脈内で使用するスカラ
は、関連する配列との形状適合となります。
大きさ 0 の配列も、配列式に使用できます。この種の配列は要素を持ちませんが、形状を持つた
め、形状適合配列の規則に従わなければなりません。スカラは配列と形状適合となるため、大き
さ 0 の配列に関連する演算に使用できます。
次の例は、正しい配列式と不正な配列式を示しています。
SUBROUTINE foo(a,b,c)
! a is an assumed-shape array with rank-one
REAL :: a(:)
! b is a pointer to a rank-two array
REAL, POINTER :: b(:,:)
! c is an assumed-size array
REAL :: c(*)
! d is an allocatable array; its shape can only be defined in an
! ALLOCATE statement
REAL, ALLOCATABLE :: d(:)
! create the array d with the same size as a; a and d have
! the same shape and are therefore conformable
ALLOCATE(d(SIZE(a)))
! copy the array a into d
d = a
72
第3章
配列
配列式
!
!
!
!
b
sets each element of the array associated with b to 0.0;
the effect is as if the scalar were broadcast into a
temporary array, with the same shape as b; b is then assigned
to theleft-hand side
= 0.0
! corresponding elements of a and d are added together and then
! stored back into the corresponding array element of d
d = a + d
!
!
!
!
d
conceptually the operand SQRT(d) is evaluated into an
intermediate array with the same shape as d; each element of
the intermediate array will be added to the corresponding
element of a and stored into the corresponding element of d
= a + SQRT(d)
DEALLOCATE(d)
! examples of illegal uses of arrays:
!
!
!
a
ILLEGAL - c is an assumed-size array and so has no shape;
an assumed-size array may not be used as a whole array
operand(except in an argument list)
= c
! ILLEGAL - the arrays a and b do not have the same shape and are
! therefore not conformable
a = a + b
! ILLEGAL - d was previously deallocated and must not be
! referenced subsequently
a = a + d
END SUBROUTINE foo
第3章
73
配列
配列値をとる関数
配列値をとる関数
関数には、配列値を使用できます。つまり、その戻り値をスカラではなく値の配列として評価で
きます。配列値をとる関数は、次の場合を除き任意の配列式に使用できます。
•
入力項目並びの中
•
代入文の左辺 ( 関数中で結果を返す場合以外 )
また、配列値をとる関数は、スカラ関数の引用が許される配列式にも使用できます。ただし、形
状適合でなければなりません。つまり、関数結果の形状は、式と同じ形状でなければなりませ
ん。
以降の項では、配列値をとる組み込み関数と利用者定義関数について説明します。
組み込み関数
要素別処理手続きと変形手続きは、配列式に対して特定の関連性を持ちます。要素別処理手続き
( たとえば、SQRT や SIN) はスカラ引き数に対して指定されますが、配列引き数を指定すると、
その引き数と同じ形状を持つ配列値の結果が返されます。結果の各要素は、関数が引き数のうち
対応する各要素に適用された場合と同じになります。
変形手続き ( たとえば、RESHAPE, SUM, および MATMUL) は、手続きが全体として機能する 1 つ以
上の配列引き数をとり、通常は配列値を持つ結果を返します。この結果の要素は、引き数のうち
対応する要素だけでなく、引き数の他の要素の値にも依存する場合があります。
利用者定義関数
利用者定義関数は、スカラ値をとる結果または配列値をとる結果を返すことができます。配列式
にはスカラ関数を使用でき、その値が形状適合配列全体にブロードキャストされるという効果が
あります。利用者定義の配列値をとる関数を引用する場合は通常、関数に関する規則に従うだけ
でなく、それを使用する式の形状にも適合させる必要があります。
利用者定義関数については、158 ページの「外部手続き」の項を参照してください。
次のコードセグメントは、配列値をとる 2 つの関数 genrand ( 利用者定義 ) および RESHAPE ( 組
み込み ) を示しています。
PROGRAM main
! The following interface block describes the characteristics of
! the function genrand; the function inputs a single integer
! scalar and returns a real array of rank-one with an extent
74
第3章
配列
配列値をとる関数
! equal to the value of its argument
INTERFACE
FUNCTION genrand(n)
INTEGER:: n
REAL, DIMENSION (n)::genrand
END FUNCTION genrand
END INTERFACE
REAL :: a(100)
REAL :: b(10,10)
! set array a to the result returned by the function genrand;
! note that the left and right hand side are conformable
a = genrand(SIZE(a))
!
!
!
!
!
b
add each element of a to the corresponding element of the
result returned by genrand, forming an intermediate rank-one
result that is passed into the intrinsic function RESHAPE.
This intrinsic transforms its argument into a 10 by 10 array.
Again, the left and right hand side are conformable.
= RESHAPE(a + genrand(100),(/ 10, 10 /))
.
.
.
END PROGRAM main
第3章
75
配列
配列問い合わせ組み込み関数
配列問い合わせ組み込み関数
表 3-1 は、配列の属性を返す問い合わせ組み込み関数とその簡単な説明を示しています。これら
の組み込み関数についての詳細は、509 ページの第 11 章 「組み込み手続き」を参照してくださ
い。
表 3-1 配列問い合わせ組み込み関数
組み込み関数
説明
ALLOCATED
割り付け配列の割り付け状態を返します。59 ページ
の「割り付け配列」の項を参照してください。
ASSOCIATED
配列ポインターの結合状態を返します。126 ページの
「ポインター結合状態」の項を参照してください。
LBOUND
指定された次元の下限、または配列全体の下限を返し
ます。
SHAPE
1 次元の整数配列の形状を返します。
SIZE
配列の大きさ、または特定次元の寸法を返します。
UBOUND
指定された次元の上限、または配列全体の上限を返し
ます。
76
第3章
4 式と代入
本章では、式と代入について説明します。本章で説明する項目は、次のとおりです。
•
式と次の成分
— 演算対象
— 演算子
— 特殊形式の式
•
代入と次の項目
— 代入文
— ポインター代入
— 配列選別代入
注記
第4章
本章では、組み込み演算子と組み込み代入についてのみ説明します。利用者定義
演算子と利用者定義代入については、182 ページの「利用者定義演算子」の項と
184 ページの「利用者定義代入」の項を参照してください。
77
式と代入
式
式
式は、データの宣言で、コンピュータが式を評価して値を生成できるようにする演算の集合を含
む場合もあります。式の結果として値が返されるため、式には型、種別、および形状がありま
す。式が文字型であれば、長さパラメータもあります。
式の汎用的な形式は次のとおりです。
[operand1] operator operand2
operand1, operand2
データオブジェクト、またはデータとして評価される式です。配列値とスカラ
値のどちらでもかまいません。
operator
組み込み演算子または利用者定義演算子です。operator が単項であれば、
operand1 は指定できません。
以降の項では、演算対象、演算子、および式についての詳細を説明します。
演算対象
演算対象には、次のいずれかを使用できます。
•
1.0, 'ab', または a などの定数または変数
•
a(1,3) または a(1,2:3) などの配列要素または部分配列
•
ch(1:3) または employee%name などの文字部分列または構造体成分
•
(/1.0,2.0/) などの配列構成子
•
employee(8, "Wilson", 123876) などの構造体構成子
•
SQRT(x) などの関数引用
•
(b + SIN(y)**2) などのかっこで囲んだ式
式に演算対象として使用する変数や関数引用は、事前に定義しておく必要があります。また、ポ
インターは、事前に指示先と結合しておく必要があります。演算対象が POINTER 属性を持つ場
合、それに結合している指示先が演算対象となります。
78
第4章
式と代入
式
演算対象が全体配列の引用であれば、配列全体が引用されます。大きさ引き継ぎ配列変数は、演
算対象には使用できません。大きさ引き継ぎ配列の部分配列は、その部分配列の最後の次元の寸
法が添え字、上限の寸法を持つ部分配列添え字、またはベクトル添え字の使用によって確定され
ている場合は、演算対象として使用できます ( 大きさ引き継ぎ配列については、61 ページの「大
きさ引き継ぎ配列」の項を、部分配列については 63 ページの「部分配列」の項を参照 )。
式の 2 つの演算対象が配列であれば、両方の形状が同じでなければなりません。一方の演算対象
がスカラであれば、それは他方の演算対象と同じ形状の配列と見なされ、そのすべての要素がス
カラ値を持ちます。演算結果は配列になり、その配列の各要素は 2 つの演算対象の対応する要素
に演算子が繰り返し適用された結果を示します。
式における演算対象の使用方法に関する規則は、式の型によって異なります。たとえば、代入文
の右辺には使用できるが、初期値式には使用できない演算対象があります。さまざまな形式の式
と、各形式によって演算対象に適用される制限条項についての詳細は、85 ページの「特殊形式
の式」の項を参照してください。
演算子
HP Fortran で認識される演算子の型は次のとおりです。
•
算術演算子
•
関係演算子
•
連結演算子
•
論理演算子
•
ビット単位演算子
•
利用者定義演算子
最後の 1 つを除き、これらの演算子はすべて組み込み演算子です。つまり、各演算子によって実
行される演算は HP Fortran で定義されています。組み込み演算子については、以降の項で説明
します。利用者定義演算子は、プログラマーが INTERFACE 文を使用して定義するか、すでに定
義されている場合はオーバーロードする演算子です。利用者定義演算子とオーバーロードについ
ては、182 ページの「利用者定義演算子」の項を参照してください。
算術演算子
算術演算子には次の 2 種類があります。
•
加算演算子 (+ および -)。
この 2 つの演算子は、単項演算子または 2 項演算子として使用できま
す。
第4章
79
式と代入
式
•
乗算演算子 (/, *, および **)。この 2 つは 2 項演算子です。
2 項演算子によって結合された 2 つの演算対象には、異なる数値型や異なる種別型パラメータを
使用できます。結果の型は次のとおりです。
•
演算対象の型と種別型パラメータが 同じであれば、結果の型と種別型パラメータも同じにな
ります。
•
演算対象の型が同じでも、種別型パラメータが異なる場合、結果の型は同じですが種別型パ
ラメータの値は大きくなります。
•
一方の演算対象が複素数型であれば、結果は複素数型になります。
•
一方の演算対象が実数型で、他方が複素数型でなければ、結果は実数型になります。
値が整数のぺき乗になる場合を除き、型や種別型パラメータが結果と異なる各演算対象は、演算
の実行前に結果の型および種別型を持つ値に変換されます。
論理演算対象と整数演算対象を、算術演算子と組み合わせることができます。論理演算対象は整
数の同じ種別型パラメータとして処理され、演算結果は整数型になります。演算対象が異なる種
別型パラメータの場合は、短い方が符号付き整数として拡張されるものと見なされます。論理値
については、81 ページの「論理演算子」の項を参照してください。
算術演算子は、次のような制限に従って動作します。
•
整数による整数除算は、0 と真の結果の間で真の結果に最も近い整数になると定義されます。
•
整数と負の整数のべき算 i1**i2 で、i2 は負であり、1/(i1**(-i2)) として解釈されます。
ここで除算は、ある整数による別の整数の除算を記述したものとして解釈されます。
•
x1 と x2 が実数で x1 が負であれば、結果が複素数型になることがあるため、x1**x2 は不正な
式となる場合があります。ただし、CMPLX(x1)**x2 は、正しいので注意してください。こ
の結果は主値になります。
Fortran 90 規格に対する HP の拡張機能は、次のとおりです。
•
次のように、べき算演算子の後に符号付き言語要素を使用できます。
i ** -j
Fortran 90 規格では、隣接演算子は許されません。
•
80
論理型と整数型の演算対象は、算術演算子と組み合わせることができます。論理変数は、等
価サイズの整数として処理され、演算結果は整数値となります。さまざまな長さの演算対象
が関連する場合は、短い方の演算対象が符号付き整数として拡張されるものと見なされま
す。次に例を示します。
第4章
式と代入
式
LOGICAL(1)
LOGICAL(4)
INTEGER(1)
INTEGER(4)
::
::
::
::
boolean1 = -4
boolean4 = 2**16 + 27
flag1
flag4
flag4 = boolean4 - boolean1
!set flag4 to 2**16 + 31
! a relational operator with a logical operand
IF (boolean4 > 65536) THEN
flag1 = -(boolean4/65536) !set flag1 to -1
ENDIF
関係演算子
関係演算子は、.EQ., .NE., .GT., .GE., .LT., .LE., ==, /=, >, >=, <, および <= です。関係演算
子はすべて、2 項です。英字形式の関係演算子は、シンボル形式と同じ意味を持ちます。した
がって、.EQ. は == と同義であり、.NE. は /= と同義です。
関係演算の演算対象が異なる型や種別型パラメータを持つ数値式であれば、演算対象はその合計
の型と種別型パラメータに変換されてから比較されます。混在型算術式の結果については、79
ページの「算術演算子」の項を参照してください。
演算対象が文字式であれば、短い方の演算対象が他方の長さまで空白で補われてから比較されま
す。比較は、最初の文字から始まって、文字の違いや等値性が確認されるまで続きます。
連結演算子
連結演算子は、// です。これは 2 項演算子です。
連結演算では、連結演算子の各演算対象は文字型で、同じ種別型パラメータを持たなければなり
ません。結果の文字長パラメータは、各演算対象の文字長パラメータの合計です。
論理演算子
論理演算子は、.AND., .OR., .EQV., .NEQV., .XOR., および .NOT. です。.NOT. 演算子は単項
で、他の演算子は 2 項です。.XOR. は、.NEQV. 演算子と同じ意味を持つ HP 拡張機能です。
HP 拡張機能として、論理式の演算対象に整数型を使用できます。整数を返す関数を論理式に使
用でき、論理値を返す関数を整数式に使用できます。
論理演算の演算対象が異なる種別型パラメータを持つ場合は、小さい方のパラメータを持つ演算
対象が大きい方のパラメータを持つ値に変換されてから、演算が実行されます。結果は、大きい
方の種別型パラメータとなります。
第4章
81
式と代入
式
表 4-1 は、演算対象値のさまざまな並べ替えにおける論理演算子の動作を示しています。.XOR.
演算子は .NEQV. 演算子と同義であり、動作も同じなので注意してください。
表 4-1 論理演算子
opnd1
opnd2
.AND.
.OR.
.EQV.
.NEQV.
.NOT.
opnd1
.TRUE.
.TRUE.
.TRUE.
.TRUE.
.TRUE.
.FALSE.
.FALSE.
.TRUE.
.FALSE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
.TRUE.
.FALSE.
.FALSE.
.FALSE.
.FALSE.
.TRUE.
.FALSE.
.TRUE.
ビット単位演算子
規格の拡張により、HP Fortran では論理演算子を整数演算対象のビット単位演算子として使用
できます。論理演算はビット単位であり、整数の 2 項表現のビットごとに実行されます。演算対
象の長さが異なる場合は、符号付き整数の場合と同様に、短い方が他方の長さまで拡張されるも
のと見なされ、結果は長い方の演算対象の長さとなります。
整数演算対象に論理演算子を使用する場合、0 以外の値は .TRUE. と見なされ、0 は .FALSE. と
見なされます。
通常、整数型の実引き数は、対応する仮引き数が論理型の場合には手続きの引用に使用できず、
仮引き数が整数型の場合は論理型の実引き数は使用できません。HP 機能拡張により、ビット操
作組み込み関数の呼び出しには、論理型と整数型の引き数を相互に使用できます。ビット操作組
み込み関数については、509 ページの第 11 章 「組み込み手続き」を参照してください。
次の例は、.AND. 演算子を使用してビット単位の AND 演算を実行する方法を示しています。
INTEGER i, j
i = 5
j = 3
PRINT *, i .AND. j
! Output from the PRINT statement:
1
次の例は、論理演算子を使用してビットマスク演算を実行する方法を示しています。
INTEGER(2) mask2
INTEGER(4) mask4
DATA mask2/ -4 /
82
第4章
式と代入
式
DATA mask4/Z"ccc2"/
mask4 = mask4 .NEQV. mask2
!set mask4 to Z"ffff333e"
mask2 = .NOT. mask4
!set mask2 to Z"ccc1"
次の例に示すビット操作組み込み関数の引用は、規格に合致しています。
INTEGER :: mask = 65535
LOGICAL :: is_even = .FALSE.
IF (IAND(mask,1) /= 0) is_even = .TRUE.
HP Fortran では、前述の例の、次のような規格に定められていないバージョンを使用できます。
LOGICAL :: mask = z"ffff"
INTEGER :: is_even = .FALSE.
IF (IAND(mask,1)) is_even = .TRUE.
演算子の優先順位
式が次のように展開された場合、
operand1 operator1 operand2 operator2 operand3 ...
各演算子には優先順位が割り当てられます。定義済みの評価順序では、隣接する演算子より優先
順位の高い演算子を含む副式が最初に評価されます。演算子の優先順位が同一の場合は、左から
右へと評価されます。ただし、べき算演算子 (**) は例外で、右から左へと評価されます。
任意の式や副式をかっこで囲むことができます。これらの式は、前述の規則を使用して常に最初
に評価されます。したがって、このようなかっこの使用方法は、通常の数学上での使用方法と同
じです。
表 4-2 は演算子の優先順位を示し、表 4-3 は演算子の優先順位を表す式の例を示します。
第4章
83
式と代入
式
表 4-2 演算子の優先順位
優先順位
演算子
最上位
利用者定義単項演算子
.
**
* /
.
単項 + 単項 .
+ .
//
.
.EQ. .NE. .LT. .LE. .GT. .GE.
.
== /= < <= > >=
.
.NOT.
.
.AND.
.
.OR.
.
最下位
.EQV. .NEQV. .XOR.
利用者定義 2 項演算子
表 4-3 演算子の優先順位の例
式
評価方法
説明
a+b*c
a + (b*c)
* は + より上位の優先順位を
持ちます。
a/b*c
(a/b)*c
/ と * の優先順位は同じで、
左から右へと評価されます。
a**b**c
a**(b**c)
** は右から左へと評価され
ます。
a.AND.b.AND.
c.OR.d
((a.AND.b).AND.c).
OR.d)
論理演算子は、左から右へと
評価されます。
84
第4章
式と代入
式
規格では、文が暗示する順序と数学的に等価の結果が生成されるような順序に従って、式を評価
するコードをコンパイラで生成できます。この規格のあいまいさによって、式の順序変更や共通
式のプロモートなど、コードの最適化が可能になります。
規格では評価順序は定義されていないため、式の中での関数引用によって同じ式の中の他の演算
対象を変更することはできません。たとえば、fun(x)+x は、fun の引用によって引き数 x の値
が変更されると不定になります。
特殊形式の式
ある種の言語では、式の形式に制限が適用されます。たとえば、PARAMETER 文で名前付き定数
に対して指定する値は式で定義できますが、その式はコンパイル時に評価できなければなりませ
ん。つまり、式には、プログラムの実行に値が依存する演算対象を含めることはできません。ま
た、仮配列引き数の上下限を式として指定できますが、この式は副プログラムに入るときに評価
できなければなりません。
式に使用できる演算対象と演算子には、その式が次のいずれかであるかに応じて特殊な制限条項
が適用されます。
•
定数式
•
初期値式
•
宣言式
以降の項では、特殊形式の式について説明します。
定数式
定数式は、組み込み演算子と定数演算対象のみを含む定数または式です。この制限条項は、定数
の開始位置と終了位置の指定を含む部分列、配列、または構造体構成子など、定数の明示的に定
義された部分にも適用されます。定数式には、コンパイル時に評価可能な組み込み関数の引用を
含めることができます。また、定数式は、任意の式が指定される任意の文脈に使用できます。
次の例は、定数式を示しています。
123
! an integer literal
”Hello ” // ” World”
! a character constant expression
3.0_single
! a real literal constant where single is
! a named integer constant
coord(0.0,infinity)
! a structure constructor in which
! "infinity" is a named constant
第4章
85
式と代入
式
(/ SQRT(x), x, x*x /)
! an array constructor in which x is a
! named real constant
x*x + 2*x*y + y*y
! a constant numeric expression where x
! and y are named constants
SUM(iterations,DIM=1)
! reference to a transformational
! intrinsic where iterations is an
! array-valued named constant
SHAPE(matrix)
! a reference to an inquiry intrinsic in
! which "matrix" is an array with
! constant bounds
初期値式
初期値式は、より特殊な形式の定数式であり、宣言文の中に初期値として使用できます。初期値
式には、さらに次のような制限条項が適用されます。
•
べき算は、第 2 の演算対象が整数の場合にのみ使用できます。
•
式の中の副式は、それ自体が初期値式でなければなりません。
•
組み込み関数の引用のすべての引き数は、初期値式でなければなりません。
•
引用できる変形組み込み関数は、次のものだけです。
— REPEAT
— RESHAPE
— SELECTED_INT_KIND
— SELECTED_REAL_KIND
— TRANSFER
— TRIM
•
引用される問い合わせ組み込み関数で言語要素 ( 上下限や種別型パラメータなど ) の特性を問
い合わせできるのは、その特性が定数の場合だけです。
•
要素別処理組み込み関数には、整数または文字引き数と整数または文字の結果が必要です。
初期値式が必要になるのは、次の場合です。
•
86
名前付き定数の値。PARAMETER 属性で宣言された言語要素は、初期値式で初期化しなければ
なりません。
第4章
式と代入
式
•
型宣言文の種別パラメータ。
•
型変換組み込み関数の KIND 仮引き数。
•
型宣言文の初期値。
•
DATA 文中の構造体構成子に含まれる式。
•
CASE 文中の場合値。
•
EQUIVALENCE 文中の添え字式または部分列の範囲。
次の言語要素は初期化できません。
•
仮引き数
•
関数結果
•
割り付け配列
•
ポインター
•
外部名
•
組み込み名
•
自動割り付けオブジェクト
次の例は、初期値式を示しています。
-456
! an integer literal
(“Hello ”// ”World”)
! a character constant expression
pi * r ** 2
! a constant numeric expression, where
!
pi and r are named constants
ABS(i * j)
! reference to an elemental intrinsic,
! where i and j are named integer
! constants
SELECTED_REAL_KIND(7)
! reference to a transformational intrinsic
次の例は、不正な初期値式を示しています。
x ** 2.5
! the power operand is not an integer
LOG(10.0)
! the intrinsic function is neither
第4章
87
式と代入
式
!
SUM( (/ i, 2 /) )
integer nor character type
! reference to a prohibited function
配列構成子を使用して配列を初期化する方法については、70 ページの「配列構成子」の項を参
照してください。
宣言式
宣言式はスカラ値を持つ整数型で、宣言式が指定された有効域に入るときに評価されます。宣言
式では、配列宣言の上下限、または CHARACTER 型宣言での長さが指定されます。
宣言式の演算対象は、次のいずれかです。
•
定数表現、名前付き定数、または定数の一部。
•
引き数、親プログラム、または参照結合に使用可能な変数、あるいは共通の変数。
•
各要素や成分も宣言式であるか、配列構成子に指定される配列構成 DO 形反復の変数である配
列構成子または構造体構成子。
•
OPTIONAL 属性も INTENT(OUT) 属性も持たない仮引き数。
•
組み込み関数の引き数。
•
整数の結果を返す要素別処理組み込み関数の引用。
•
次のいずれかの変形組み込み関数の引用
— REPEAT
— RESHAPE
— SELECTED_INT_KIND
— SELECTED_REAL_KIND
— TRANSFER
— TRIM
•
ALLOCATED, ASSOCIATED, および PRESENT を除く問い合わせ組み込み関数。他の問い合わせ
組み込み関数は、問い合わせする特性がポインター代入や ALLOCATE 文で定義されていなけ
れば引用できます。また、問い合わせ組み込み関数では、大きさ引き継ぎ配列の次のような
特性は問い合わせできません。
— 最後の次元の上限
— 最後の次元の寸法
88
第4章
式と代入
式
— 配列の大きさ
— 配列の形状
表 4-4 は、宣言式と初期値式の違いを示しています。
表 4-4 初期値式と宣言式
初期値式
宣言式
スカラ値でも配列値でもかま
いません。
スカラ値でなければなりません。
任意の型が許されます。
整数型でなければなりません。
定数式でなければなりませ
ん。
親プログラム、引き数、または参照記憶列結
合で変数を引用できます。また、共通の変数
も引用できます。
ALLOCATED, ASSOCIATED, お
よび PRESENT を除き、言語
要素の特性が定数であれば、
問い合わせ組み込み関数を引
用して特性を問い合わせるこ
とができます。
ALLOCATED, ASSOCIATED, および PRESENT を
除き、問い合わせ組み込み関数を引用できま
す。引き数は、問い合わせ対象となる上下限
や種別型パラメータが引き継がれることな
く、ALLOCATE 文かポインター代入で定義さ
れていない宣言式または変数でなければなり
ません。
次の例は、宣言式を示しています。
789
! an integer literal constant
MAX(m+n,0)
! m and n are integer dummy arguments
LEN(c)
! c is a character variable accessible via
! host association
SELECTED_INT_KIND(5)
! reference to a transformational
! intrinsic
UBOUND(arr,DIM=n)
! reference to an array inquiry
! intrinsic in which arr is an array
! accessible via USE and n is a
! variable in common
第4章
89
式と代入
代入
代入
代入演算では、値を与えて変数を定義します。HP Fortran には、次の 4 種類の代入があります。
•
組み込み代入 ( 代入文とも呼びます )
•
ポインター代入
•
配列選別代入 (WHERE 構文とも呼びます )
•
利用者定義代入
以降の項では、最初の 3 種類の代入について説明します。最後の利用者定義代入は、プログラ
マーが INTERFACE 文を使用して定義します。利用者定義代入については、184 ページの「利用
者定義代入」の項を参照してください。
代入文
代入文では、変数に式の値を与えます。代入文の構文は、次のとおりです。
variable = expression
variable には、非ポインター変数、または指示先に結合されているポインター変数を使用でき
ます (variable がポインターであれば、expression が指示先に代入されます )。variable と
expression に有効な型の組み合わせについては、表 4-5 を参照してください。変換を示す組み
込み関数については、第 11 章を参照してください。
表 4-5 variable=expression の変換
変数の型
式の型
変換
整数型
整数型、実数型、ま
たは複素数型
INT(expression,
KIND(variable))
実数型
整数型、実数型、ま
たは複素数型
REAL(expression,
KIND(variable))
文字型
文字型 ( 同じ種別パ
ラメータ )
CMPLX(expression,
KIND(variable))
90
第4章
式と代入
代入
表 4-5 variable=expression の変換 ( 続き )
変数の型
式の型
変換
論理型
論理型
expression は、variable より長け
れば切り捨てられ、それ以外の場合
は variable に代入される値が空白
で補われます。
論理型
論理型
LOGICAL(expression,
KIND(variable))
構造型
同じ構造型
なし
82 ページの「ビット単位演算子」の項で前述したように、HP Fortran では、整数演算対象と論
理演算対象の両方を使用できます。また、論理式を整変数に代入し、整数式を論理変数に代入で
きます。表 4-5 のように、論理式を実数型または複素数型の変数に代入したり、実数式または複
素数式を論理変数に代入することもできます。
variable がスカラであれば、expression はスカラでなければなりません。variable が配列
または部分配列であれば、expression は同じ形状またはスカラの配列値をとる式でなければな
りません。variable が配列または部分配列で、expression がスカラであれば、expression
の値は variable のすべての要素に代入されます。variable と expression がどちらも配列で
あれば、暗黙の順序付けなしで要素別に代入が実行されます。
expression は、代入開始前に完全に評価されます。たとえば、次のコードセグメントの場合、
CHARACTER (LEN=4):: c
c(1:4) = 'abcd'
c(2:4) = c(1:3)
c(2:4) が "aaa" ではなく "abc" に設定されます。これは、左から右へと 1 文字ごとに代入さ
れた結果です。
次の例は、さまざまなデータ型の代入を示しています。
! declarations of the variables used in the assignment statements
!
to follow
integer icnt
type circle
real radius
real xreal y
end type
type (circle) circle1, circle2
real area, pi
第4章
91
式と代入
代入
logical boolx, booly, pixel(10,10)
integer a(10,5)
integer, dimension (10,10):: matrix1, matrix2
character*3 initials
character*10 surname
character*20 name
icnt = icnt + 1
! integer assignment
circle1 = circle2
! derived-type assignment
area = pi * circle%radius**2
! real assignment
pixel(x,y) = boolx .AND. booly
! assigns a logical expression to
! an element of the logical
! array pixel
a(:,1:2) = 0
! first two columns of a are set to zero
maxtrix1 = maxtrix2
! each element of maxtrix2 is assigned to
! the corresponding element of maxtrix1
name = initials // surname
! character assignment using the
! concatenation operator
ポインター代入
ポインター代入によって、ポインターと指示先との結合が設定されます。結合が設定されると、
ポインターは代入文の左辺で引用された場合に代入の指示先となります。また、ポインターが式
で引用される場合、指示先は式の演算対象として使用されます。
ポインター代入の構文は、次のとおりです。
pointer-object => target-expression
pointer-object
POINTER 属性を持つ変数です。
target-expression
次のいずれかです。
•
92
TARGET または POINTER 属性を持つ変数
第4章
式と代入
代入
•
ポインター結果を返す関数の引用または利用者定義演算
pointer-object と target-expression の型、種別、および次元数は同じでなければなりませ
ん。target-expression が配列であれば、大きさ引き継ぎ配列やベクトル添え字を持つ部分配
列は使用できません。大きさ引き継ぎ配列については、61 ページの「大きさ引き継ぎ配列」の
項を参照してください。ベクトル添え字を持つ部分配列については、65 ページの「ベクトル添
え字」の項を参照してください。
target-expression がすでに指示先と結合しているポインターであれば、pointer-object は
target-expression の指示先と結合されます。target-expression が空状態または不定のポ
インターであれば、pointer-object は target-expression の空状態または不定状態を引き継
ぎます。ポインターの状態については、126 ページの「ポインター結合状態」の項を参照してく
ださい。
次の例 ptr_assign.f90 は、スカラと配列の指示先を持つスカラと配列のポインター結合を示して
います。
例 4-1
ptr_assign.f90
PROGRAM main
INTEGER, POINTER :: p1, p2, p3(:)
! declare three pointers, p3
! is a deferred-shape array
INTEGER, TARGET :: t1 = 99, t2(5) = (/ 1, 2, 3, 4, 5 /)
! p1, p2 and p3 are currently undefined.
p1 => t1
! p1 is associated with t1.
PRINT *, 'contents of t1 referenced through p1:', p1
p2 => p1
! p2 is associated with t1.
! p1 remains associated with t1.
PRINT *, 'contents of t1 referenced through p1 through p2:', p2
p1 => t2(1)
! p1 is associated with t2(1).
! p2 remains associated with t1.
PRINT *, 'contents of t2(1) referenced through p1:', p1
p3 => t2
! p3 is associated with t2.
PRINT *, &
'contents of t2 referenced through the array pointer p3:', p3
p1 => p3(2)
! p1 is associated with t2(2).
PRINT *, &
'contents of t2(2) referenced through p3 through p1:', p1
第4章
93
式と代入
代入
NULLIFY(p1)
! p1 is disassociated.
IF (.NOT. ASSOCIATED(p1)) PRINT *, "p1 is disassociated."
p2 => p1
! Now p2 is also disassociated.
IF (.NOT. ASSOCIATED(p2)) PRINT *, &
"p2 is disassociated by pointer assignment."
END PROGRAM main
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 ptr_assign.f90
$ a.out
contents of t1 referenced through p1: 99
contents of t1 referenced through p1 through p2: 99
contents of t2(1) referenced through p1: 1
contents of t2 referenced through the array pointer p3: 1 2 3
4 5
contents of t2(2) referenced through p3 through p1: 2
p1 is disassociated.
p2 is disassociated by pointer assignment.
配列選別代入
配列選別代入では、選別式と呼ばれる論理式によって代入用の配列要素の選別が制御されます。
配列選別代入は、WHERE 文と WHERE 構文によって実装されます。WHERE 文の構文は、次のとお
りです。
WHERE (array-logical-expression) array = array-expression
ここで array-logical-expression, array, および array-expression は、すべて形状適合で
なければなりません。array-logical-expression( 選別式 ) は要素ごとに評価され、結果
(.TRUE. または .FALSE.) によって、array の対応する要素に代入するかどうかが決定されま
す。
WHERE 構文は次のとおりです。
WHERE ( array-logical-expression )
array = array-expression
[array = array-expression] ...
[ELSEWHERE
array = array-expression
[array = expression] ... ]
END WHERE
94
第4章
式と代入
代入
WHERE 構文は WHERE 文に似ていますが、複数の array = array-expression 文を 1 つの
array-logical-expression で制御できるという点で、より一般的です。また、この構文で省
略可能な ELSEWHERE 部分によって配列要素が代入され、この配列要素に対応する
array-logical-expression 要素が .FALSE. と評価されます。
WHERE 構文の実行時には、array-logical-expression が 1 度だけ評価されるため、WHERE ブ
ロック (WHERE 文に続くブロック ) や array-logical-expression の言語要素に対する
ELSEWHERE ブロックでの後続の代入は、選別式の評価結果には影響しません。その後は、WHERE
ブロックでの代入は、次のように、WHERE 文で指定された場合と同様に順番に評価されます。
WHERE (array-logical-expression) array = array-expression
ELSEWHERE の各代入は、次の場合と同様に実行されます。
WHERE (.NOT.array-logical-expression) array = array-expression
たとえば、次の WHERE 構文の場合、
WHERE (a > b)
a = b
b = 0
ELSEWHERE
b = a
a = 0
END WHERE
これは、次のように指定した場合と同様に評価されます。
mask = a > b
WHERE (mask) a = b
WHERE (mask) b = 0
WHERE (.NOT.mask) b = a
WHERE (.NOT.mask) a = 0
WHERE ブロックまたは ELSEWHERE ブロックには、代入文だけを指定できます。WHERE 構文で分
岐先として使用できるのは、WHERE 文だけです。
WHERE 構文の形式は IF 構文の形式に似ていますが、重要な違いがあります。つまり、IF 構文は
1 ブロックしか実行できませんが、WHERE 構文では WHERE ブロックと ELSEWHERE ブロックのう
ち最低 1 つ ( または両方 ) が実行されます。WHERE 構文では、この違いのため、WHERE ブロック
の結果が ELSEWHERE ブロックへと送られ、したがって、ELSEWHERE ブロックの変数に影響する
という効果があります。ただし、ELSEWHERE ブロックで生成された結果を WHERE ブロックの変
数に送り返すことはできないので注意してください。
第4章
95
式と代入
代入
次の例 score2grade.f90 は、選別代入を使用して配列 test_score の各試験の得点にあたる英字
の等級を検索する方法を示しています。配列選別代入の利点を活用しないで同じ演算を実行する
には、DO ループを IF-ELSE-IF 構文または CASE 構文の配列で反復させ、各要素を一度にテスト
して代入する必要があります。
例 4-2
score2grade.f90
PROGRAM main
! illustrates the use of the WHERE statement in masked array
! assignment
!
! use an array constructor to initialize the array that holds
! the numerical scores
INTEGER, DIMENSION(10) :: test_score = &
(/75,87,99,63,75,51,79,85,93,80/)
! array to hold the equivalent letter grades (A, B, C, etc.)
CHARACTER, DIMENSION(10) :: letter_grade
! because the array arguments are declared in the procedure
! as assumed-shape arrays, the procedure’s interface must
! be explicit
!
INTERFACE
SUBROUTINE convert(num, letter)
INTEGER :: num(:)
CHARACTER :: letter(:)
END SUBROUTINE convert
END INTERFACE
PRINT *, 'Numerical score:', test_score
CALL convert(test_score, letter_grade)
PRINT '(A,10A3)', ' Letter grade:
', letter_grade
END PROGRAM main
SUBROUTINE convert(num, letter)
! declare the dummy arguments as assumed-shape arrays
INTEGER :: num(:)
CHARACTER :: letter(:)
! use the WHERE statements to figure the letter grade
! equivalents
WHERE (num >= 90) letter = 'A'
WHERE (num >= 80 .AND. num < 90) letter = 'B'
96
第4章
式と代入
代入
WHERE (num >= 70 .AND. num < 80) letter = 'C'
WHERE (num >= 60 .AND. num < 70) letter = 'D'
WHERE (num < 60) letter = 'F'
END SUBROUTINE convert
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 score2grade.f90
$ a.out
Numerical score: 75 87 99 63 75 51 79 85 93 80
Letter grade:
C B A D C F C B A B
次の例は、WHERE 構文を使用して配列 a の正の各要素を平方根に置換するサブルーチンを示して
います。残りの要素によって、その値の複素数型の平方根が計算され、複素数型配列 ca の対応
する要素に保存されます。この構文の ELSEWHERE 部分では、配列 a への代入を配列 ca への代
入の前に指定しないでください。さもないと、ca がすべて 0 に設定されます。
SUBROUTINE find_sqrt(a, ca)
REAL :: a(:)
COMPLEX :: ca(:)
WHERE (a > 0.0)
ca = CMPLX(0.0)
a = SQRT(a)
ELSEWHERE
ca = SQRT(CMPLX(a))
a = 0.0
END WHERE
END SUBROUTINE find_sqrt
第4章
97
式と代入
代入
98
第4章
5 データ型およびデータオブジェクト
本章では、データが HP Fortran プログラムでどのように表現され、保存されるかについて説明
します。説明する項目は、次のとおりです。
•
組み込み型
•
構造型
•
ポインター
•
境界の正しくないデータ
配列については、51 ページの第 3 章 「配列」を参照してください。RECORD 文および
STRUCTURE 文 (HP Fortran の拡張機能 ) についての詳細は、265 ページの第 10 章 「HP
Fortran 文」を参照してください。組み込み手続きについては、509 ページの第 11 章 「組み込
み手続き」を参照してください。
第5章
99
データ型およびデータオブジェクト
組み込み型
組み込み型
組み込み型は、HP Fortran 言語によって事前に定義されているデータ型です。これに対して、
構造型は、利用者定義です (117 ページの「構造型」の項を参照 )。組み込み型には、次のような
数値型が含まれます。
•
整数型
•
実数型
•
複素数型
また、次の非数値型が含まれます。
•
文字型
•
論理型
各型では、種別パラメータを指定して、その型のデータ表現を選択できます ( 種別パラメータの
形式については、102 ページの「組み込み型の型宣言」の項を参照 )。種別パラメータを指定し
なければ、それぞれの型にはデフォルトのデータ表現が使用されます。表 5-1 は、種別パラメー
タを指定していないデフォルトの場合など、各型のデータ表現を示しています。型は、キーワー
ドと適用可能な種別パラメータ別になっています。また、この表には、HP 拡張機能である
BYTE および DOUBLE COMPLEX のデータ表現も含まれています。
表 5-1 のように、HP Fortran では、データは自然境界上で整列させられます。組み込み型の言
語要素は、その大きさに応じてメモリー中で 1, 2, 4, または 8 の語境界上で整列させられます。
配列変数は、同じ型および同じ種別パラメータを持つスカラ変数に必要なデータの割り付け境界
の倍数のアドレス上で整列させられます。
注記
ASCII 形式の文字集合には値 0 ~ 127 (7 ビット ) のみが使用されますが、HP
Fortran の実装では 8 ビットの文字言語要素すべてを使用できます。文字ごとに
マルチバイト表現を必要とする文字集合を処理するには、8 ビットすべてを使用
する必要があります。
データ表現の数体系についての詳細は、514 ページの「データ表現の数体系」の項を参照してく
ださい。
100
第5章
データ型およびデータオブジェクト
組み込み型
表 5-1 組み込み型
型
値の範囲
有効桁数
(10 進数 )
バイ
ト数
デー
タの
割り
付け
境界
INTEGER(1)
-128 ~ 127
該当なし
1
1
INTEGER(2)
-215 ~ 215-1
該当なし
2
2
INTEGER(4)
( デフォルト )
-231 ~ 231-1
4
4
INTEGER(8)
-263 ~ 263-1
8
8
REAL(4)
( デフォルト )
-3.402823x1038 ~
4
4
8
8
16
8
該当なし
該当なし
-1.175495x10-38
0.0
約6
+1.175495x10-38 ~
+3.402823x1038
REAL(8)
-1.797693x10+308 ~
-2.225073x10-308
0.0
約 15
+2.225073x10-308 ~
+1.797693x10+308
REAL(16)
-1.189731x10+4932 ~
-3.362103x10-4932
0.0
約 33
+3.362103x10-4932 ~
+1.189731x10+4932
第5章
101
データ型およびデータオブジェクト
組み込み型
表 5-1 組み込み型 ( 続き )
バイ
ト数
デー
タの
割り
付け
境界
8
8
REAL(4) と同
じ
8
4
REAL(8) と同じ
REAL(8) と同
じ
16
8
DOUBLE COMPLEX
REAL(8) と同じ
REAL(8) と同
じ
16
8
CHARACTER(1)
( デフォルト )
ASCII 文字集合
1
1
LOGICAL(1)
.TRUE. および
.FALSE.
該当なし
1
1
LOGICAL(2)
.TRUE. および
.FALSE.
該当なし
2
2
LOGICAL(4)
( デフォルト )
.TRUE. および
.FALSE.
該当なし
4
4
LOGICAL(8)
.TRUE. および
.FALSE.
該当なし
8
8
型
値の範囲
DOUBLE
PRECISION
REAL(8) と同じ
COMPLEX(4)
REAL(4) と同じ
COMPLEX(8)
有効桁数
(10 進数 )
約 15
該当なし
組み込み型の型宣言
次の例は、組み込み型の型宣言文の一般的な形式を示しています。
type-spec[[,attribute-spec] ... :: ] entity-list
type-spec
次のいずれかです。
102
第5章
データ型およびデータオブジェクト
組み込み型
•
INTEGER [kind-selector]
•
REAL [kind-selector]
•
DOUBLE PRECISION [kind-selector]
•
CHARACTER [char-selector]
•
LOGICAL [kind-selector]
•
COMPLEX [kind-selector]
•
DOUBLE COMPLEX
•
BYTE
BYTE および DOUBLE COMPLEX は、HP 拡張機能です。BYTE は
INTEGER(KIND=1) と等価で、DOUBLE PRECISION は REAL(KIND=8) と等価
で、DOUBLE COMPLEX は COMPLEX(KIND=8) と等価です。ただし、例外は、
+autodbl または +autodbl4 が使用されている場合です。これらのオプショ
ンを使用して大きさを増やす方法については、『HP Fortran プログラマーガイ
ド』を参照してください。各 type-spec については、509 ページの第 11 章
「組み込み手続き」を参照してください。
type-spec が存在する場合は、暗黙の型宣言の規則が無効になります。107
ページの「暗黙の型宣言」の項を参照してください。
規格に対する HP 拡張機能として、次の形式の type-spec も使用できます。
type*length
ここで type は、BYTE, CHARACTER, DOUBLE COMPLEX, および DOUBLE
PRECISION 以外の組み込み型です。length は、表 5-1 が示すように必要な記
憶領域のバイト数です。また、言語要素名の後に *length を使用することも
できます。言語要素が後に配列形状指定を持つ配列であれば、配列形状指定の
後に *length を使用できます。*length を言語要素名とともに指定すると、
kind-selector で指定した長さが無効になります。
kind-selector
次のとおりです。
([KIND=]scalar-int-init-expr)
第5章
103
データ型およびデータオブジェクト
組み込み型
scalar-int-init-expr
使用可能な種別パラメータの 1 つとして評価しなければならないスカラ整数初
期値式 ( 表 5-1 の項を参照 )。初期値式については、86 ページの「初期値式」
の項を参照してください。
char-selector
type-spec が文字型のときに、文字変数の長さと種別を指定します。詳細は、
295 ページの「CHARACTER」の項を参照してください。
attribute-spec
表 5-2 に示す 1 つ以上の属性です。属性のなかには、他の属性と互換性がない
ものがあります。互換性がある属性と、すべての属性についての詳細は、265
ページの第 10 章 「HP Fortran 文」を参照してください。
entity-list
次の形式の言語要素名をコンマで区切った並びです。
•
var-name[(array-spec)] [*char-len] [= init-expr]
•
function-name[(array-spec)] [*char-len]
ここで array-spec については、54 ページの「配列宣言」の項を参照してく
ださい。char-len については、第 10 章の CHARACTER 文の説明を、
init-expr については、86 ページの「初期値式」の項を参照してください。
init-expr を entity に含める場合は、2 重コロン (::) 区切り記号も使用す
る必要があります。
規格の拡張により、HP Fortran ではスラッシュを使用して init-expr を区切
ることが許されます。この形式の初期化には、2 重コロン区切り記号、配列構
成子、および構造体構成子は許されません。配列は、その配列の要素と結合し
た列である値の並びを定義することによって初期化できます。
表 5-2 型宣言文中の属性
属性
説明
AUTOMATIC
手続き変数を自動にします ( 拡張機能 )。
ALLOCATABLE
実行中に割り付け可能な配列を宣言します。
104
第5章
データ型およびデータオブジェクト
組み込み型
表 5-2 型宣言文中の属性 ( 続き )
属性
説明
DIMENSION(array-spec)
配列を宣言します。54 ページの「配列宣言」
の項を参照してください。entity-list に
array-spec も含まれている場合は、
DIMENSION 属性が無効になります。
EXTERNAL
別のプログラム単位に配置される副プログラ
ムまたは初期値設定プログラムを指定しま
す。
INTENT
仮引き数の使用方法を定義します。
INTRINSIC
個別組み込み関数を実引き数として使用でき
るようにします。
OPTIONAL
実引き数の存在を省略可能として宣言しま
す。
PARAMETER
名前付き定数を定義します。
POINTER
言語要素をポインターとして宣言します。
PRIVATE
モジュール外での参照を禁止します。
PUBLIC
モジュール外で参照可能にします。
SAVE
手続きの呼び出し間で、言語要素の値が保持
されることを保証します。
STATIC
手続きの呼び出し間で、言語要素の値が保持
されることを保証します ( 拡張機能 )。
TARGET
言語要素をポインターの指示先として使用可
能にします。
VOLATILE
非同期プロセス間でデータを共有可能にしま
す ( 拡張機能 )。
次の例は、型宣言文を示しています。
! Default, KIND=4, integers i j k.
INTEGER i, j, k
第5章
105
データ型およびデータオブジェクト
組み込み型
! Using optional separator.
INTEGER :: i,j,k
! An 8-byte initialized integer.
INTEGER(KIND=8) :: i=2**40
! 10 element array of 8-byte integers.
INTEGER(8),DIMENSION(10) :: i
! Using an array constructor for initialization.
REAL, DIMENSION(2,2):: a = RESHAPE((/1.,2.,3.,4./),(/2,2/))
! Initialized complex.
COMPLEX :: z=(1.0,2.0)
! SYNTAX ERROR - no :: present.
COMPLEX z=(1.0,2.0)
! ILLEGAL
! Initialization using the HP slash extension
INTEGER i/1/,j/2/
REAL a(2,2)/1.1,2.1,1.2,2.2/ ! a(i,j)=i.j
! One character (default length).
CHARACTER(KIND=1) :: c
! A 10-byte character string.
CHARACTER(LEN=10) :: c
! Length can be * for a named constant; title is a 13-byte
!
character string
CHARACTER(*),PARAMETER :: title=’Ftn 90 MANUAL’
! next four declarations are all equivalent, but only the last
!
is standard-conforming
REAL*8 r8(10)
REAL r8*8(10)
REAL r8(10)*8
REAL(8), DIMENSION(10) :: r8
! If the statement is in a subprogram, n must be known at entry;
!
otherwise, it must be a constant.
CHARACTER(LEN=n) :: c
SUBROUTINE x(c)
CHARACTER*(*) :: c
! c assumes the length of the actual argument.
END
106
第5章
データ型およびデータオブジェクト
組み込み型
! A single entity, of derived type node.
TYPE(node):: list_element
! Declaration and initialization of a user-defined variable
TYPE(coord) :: origin = coord(0.0,0.0)
暗黙の型宣言
Fortran 90 では、事前に型宣言文で宣言しなくても言語要素を使用できます。コンパイラでは、
暗黙の型宣言の規則が適用され、言語要素の型が判別されます。デフォルトの暗黙の型宣言規則
は、次のとおりです。
•
英字 A ~ H または O ~ Z で始まる名前は、実数型です。
•
英字 I ~ N で始まる名前は、整数型です。
Fortran 90 は、大文字と小文字を区別しない言語なので、これと同じ規則が大文字と小文字に適
用されます。
次の文の場合、
DIMENSION a(5), i(10)
k = 1
b = k
a および b が基本実数型、i および k が基本整数型として暗黙的に宣言されています。
第 10 章で後述するように、IMPLICIT 文を使用すると、暗黙の型宣言のデフォルト規則を変更
または取り消すことができます。IMPLICIT 文は、明示の型宣言文によって無効にされる場合を
除き、それが表示される有効域内で有効です。
IMPLICIT NONE 文を使用することによって、暗黙の型宣言規則を無効にして、強制的に明示の
型宣言にできます。つまり、型宣言文で言語要素を宣言できます。この文が有効域に含まれてい
る場合は、その域内のすべての名前の型を明示的に宣言しなければなりません。また、
+implicit_none オプションを使用してコンパイルすると、ソースファイル中のすべての名前に
対して明示の型宣言を強制できます。このオプションには、ソースファイル中のすべてのプログ
ラム単位に IMPLICIT NONE 文を取り込む効果があります。
IMPLICIT 文および IMPLICIT NONE 文についての詳細は、265 ページの第 10 章 「HP Fortran
文」を参照してください。+implicit_none オプションについては、『HP Fortran プログラマー
ガイド』を参照してください。
第5章
107
データ型およびデータオブジェクト
組み込み型
定数
定数には、定数表現と名前付き定数があります。定数表現は、値を表す文字の並びです。名前付
き定数は初期化済みの変数であり、PARAMETER 属性を持っています。本項では、各組み込み型
の定数表現の形式について説明します。名前付き定数と PARAMETER 文および属性についての詳
細は、第 10 章を参照してください。
整定数
符号付き整数の定数表現の形式は、次のとおりです。
[sign]digit-string[_kind-parameter]
sign
+ または - です。
digit-string
この形式は次のとおりです。
digit[digit]...
kind-parameter
次のいずれかです。
•
digit-string
•
スカラ整定数名
次の例は、整定数を示します。
-123
123_1
123_ILEN
最後の例で、ILEN は、種別パラメータとして使用される名前付き整定数です。この定数の値は、
1, 2, 4, または 8 でなければなりません。
BOZ 定数
Fortran では、DATA 文に 2 進、8 進、または 16 進形式の定数を含めることができます。この種
の定数を BOZ 定数と呼びます。
2 進定数の形式は、次のとおりです。
leading-letter{'digit-string'|"digit-string"}
108
第5章
データ型およびデータオブジェクト
組み込み型
ここで leading-letter は、B, O, または Z のいずれか 1 文字で、それぞれ 2 進、8 進、または
16 進の基数を示します。digit-string は、次のように基数を表す数字で構成する必要があり
ます。
•
2 進 : 0 および 1。
•
8 進 : 0 ~ 7。
•
16 進 : 0 ~ 9, および A ~ F。英字は、大文字でも小文字でもかまいません。
次の 3 つの DATA 文では、BOZ 定数を使用して i, j, および k を 10 進値 74 に初期化していま
す。
INTEGER i, j, k
DATA i/B'01001010'/
DATA j/O'112'/
DATA k/Z'4A'/
HP Fortran では、拡張機能として後続の O を持つ 8 進定数と、後続の X を持つ 16 進定数を使
用できます。次の DATA 文では、j および k を 10 進値 74 に初期化しています。
DATA j/'112'O/
DATA k/'4A'X/
また、HP Fortran では、DATA 文以外の文脈で BOZ 定数を使用することもできます。110 ペー
ジの「型なし定数」の項を参照してください。
ホレリス定数
ホレリス定数の形式は、次のとおりです。
lenHstring
ここで len は、定数中の文字数で、string には len 文字が含まれます。この定数値は、その文
字の ASCII 値によって生成されるバイトパターンの値です。
HP Fortran では、拡張機能としてホレリス定数を BOZ 定数と同じ文脈 (110 ページの「型なし
定数」の項を参照 ) や、文字列が有効な場所に使用できます。len が string 中の文字数より大
きければ、定数の右側が空白文字で補われます。len が string 内の文字数より小さければ、定
数の右側が切り捨てられます。
ホレリス定数が変換関数 INT および LOGICAL の引き数として指定される場合、種別パラメータ
は、定数の長さが 1 バイトであれば KIND=1、2 バイトであれば KIND=2、3 または 4 バイトであ
れば KIND=4、4 より大きければ KIND=8 となります。
次の例は、ホレリス定数を示しています。
第5章
109
データ型およびデータオブジェクト
組み込み型
3HABC
5HABCbb !bb = two space characters, making the length equal to 5
型なし定数
HP Fortran では、2 進、8 進、および 16 進定数 (BOZ) の使用が Fortran 90 規格の規定を超え
て拡張されます。108 ページの「BOZ 定数」の項を参照してください。HP Fortran では、数値
型または論理型の組み込み定数表現が許される場合に、BOZ 定数を型なし定数として使用でき
ます。
可能であれば、型なし定数に結びつけられた型は、定数の大きさとそれが指定される文脈から決
まります。2 項演算子の一方の演算対象として使用する場合、他方の演算対象の型が想定されま
す。代入式の右辺として使用すると、左辺にあるオブジェクトの型を想定します。構造体構成子
中の値を定義するために使用すると、対応する成分の型を想定します。配列構成子中に使用する
と、その構成子の最初の要素の型を想定します。
また、次の規則と制限条項も適用されます。
•
文脈から型が決定されない場合は、警告が発行され、定数に次のいずれかの型が結びつけら
れます。
— 定数が 1 ~ 4 バイトを占めている場合は INTEGER(4)
— 定数が占めるバイト数が 4 バイトを超えている場合は、INTEGER(8)
先行するゼロは、大きさの判別時に意味を持つものと見なされます。
たとえば、Z'00000001' は INTEGER(4) となり、Z'000000001' は INTEGER(8) となりま
す。
•
コンパイラは、Z'12345678123456781234' のように、8 バイト以上なければ表せない定数
を切り捨てて、警告を発行します。その結果、切り捨て後の値はソースコードで指定された
ものとは異なることになります。
•
文脈によって決定された型の大きさが実定数の大きさと一致しなければ、その定数は左側に
ゼロを付けて拡張されるか、または必要に応じて左側から切り捨てられます。
•
単一の定数が複素数型の言語要素に割り当てられると、実部のみを表すものと見なされ、複
素数型の言語要素と同じ長さを持つ実数型となります。
•
コンパイラが総称手続きを解決する場合、引き数の並びにおける BOZ 定数は、論理型または
数値型の仮引き数と一致するものと見なされます。このため、曖昧な引用が発生する場合が
あります。総称手続きについては、181 ページの「総称手続き」の項を参照してください。
•
組み込み型変換手続きを除き、組み込み手続きの実引き数として使用する BOZ 定数は整数型
になります。
110
第5章
データ型およびデータオブジェクト
組み込み型
•
組み込み関数 INT, LOGICAL, REAL, DBLE, DREAL, CMPLX, および DCMPLX を使用すると、BOZ 定
数を強制的に特定の型にすることができます。BOZ 定数をこれらの関数の引き数として指定
すると、その引き数に想定される型は次のようになります。
— 関数 INT および LOGICAL の場合、想定される型は定数が 1 ~ 4 バイトを占めている場合は
( それぞれ ) INTEGER(KIND=4) および LOGICAL(KIND=4) となり、それ以外は
INTEGER(KIND=8) および LOGICAL(KIND=8) となります。
— 関数 REAL, DBLE, DREAL, CMPLX, および DCMPLX の場合、定数が 1 ~ 4 バイトを占めていれ
ば REAL(KIND=4) 型の引き数となり、5 ~ 8 バイトを占めていれば REAL(KIND=8) 型、
それ以外の場合は REAL(KIND=16) 型となります。
次の例は、BOZ 定数の拡張使用を示しています。
! The value is 20 (constant treated as INTEGER(2) and
!
truncated on the left).
10_2 + Z'1000A'
LOGICAL(2) :: lgl2
! Constant treated as LOGICAL(2), the type of the variable.
lgl2 = B'1'
! Constant treated as INTEGER(4); IABS is used.
ABS(Z'41')
! Constant treated as REAL(8) as it is more than 4 bytes.
REAL(Z'3FF0000000000000')
実定数
符号付き実数の定数表現は、次のいずれかです。
[sign]digit-string[[.[digit-string]]][exponent][_kind-parameter]
exponent
この形式は次のとおりです。
exponent-letter [sign] digit-string
exponent-letter
文字 E, D, または Q です。Q は、HP Fortran 拡張機能です。
sign および digit-string
108 ページの「整定数」の項を参照してください。
第5章
111
データ型およびデータオブジェクト
組み込み型
種別パラメータが存在しない場合や、exponent letter E が存在する場合は、デフォルトの種
別表現が使用されます。表 5-1 を参照してください。exponent letter が D であれば種別パラ
メータは 8、exponent letter が Q であれば種別パラメータは 16 になります。exponent と種
別パラメータの両方を指定する場合は、exponent letter を E にする必要があります。
次の例は、実定数を示しています。
3.4E-4
!0.00034
42.E2
!4200
1.234_8
!1.234 with approximately 15 digits precision
-2.53Q-300
!-2.53 x 10 to the -300th, with approximately 34
!
digits precision
複素定数
複素数型の定数表現の形式は、次のとおりです。
(real-part, imaginary-part)
real-part および imaginary-part
それぞれ次のいずれかです。
•
signed-integer-literal-constant
•
signed-real-literal-constant
複素数値の種別パラメータは、より大きい記憶領域要件を持つ部分の種別パラメータに対応しま
す。
次の例は、複素定数を示しています。
(1.0E2, 2.3E-2)
!default complex value
(3.0_8,4.2_4)
!complex value with KIND=8
文字定数
文字定数表現は、次のいずれかです。
[kind-parameter_]'character-string'
[kind-parameter_]"character-string"
かっこ類は、定数の一部ではありません。単一引用符で区切った文字列中に単一引用符を使用す
る必要があれば、2 個の単一引用符を使用します。これと同じ規則は、二重引用符にも適用され
ます。
112
第5章
データ型およびデータオブジェクト
組み込み型
次の例は、文字定数を示しています。
1_'A.N.Other'
'Bach''s Preludes'
! actual constant is:
Bach's Preludes
""
! a zero length constant
C 言語構文との互換性を確保するために、HP Fortran では文字列中でエスケープ文字として
バックスラッシュ文字 (\) を使用できます。この機能を使用可能にするには、+escape オプショ
ンを使用する必要があります。このオプションが使用可能になっている場合、コンパイラでは
バックスラッシュ文字が無視され、後続文字が代替値に置き換えられるか、またはその文字が引
用符付きの値として解釈されます。次に例を示します。
'ISN\'T'
有効な文字列になるのは、+escape オプションを使用してコンパイルした場合です。
バックスラッシュは、文字列の長さには含まれません。また、+escape オプションが使用可能に
なっている場合に、行末に \& がある場合、アンパサンドは継続指示として処理されません。
表 5-3 は、認識されるエスケープシーケンスを示しています。
表 5-3 エスケープ文字
エスケープ文字
効果
\n
改行
\t
水平タブ
\v
垂直タブ
\b
バックスペース
\f
改ページ
\0
ヌル
\'
アポストロフィ ( 文字列は終了しません )
\"
二重引用符 ( 文字列は終了しません )
\\
\
\x
x。ここで x は、1 以外の文字です。
第5章
113
データ型およびデータオブジェクト
組み込み型
論理定数
論理定数表現の形式は、次のとおりです。
{.TRUE.|.FALSE.}[_kind-parameter]
次の例は、論理定数を示しています。
.TRUE.
.FALSE._2
規格に合致したプログラムでは、論理値 .TRUE. は 1 で示され、.FALSE. は 0 で示されます。論
理演算対象を持つ算術演算子を必要とし、規格に準拠していないプログラムでは、論理変数に 0
または 1 以外の値を割り当てることができます。この場合、ゼロ以外の値は .TRUE. で、値ゼロ
のみが .FALSE. になります。
文字部分列
文字部分列は、文字列の連続する部分集合です。部分列は、文字列中での開始位置と終了位置に
よって次のような形式で定義されます。
string ([ starting-position ] : [ ending-position ])
starting-position
スカラ式です。starting-position を省略すると、値 1 と見なされます。
starting-position は、部分列の長さが 0 でない限り 1 以上でなければなり
ません。
ending-position
スカラ整数式です。ending-position を省略すると、文字列の長さの値が想
定されます。
部分列の長さは、次のように計算されます。
MAX (ending-position - starting-position + 1, 0)
次の例 substring.f90 は、部分列の基本演算を示しています。
例 5-1
substring.f90
PROGRAM main
CHARACTER(LEN=15) :: city_name
city_name = 'CopXXXagen'
PRINT *, “The city's name is: “, city_name
114
第5章
データ型およびデータオブジェクト
組み込み型
city_name(4:6) = 'enh' ! assign to a substring of city_name
PRINT *, “The city's name is: “, city_name
END PROGRAM main
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 substring.f90
$ a.out
The city’s name is: CopXXXagen
The city’s name is: Copenhagen
文字列配列の部分列演算については、63 ページの「部分配列」の項を参照してください。
自動割り付けデータオブジェクトとしての文字列
自動割り付けデータオブジェクトには、自動割り付け配列 (54 ページの「形状明示配列」の項を
参照 )、または副プログラムに対して局所的で大きさが不定の文字列を使用できます。文字列の
大きさは、副プログラムの呼び出し時に決定され、呼び出しごとに異なります。
自動割り付け文字列の禁止事項は、次のとおりです。
•
仮引き数であってはなりません。
•
SAVE 属性で宣言してはいけません。
•
型宣言文や DATA 文で初期化してはなりません。
次の例 swap_names.f90 は、自動割り付け文字列の使用方法を示しています。
例 5-2
swap_names.f90
PROGRAM main
! actual arguments to pass to swap_names
CHARACTER(6) :: n1 = "George", n2 = "Martha"
CHARACTER(4) :: n3 = "pork", n4 = "salt"
PRINT *, "Before: n1 = “, n1, "
CALL swap_names(n1, n2)
PRINT *, "After: n1 = “, n1, "
n2 = “, n2
PRINT *, "Before: n3 = “, n3, "
CALL swap_names(n3, n4)
PRINT *, "After: n3 = “, n3, "
END PROGRAM main
n4 = “, n4
第5章
n2 = “, n2
n4 = “, n4
115
データ型およびデータオブジェクト
組み込み型
! swap the arguments - two character strings of the same length
SUBROUTINE swap_names (name1, name2)
CHARACTER(*) :: name1, name2 ! the arguments
! declare another character string, temp, to be used in the
!
exchange. temp is an automatic data object, its length
!
can vary from call to call
CHARACTER(LEN(name1)) :: temp
! the exchange
temp = name1
name1 = name2
name2 = temp
END SUBROUTINE swap_names
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 swap_names.f90
$ a.out
Before: n1 = George n2
After: n1 = Martha n2
Before: n3 = pork n4 =
After: n3 = salt n4 =
116
= Martha
= George
salt
pork
第5章
データ型およびデータオブジェクト
構造型
構造型
構造型は、組み込み型の言語要素 (100 ページの「組み込み型」の項を参照 ) や、事前に定義さ
れた構造型の言語要素で構成される利用者定義の型です。たとえば、次の例は、2 つの実数から
なる座標を変更するための構造型の定義を示しています。
TYPE coord
REAL :: x,y
END TYPE coord
x および y は、構造型 coord の成分です。
次の文は、構造型 coord の 2 つの変数 (a および b) を宣言しています。
TYPE(coord) :: a, b
次の文では、代入文のように、a の値を b に複写しています。
a = b
a および b の成分は、a%x, a%y, b%x, および b%y として引用されます。Fortran 90 の利用者定義
演算機能を使用すると、標準演算子を拡張して構造型を処理できます。たとえば、+ および = 演
算子が構造型演算対象の演算を実行するように再定義されている場合、
a = a + b
この文は次の文と等価になります。
a%x = a%x + b%x;
a%y = a%y + b%y
以降の後の項では、次の項目について説明します。
•
構造型を定義する構文
•
連続型
•
構造体構成子
•
構造体成分の引用
•
構造型オブジェクトのデータの割り付け境界
最後の項では、構造型のさまざまな機能を示す見本プログラムを示します。
構造型を定義する
構造型を定義する形式は、次のとおりです。
第5章
117
データ型およびデータオブジェクト
構造型
TYPE [[, access-spec] ::] type-name
[private-sequence-statement] ...
comp-definition-statement
[comp-definition-statement] ...
END TYPE [type-name]
access-spec
次のいずれかです。
•
PRIVATE
•
PUBLIC
access-spec は、定義をモジュール中に書く場合にのみ使用できます。モ
ジュールについての詳細は、188 ページの「モジュール」の項を参照してくだ
さい。PRIVATE 属性および PUBLIC 属性については、第 10 章を参照してくだ
さい。
type-name
定義する型の名前です。type-name を組み込み型の名前と競合させてはいけ
ません。
private-sequence-statement
PRIVATE 文または SEQUENCE 文です。PRIVATE 文は、定義をモジュール中で
書く場合にのみ使用できます。SEQUENCE 文についての詳細は、119 ページの
「列構造型」の項を参照してください。この 2 つの文についての詳細は、第 10
章を参照してください。
comp-definition-statement
形式は次のとおりです。
type-spec [[comp-attr-list]::]comp-decl
この構文では、初期化は実行できないので注意してください。
comp-attr-list
DIMENSION 属性および POINTER 属性しか指定できません。POINTER 属性を持
たない成分配列には、定数上下限と明示上下限を指定する必要があります。成
分が定義する型と同じ構造型であれば、成分には POINTER 属性が必要です。
この 2 つの属性についての詳細は、第 10 章を参照してください。
118
第5章
データ型およびデータオブジェクト
構造型
comp-declaration
形式は次のとおりです。
comp-name [(array-spec)][*char-len]
ここで array-spec は、54 ページの「配列宣言」の項で後述する配列仕様で
す。char-len は、comp-name が長さを指定する文字型の場合に使用します。
列構造型
117 ページの「構造型を定義する」の項で前述したように、SEQUENCE 文は構造型の定義に使用
できます。構造型の変数に記憶領域が割り付けられる場合は、構造型の定義に SEQUENCE 文を指
定することによって、コンパイラは記憶列内のすべての成分を定義時と同じ順序で配置します。
この種の構造型を、列構造型と呼びます。
列構造型は、共通ブロック中や EQUIVALENCE 結合する集合内で使用できます。規格には、
連続型成分の数値型または文字型に関する要件が規定されています。拡張機能として、HP
Fortran では、構造型の定義には SEQUENCE 文を含めなければならないという条件を除き、成分
の型に制限はありません。列構造型についての詳細は、464 ページの「SEQUENCE」の項を参
照してください。
構造体成分
構造型オブジェクトの成分は、他の変数と同様に、式や代入文の左辺で、または手続きの引き数
として引用され使用されます。スカラでも配列でも、それ自体が構造型のオブジェクトでもかま
いません。成分名は、それが宣言されている構造型オブジェクトと同じ有効範囲を持ちます。
構造体成分を引用するには、次の形式を使用します。
parent-name[%comp-name]...%comp-name
parent-name
構造型です。構造体成分の引用で、この部分は親であり、成分選択子演算子
(%) によって comp-name に結合されます。右隣の親の結合先となる
comp-name 成分は、parent-name の成分でなければなりません。
parent-name が INTENT, TARGET, または PARAMETER の属性を持つ場合、引用
される構造体成分 ( 右端の comp-name) にも、その属性が必要です。
comp-name
成分名です。構造体成分の引用に複数の comp-name が含まれる場合、その引
用先は右端の comp-name となります。引用に複数の comp-name が含まれる場
合は、それぞれ ( 右端のものを除く ) が構造型のオブジェクトでなければなら
ず、その右隣の comp-name は、宣言されている成分のいずれかでなければな
りません。
第5章
119
データ型およびデータオブジェクト
構造型
parent-name および comp-name が配列の場合は、それぞれの後に section-subscript-list
をかっこで囲んで指定できます。section-subscript-list の構文については、63 ページの
「部分配列」の項を参照してください。67 ページの「配列値を持つ構造体成分の引用」の項で説
明するように、規格では配列値である構造体成分の引用には特定の制限条項が適用されます。
構造型の定義に同じ構造型の成分が含まれている場合、その成分には POINTER 属性が必要です。
次の例では、同じ構造型の成分 (next) を含む構造型 node を定義しています。
TYPE node ! for use in a singly linked list
INTEGER :: value
TYPE(node), POINTER :: next ! must have the POINTER attribute
END TYPE node
構造型のオブジェクトを宣言する
構造型のオブジェクトを宣言するには、次のように TYPE 文を使用します。
TYPE (type-name) [[, attrib-list] :: ] entity-list
ここで type-name, attrib-list, および entity-list はいずれも、組み込み型のオブジェクト
の宣言に使用する型宣言文の場合と同じ意味を持ちます。102 ページの「組み込み型の型宣言」
の項を参照してください。詳細は、489 ページの「TYPE ( 定義 )」の項を参照してください。
構造体構成子
構造体構成子によって、構造型のスカラ値が構成されます。この値は、型の各成文の値の並びで
構成されます。構造体構成子の構文は、次のとおりです。
type-name (expression-list)
type-name
構造型の名前。この名前は事前に定義しておく必要があります。
expression-list
式をコンマで区切った並び。この式の数、順序、および次元数は、type-name
の成分のものと一致しなければなりません。式については、78 ページの「式」
の項と 85 ページの「特殊形式の式」の項を参照してください。
構造体構成子の使用には、次の制限条項が適用されます。
•
120
成分が構造型であれば、文字式の構造体構成子を使用して構造型成分の値を指定する必要が
あります。
第5章
データ型およびデータオブジェクト
構造型
•
成分が配列であれば、その配列を満たす expression-list で配列構成子を指定する必要があ
ります。配列構成子についての詳細は、70 ページの「配列構成子」の項を参照してくださ
い。
•
成分がポインターであれば、expression-list 中の対応する式は、許容される指示先として
評価されなければなりません。
構造型オブジェクトのデータの割り付け境界
構造型オブジェクトのデータの割り付け境界は、最も限定的な境界要求を持つ成分と同じです
( この規則は、記録にも適用されます )。自然なデータの割り付け境界を保証するために、コンパ
イラは構造型の配列の各要素にパディングを追加することがあります。
次の例は、構造型の配列のデータの割り付け境界を示しています。この構造型の定義には、メモ
リーで成分が配置される順序が定義通りであることを保証するために、SEQUENCE 文が含まれて
います。SEQUENCE 文は、データの割り付け境界には影響しません。
! definition of a derived type
TYPE t
SEQUENCE
CHARACTER(LEN=7) :: c
INTEGER(2) :: i2
REAL(8) :: r8
REAL(4) :: r4
END TYPE t
! declaration of an array variable of derived type
TYPE (t), DIMENSION(5) :: ta
t の各要素には、表 5-4 に示すように記憶領域が割り付けられます。t の最初の成分は、8 の倍
数であるアドレスから始まります。後続の 4 つの空白を補うバイトは、配列の各要素で、r8 の
割り付け境界を保持するために必要です。
表 5-4 構造体記憶領域の例
成分
バイトオフセット
長さ
c
0
7
i2
8
2
r8
16
8
r4
24
4
第5章
121
データ型およびデータオブジェクト
構造型
表 5-4 構造体記憶領域の例 ( 続き )
成分
バイトオフセット
28
パディング
長さ
4
構造型の例
次の例 traffic.f90 は、構造型を定義し、この型の変数を宣言し、構造体構成子を使用して変数の
値を指定し、他の手続きへの引き数として変数を渡し、構造体成分を引用する方法を示していま
す。構造型は、参照結合によってアクセス可能になるようにモジュールで定義されています。
モジュールと USE 文についての詳細は、188 ページの「モジュール」の項を参照してください。
MODULE 文および USE 文については、第 10 章も参照してください。
例 5-3
traffic.f90
PROGRAM traffic
! Illustrates derived types: defines a derived type, declares an
! to array variable of derived type, uses a structure constructor
! assign to its components, and passes a component which is
! itself another derived type to a subprogram.
! Make the definition of the derived type called hours accessible
!
to this program unit
USE hours_def
LOGICAL :: busy
INTEGER :: choice
! Define another derived type that uses hours as a component
TYPE hiway
INTEGER :: rte_num
TYPE(hours) :: busy_hours
END TYPE hiway
! Declare an array of derived-type structures.
TYPE(hiway), DIMENSION(3) :: route
! Use the structure constructor to specify values for each
! element of route
route(1) = hiway(128, hours(.TRUE., .FALSE.))
122
第5章
データ型およびデータオブジェクト
構造型
route(2) = hiway(93, hours(.FALSE., .TRUE.))
route(3) = hiway(97, hours(.FALSE., .FALSE.))
PRINT *, 'What road do you want to travel?'
PRINT *, '1. Rte. 128'
PRINT *, '2. Rte. 93'
PRINT *, '3. Rte 97'
READ *, choice
! Pass the busy_hours component of the selected route to
! the function busy.
IF (busy(route(choice)%busy_hours)) THEN
PRINT *,’Heavy commute on rte.’, route(choice)%rte_num
ELSE
PRINT *,’Easy commute on rte.’, route(choice)%rte_num
END IF
END PROGRAM traffic
LOGICAL FUNCTION busy(when)
! This function accepts a derived-type argument whose definition
! is defined in the module hours_def, made accessible here by
! use association. It returns .TRUE. or .FALSE., depending on
! on the value of the user-selected component of the argument.
! Make the definition of hours accessible to this function.
USE hours_def
TYPE(hours) :: when
INTEGER :: choice
PRINT *, 'When do you want to commute:'
PRINT *, '1. Morning'
PRINT *, '2. Evening'
READ *, choice
! Find out if the route is busy at that time of day.
IF (choice .EQ. 1) THEN
busy = when%am
ELSE
busy = when%pm
第5章
123
データ型およびデータオブジェクト
構造型
END IF
END FUNCTION busy
MODULE hours_def
! Define a derived type, which will be passed as an argument.
TYPE hours
LOGICAL :: am
LOGICAL :: pm
END TYPE hours
END MODULE hours_def
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 traffic.f90
$ a.out
What road do you want to travel?
1. Rte. 128
2. Rte. 93
3. Rte 97
1
When do you want to commute:
1. Morning
2. Evening
1
Heavy commute on rte. 128
124
第5章
データ型およびデータオブジェクト
ポインター
ポインター
Fortran 90 は、他の言語に比べてポインターの型が豊富です。Fortran 90 のポインターには他
の変数 ( 指示先 ) のアドレスが保持されますが、指示先に関する追加情報も保持されます。この
ため、ポインターを宣言するには、POINTER 属性だけでなく、ポイントできる指示先の型、種別
パラメータ、および ( 指示先が配列の場合は ) 次元数も必要です。
ポインターが POINTER 属性を持つ配列として宣言されている場合、このポインターは配列ポイ
ンターになります。58 ページの「形状無指定配列」の項で説明するように、配列ポインターの
宣言では、上下限ではなく次元数を指定します。次の例は、配列ポインター ptr の宣言を示して
います。
REAL(KIND=16), POINTER, DIMENSION(:,:) :: ptr
配列ポインターに代入可能にするには、TARGET 属性を指定して指示先を宣言し、配列ポイン
ターと同じ型、種別パラメータ、および次元数を指定する必要があります。ptr が前述のように
宣言されている場合、次の文は正当です。
! declare a target with the same type, kind parameter, and
!
rank as ptr
REAL(KIND=16), TARGET, DIMENSION(4,3) :: x
...
ptr => x ! assign x to ptr in a pointer assignment statement
代入文の実行後に、ptr または x を使用し、実際には ptr を x の別名にして、同じ記憶領域に
アクセスすることができます。
また、ALLOCATE 文を使用してポインターに記憶領域を割り付けることもできます。その記憶領
域を終了後に解放するには、DEALLOCATE 文を使用します。ポインターに記憶領域を割り付ける
場合に指示先のオブジェクトは不要ですが、ポインター宣言では型、種別パラメータ、および (
配列を割り付ける場合は ) 次元数を指定する必要があります。ALLOCATE 文では、次元の上下限
を指定します。次の例は、ptr に記憶領域を割り付けるために使用する ALLOCATE 文を示してい
ます。
INTEGER :: j = 10, k = 20
...
! allocate storage for ptr
ALLOCATE (ptr(j,k))
Fortran 90 配列の記述法を使用して、ptr を配列の場合と同様に引用できます。
第5章
125
データ型およびデータオブジェクト
ポインター
HP Fortran では、拡張機能としてクレイ形式のポインター変数が提供されます。詳細は、第 10
章を参照してください。ポインターのさまざまな側面については、次の各項を参照してくださ
い。
•
配列ポインターの割り付けについては、58 ページの「配列ポインター」の項を参照してくだ
さい。
•
ポインター代入によってポインターを指示先と接続する方法については、92 ページの「ポイ
ンター代入」の項を参照してください。
•
ALLOCATE 文と DEALLOCATE 文、POINTER 属性と TARGET 属性についての詳細は、265 ページの
第 10 章 「HP Fortran 文」を参照してください。
次の項では、プログラムの例を初めとするポインターの状態について説明します。
ポインター結合状態
ポインター演算は、ポインターの状態に依存しなければ実行できないものがあります。ポイン
ターの状態は結合状態と呼ばれ、次の 3 つの形式があります。
不定状態
ポインターが宣言されているプログラム単位に入る時点、または次の場合に、
ポインターの状態は不定です。
•
その指示先が割り付けられたことがない場合
•
その指示先が解放されていた場合 ( ポインター経由を除く )
•
指示先が有効範囲外になり、結果的に不定になる場合
結合状態が不定の場合、ポインターを引用または解放してはなりません。無効
にするか、指示先を代入するか、または ALLOCATE 文を使用して記憶領域を割
り付けることができます。
結合状態
ポインターに ALLOCATE 文を使用して記憶領域が割り付けられている場合、ま
たは指示先が代入される場合、そのポインターは結合状態になります。指示先
が割り付け可能であれば、現在は割り付けられていなければなりません。
結合状態が「結合している」状態であれば、そのポインターは引用、解放、無
効化したり、ポインター代入したりできます。
空状態
126
ポインターが NULLIFY 文を使用して無効にされているか、DEALLOCATE 文の
使用または空状態のポインターへの代入によって解放される場合、そのポイン
ターの状態は空状態になります。
第5章
データ型およびデータオブジェクト
ポインター
結合状態が空状態の場合は、不定状態の場合と同じ制限条項が適用されます。
つまり、ポインターを引用または解放することはできませんが、無効にした
り、指示先を代入したり、ALLOCATE 文を使用して記憶領域を割り付けること
はできます。
ASSOCIATED 組み込み関数を使用すると、ポインターの結合状態を判別できます。この組み込み
については、509 ページの第 11 章 「組み込み手続き」を参照してください。
ポインターの例
次の例 ptr_sts.f90 は、ASSOCIATED 組み込み関数を呼び出してポインターの状態を判別するな
ど、さまざまなポインター演算を示しています。
例 5-4
ptr_sts.f90
PROGRAM main
! This program performs simple pointer operations, including
! calls to the ASSOCIATED intrinsic to determine status.
!
! Declare pointer as a deferred shape array with POINTER
! attribute.
REAL, POINTER :: ptr(:)
REAL, TARGET :: tgt(2) = (/ -2.2, -1.1 /) ! initialize target
PRINT *, "Initial status of pointer:"
call get_ptr_sts
ptr => tgt
! pointer assignment
PRINT *, "Status after pointer assignment:"
call get_ptr_sts
PRINT *, "Contents of target by reference to pointer:", ptr
! use an array constructor to assign to tgt by reference to ptr
ptr = (/ 1.1, 2.2 /)
PRINT *, “Contents of target after assignment to pointer:”, tgt
NULLIFY(ptr)
PRINT *, "Status after pointer is nullified:"
call get_ptr_sts
ALLOCATE(ptr(5))
第5章
! allocate pointer
127
データ型およびデータオブジェクト
ポインター
PRINT *, "Status after pointer is allocated:"
! To learn if pointer is allocated, call the ASSOCIATED
! intrinsic without the second argument
IF (ASSOCIATED(ptr)) PRINT *, " Pointer is allocated."
ptr = (/ 3.3, 4.4, 5.5, 6.6, 7.7 /)
! array assignment
PRINT *, ‘Contents of array pointer:’, ptr
DEALLOCATE(ptr)
PRINT *, “Status after array pointer is deallocated:"
IF (.NOT. ASSOCIATED(ptr)) PRINT *, " Pointer is deallocated."
CONTAINS
! Internal subroutine to test pointer’s association status.
! Pointers can be passed to a procedure only if its interface
! is explicit to the caller. Internal procedures have an
! explicit interface. If this were an external procedure,
! its interface would have to be declared in an interface
! block to be explicit.
SUBROUTINE get_ptr_sts
IF (ASSOCIATED(ptr, tgt)) THEN
PRINT *, " Pointer is associated with target."
ELSE
PRINT *, " Pointer is disassociated from target."
END IF
END SUBROUTINE get_ptr_sts
END PROGRAM main
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 ptr_sts.f90
$ a.out
Initial status of pointer:
Pointer is disassociated from target.
Status after pointer assignment:
Pointer is associated with target.
Contents of target by reference to pointer: -2.2 -1.1
Contents of target after assignment to pointer: 1.1 2.2
Status after pointer is nullified:
Pointer is disassociated from target.
Status after pointer is allocated:
Pointer is allocated.
128
第5章
データ型およびデータオブジェクト
ポインター
Contents of array pointer: 3.3 4.4 5.5 6.6 7.7
Status after array pointer is deallocated:
Pointer is deallocated.
第5章
129
データ型およびデータオブジェクト
境界の正しくないデータの問題の解決
境界の正しくないデータの問題の解決
以下に、境界の正しくないデータの問題に対処する方法を示します。
Itanium® ベースのアプリケーションの場合
簡単に修正するには、次の呼び出しをメインプログラムに追加します。
call allow_unaligned_data_access( )
次に、割り付け境界の問題を実行時に補正するライブラリを追加してリンクします。
-lunalign
長期的な解決方法としては、次のフラグを指定してコンパイルします。
+allow_unaligned
例を次に示します。
PROGRAM bs30
INTEGER*2 i2(10)
INTEGER*4 i4
EQUIVALENCE (i2(2), i4)
DATA I4 /z’FFFF0000’/
i4=12
call allow_unaligned_data_access()
print *,i4
END
次のコマンドでコンパイルします。
/opt/fortran90/bin/f90 foo.f -lunalign +noppu
+noppu を省く必要があるときには、次の別名指令を追加します。
!$HP$ALIAS allow_unaligned_data_access=’allow_unaligned_data_access’
PROGRAM bs30
INTEGER*2 i2(10)
INTEGER*4 i4
EQUIVALENCE (i2(2), i4)
DATA I4 /z’FFFF0000’/
i4=12
call allow_unaligned_data_access()
130
第5章
データ型およびデータオブジェクト
境界の正しくないデータの問題の解決
print *,i4
END
次のコマンドでコンパイルします。
/opt/fortran90/bin/f90 foo.f -lunalign
注記
前述の -lunalign による実行時の補正を利用するために必要となる新しい機能は
ありませんが、+allow_unaligned コンパイルフラグに関する最新のパッチを適
用する必要があります。
+allow_unaligned 付きでコンパイルされていないルーチン ( たとえば、Fortran の実行時入出力
や F90 のライブラリ ) に境界の正しくないデータが渡される場合は、前述の呼び出しを行うこと
で、実行時に割り付け境界を補正しアプリケーションでバスエラーが発生するのを防ぐことがで
きます。
パフォーマンスを最適化するには、次の 2 つの方法を試して実行速度を測定してください。
1. allow_unaligned_data_access() 呼び出しを追加し、+allow_unaligned を指定してコンパイルする。
2. allow_unaligned_data_access() 呼び出しの追加だけを行う。
境界の正しくないデータを参照したときには、ハンドラーが呼び出されます。このような参照が
少ない場合は、1 番目の方法の方が実行速度が速くなり、このような参照が多い場合には、2 番
目の方法の方が実行速度が速くなります。
第5章
131
データ型およびデータオブジェクト
境界の正しくないデータの問題の解決
132
第5章
6 実行制御
Fortran 90 プログラムは、通常は並びの順に実行されます。つまり、各文はプログラム内に現れ
た順番に実行されます。ただし、この流れを変更することができます。本章では、プログラムの
実行順序の変更について説明します。
•
制御構文およびブロック
•
フロー制御文
Fortran 90 の各制御文についての詳細は、265 ページの第 10 章 「HP Fortran 文」を参照して
ください。WHERE 構文については、「配列選別代入」の項を参照してください。
第6章
133
実行制御
制御構文およびブロック
制御構文およびブロック
制御構文は、次の制御文の 1 つによって実行の道筋が定義されたブロックで構成されます。
•
CASE 文
•
DO 文
•
IF 文
ブロックとは、制御文とそれに対応する端末文で囲まれた文の並びのことです。ブロックは、0
個以上の文で構成され、制御構文を入れ子にすることができます。ただし、入れ子にした構文の
開始位置と終了位置は、同じブロック内になければなりません。
規格では、制御文を除き、制御をブロック内へ移行することを禁止していますが、HP Fortran
では許しています。規格では、制御をブロックの外に移すことを許しています。たとえば、次の
IF 構文では、IF 構文の外側で定義された文番号に制御を移行する GO TO 文が含まれています
が、これは規格に合致します。
IF (var > 1) THEN
var1 = 1
ELSE
GO TO 2
END IF
...
2 var1 = var2
次の論理 IF 文は、制御を DO 構文内に移行するため、規格には定められていません ( ただし、
HP Fortran では使用できます )。
IF (.NOT.done) GO TO 4
...
DO i = 1, 100
sum = b + c
4
b = b + 1
END DO
! nonstandard!
後述の項では、3 つの制御構文によって行われる処理について説明します。
CASE 構文
CASE 構文を実行すると、多数のブロックから ( 最大 ) 1 つのブロックが実行対象として選択され
ます。
134
第6章
実行制御
制御構文およびブロック
構文
[construct-name :] SELECT CASE ( case-expr )
[CASE ( case-selector ) [ construct-name ]
statement-block ]
...
[CASE DEFAULT [construct-name]
statement-block ]
END SELECT [ construct-name]
構文に関する注記
case-selector は、次のいずれかです。
•
case-value
•
low :
•
: high
•
low : high
case-selectors は case-expr と同じ型でなければなりません。
case-expr は、スカラ値として評価される整数型、論理型、または文字型でなければなりませ
ん。
construct-name を SELECT CASE 文に指定する場合は、それと同じ名前を構文内の CASE 文の
後に指定でき、END CASE 文には指定しなければなりません。その構文名を、プログラム単位内
の他の言語要素の名前として使用することはできません。
CASE 構文は入れ子にすることができます。この場合に、構文名を使用すると、区別しやすくな
ります。
規格では、構文の外側から最初の SELECT CASE 文以外の CASE 構文中の文への飛び越しを禁止
していますが、HP Fortran では許しています。規格では、構文の内側から END SELECT 文への
飛び越しを許しています。
実行の仕組み
CASE 構文の実行順序は、次のとおりです。
1. case-expr が評価されます。
2. 結果として得られた値が各 case-selector と比較されます。
3. 一致する値が見つかると、それに対応する statement-block が実行されます。
第6章
135
実行制御
制御構文およびブロック
4. 一致する値は見つからないが、CASE DEFAULT 文が指定されている場合は、その
statement-block が実行されます。
5. 一致する値が見つからず、CASE DEFAULT 文が指定されていなければ、CASE ブロックは実行
されず、構文の実行が終了します。
6. 通常の実行の流れでは、statement-block 内の文によって制御が移行されない限り、END
SELECT 文に続く最初の実行文から実行が再開されます。
例
次の CASE 構文を実行すると、ios_err の値に従ってエラーメッセージが出力されます。
INTEGER :: ios_err
...
SELECT CASE (ios_err)
CASE (:900)
PRINT *, ”Unknown error”
CASE (913)
PRINT *, ”Out of free space”
CASE (963:971)
PRINT *, ”Format error”
CASE (1100:)
PRINT *, ”ISAM error”
CASE DEFAULT
PRINT *, ”Miscellaneous Error”
END SELECT
DO 構文
DO 構文を実行すると、1 つのブロックが繰り返し実行されます。DO 文の構文は、ブロックの実
行回数を次の 2 つの方法で指定できます。
•
ループカウントを指定する
•
論理式を各繰り返しの実行条件としてテストする
また、DO 文の実行回数の指定を省略して無限ループを作成することもできます。後述の項では、
DO 構文の 3 つの形式について説明します。
CYCLE 文と EXIT 文を使用すると、DO 構文の実行の流れを変更できます。これらの文についての
詳細は、142 ページの「フロー制御文」の項を参照してください。
136
第6章
実行制御
制御構文およびブロック
制御カウンター DO ループ
制御カウンター DO ループでは、ループの実行回数を決定するための DO 変数を使用します。
構文
[ construct-name : ] DO index = init, limit [ , step ]
statement-block
END DO [ construct-name ]
HP Fortran では、以前の FORTRAN 77 形式の DO ループの構文もサポートしています。
DO label index = init, limit [ , step ]
statement-sequence
label terminal-statement
また、次のように、2 つの形式の要素が組み合わせられた第 3 の形式もサポートされています。
[construct-name :] DO label index = init, limit [, step]
実行の仕組み
次の実行手順は、特に明記しない限り、3 つの形式の構文すべてに適用されます。
1. ループが活動状態になり、index が init に設定されます。
2. 次の式によって繰り返し数が決定されます。
MAX( INT ( limit - init + step ) / step, 0 )
step は省略可能で、デフォルト値は 1 です。0 は指定できません。
次のどちらかの条件が真のときは、繰り返し数が 0 になるので注意してください。
•
step ( 指定されている場合 ) が正の数で、init が limit より大きい場合
•
step が負の数で、init が limit より小さい場合
3. 繰り返し数が 0 であれば、構文は休止状態になり、通常の実行の流れは END DO 文または端末
文に続く最初の実行文から再開されます。
4. statement-block が実行されます ( 旧形式の構文の場合は、statement-sequence と
terminal-statement の両方が実行されます )。
5. 繰り返し数が 1 ずつ減少し、indexが stepずつ、
または stepを指定しなかった場合は 1 ずつ増
加します。
6. 手順 3 に進みます。
第6章
137
実行制御
制御構文およびブロック
注記
Fortran の旧バージョンとの互換性を保つために、+onetrip コンパイル行オプ
ションを使用して、制御カウンター DO ループにプログラムの実行がかかると、
ループ本体が少なくとも 1 度は必ず実行されるようにすることができます。
例
この例では、入れ子の DO ループを使用して配列を昇順でソートしています。
INTEGER :: scores(100)
DO i = 1, 99
DO j = i+1, 100
IF (scores(i) > scores(j)) THEN
temp = scores(i)
scores(i) = scores(j)
scores(j) = temp
END IF
END DO
END DO
次の例では、旧形式の構文を使用しています。新形式の構文と違って、旧形式の DO ループの入
れ子では、同じ端末文を共有できるので注意してください。
DO 10 i = 1, 99
DO 10 j = i+1, 100
if (scores(i) <= scores(j)) GO TO 10
temp = scores(i)
scores(i) = scores(j)
scores(j) = temp
10 CONTINUE
条件付き DO ループ
条件付き DO ループでは、WHILE が使用され、論理式が次の繰り返しの実行条件としてテストさ
れます。
構文
[ construct-name :] DO WHILE ( logical-expression )
statement-block
END DO [ construct-name ]
138
第6章
実行制御
制御構文およびブロック
HP Fortran 90 では、旧形式の DO WHILE ループの構文もサポートされています。
DO label WHILE ( logical-expression )
statement-sequence
label terminal-statement
実行の仕組み
1. ループが活動状態になります。
2. logical-expression が評価されます。評価結果が偽であれば、ループは休止状態になり、
通常の実行の流れは END DO 文に続く最初の実行文から再開されるか、旧形式の DO ループ
の構文の場合は、端末文に続く最初の実行文から再開されます。
3. statement-block が実行されます ( 旧形式の構文の場合は、statement-sequence と
terminal-statement の両方が実行されます )。
4. 手順 2 に進みます。
例
! Compute the number of years it takes to double the value of an
! investment earning 4% interest per annum
REAL :: money, invest, interest
INTEGER :: years
money = 1000
invest = money
interest = .04
years = 0
DO WHILE (money
years = years
money = money
END DO
PRINT *, ”Years
< 2*invest) ! doubled our money?
+ 1
+ (interest * money)
=”, years
無限 DO ループ
無限 DO ループの DO 文には、ループ制御の仕組みが含まれていません。RETURN 文や EXIT 文な
ど、ブロック内の文によって明示的に終了するまで、ブロックは無限に繰り返し実行されます。
第6章
139
実行制御
制御構文およびブロック
構文
[ construct-name :] DO
statement-block
END DO [ construct-name ]
実行の仕組み
無限 DO ループの実行手順は、次のとおりです。
1. ループが活動状態になります。
2. statement-block が実行されます。
3. 手順 2 に進みます。
例
! Compute the average of input values; press 0 to exit
INTEGER :: i, sum, n
sum = 0
n = 0
average: DO
PRINT *, 'Enter a new number or 0 to quit'
READ *, i
IF (i == 0) EXIT
sum = sum + i
n = n + 1
END DO average
PRINT *, 'The average is ', sum/n
IF 構文
IF 構文を実行すると、条件実行経路のいずれかが選択されます。実行経路は、論理式のテスト
によって決定されます。ほとんどの場合は、IF 構文内の 1 つのブロックが実行されます。
構文
[construct-name :] IF (logical-expression1) THEN
statement-block1
[ELSE IF (logical-expression2) THEN [construct-name]
statement-block2 ]
.
140
第6章
実行制御
制御構文およびブロック
.
.
[ELSE [construct-name]
statement-block3]
END IF [construct-name]
実行の仕組み
1. logical-expression1 が評価されます。この式が真であれば、statement-block1 が実行
されます。
2. logical-expression1 が偽と評価され、ELSE IF 文が指定されている場合は、各 ELSE IF 文
の logical-expression が評価されます。最初に真として評価された式に対応している
statement-block が実行されます。
3. すべての式が偽と評価され、ELSE 文が指定されている場合は、その statement-block が実
行されます。ELSE 文が指定されていなければ、構文内のブロックは実行されません。
4. 通常の実行の流れは、END IF 文に続く最初の実行文から再開されます。
例
! Compare
IF ( num1
PRINT
ELSE IF (
PRINT
ELSE
PRINT
END IF
第6章
two integer values
< num2 ) THEN
*, ”num1 is smaller than num2.”
num1 > num2 ) THEN
*, ”num1 is greater than num2.”
*, ”The numbers are equal”
141
実行制御
フロー制御文
フロー制御文
フロー制御文は、プログラムの通常の実行の流れ、または制御構文の実行の仕組みを変更しま
す。たとえば、GO TO 文を使用すると、プログラム単位内の他の文に制御を移行できます。ま
た、EXIT 文を使用すると、DO 構文の実行を終了できます。
本項では、次のフロー制御文によって行われる処理について説明します。
•
CONTINUE 文
•
CYCLE 文
•
EXIT 文
•
割り当て形 GO TO 文
•
計算形 GO TO 文
•
単純 GO TO 文
•
算術 IF 文
•
論理 IF 文
•
PAUSE 文
•
STOP 文
前述の文についての詳細は、265 ページの第 10 章 「HP Fortran 文」を参照してください。
CONTINUE 文
CONTINUE 文は、プログラムの実行には影響しません。通常、文番号を置くための文として使用
します。特に FORTRAN 77 形式の DO ループの端末文として使用されます。
構文
CONTINUE
実行の仕組み
何も行いません。
142
第6章
実行制御
フロー制御文
例
! find the 50th triangular number
triangular_num = 0
DO 10 i = 1, 50
triangular_num = triangular_num + i
10 CONTINUE
PRINT *, triangular_num
CYCLE 文
CYCLE 文は、DO ループの現在の繰り返しの実行を中断します。
構文
CYCLE [ do-construct-name ]
実行の仕組み
1. DO ループのブロックの現在の繰り返しを終了します CYCLE 文に続く文は実行されません。
2. do-construct-name を指定すると、指定した DO ループの繰り返し数が減少します。
do-construct-name を指定しなければ、それを直接含むブロック DO ループの繰り返し数が
減少します。
3. 繰り返し数が0以外の値であれば、DO構文名で指定された (またはCYCLE文を含むブロックの)
DO ループのブロックの先頭から実行が再開されます。繰り返し数が 0 であれば、関連する
DO ループが休止状態になります。
例
LOGICAL :: even
INTEGER :: number
loop: DO i = 1, 10
PRINT *, ”Enter an integer: ”
READ *, number
IF (number == 0) THEN
PRINT *, ”Must be nonzero.”
CYCLE loop
END IF
even = (MOD(number, 2) == 0)
IF (even) THEN
第6章
143
実行制御
フロー制御文
PRINT *, ”Even”
ELSE
PRINT *, ”Odd”
END IF
END DO loop
EXIT 文
EXIT 文は、DO ループを終了させます。入れ子となった DO ループ内で EXIT 文に DO 構文名を指
定すると、指定した DO ループ内のすべてのループが終了します。
構文
EXIT [ do-construct-name ]
実行の仕組み
do-construct-name を指定すると、指定した DO ループ内のすべての DO ループの実行が終了し
ます。ループ名を指定しなければ、EXIT 文を直接囲んでいる DO ループの実行が終了します。
例
DO
PRINT *, ”Enter a nonzero integer: ”
READ *, number
IF (number == 0) THEN
PRINT *, ”Bye”
EXIT
END IF
even_odd = MOD(number, 2)
IF (even_odd == 0) THEN
PRINT *, ”Even”
ELSE
PRINT *, ”Odd”
END IF
END DO
割り当て形 GO TO 文
割り当て形 GO TO 文は、ASSIGN 文によって整変数に割り当てられた文番号の文に制御を移行し
ます。
144
第6章
実行制御
フロー制御文
構文
GO TO integer-variable [ , ( label-list ) ]
label-list が指定されている場合は、integer-variable に事前に割り当てた文番号がその並
びになければなりません。
実行の仕組み
制御は、integer-variable に割り当てられた実行文に移行されます。
例
INTEGER int_label
.
.
.
ASSIGN 20 TO int_label
.
.
.
GOTO int_label
.
.
.
20 ...
計算形 GO TO 文
計算形 GO TO 文は、複数の文番号付き文の 1 つに制御を移行します。どの文に移行されるかは、
算術式の値によって決定されます。
構文
GO TO ( label-list ) [ , ] integer-expression
実行の仕組み
1. integer-expression が評価されます。
2. 評価結果として得られた整数値 ( インデックス ) で、
label-listから選択される文番号を決定
します。
第6章
145
実行制御
フロー制御文
3. 選択した文番号を持つ実行文に制御が移行されます。インデックスの値が 1 より小さいか、
label-list 内の文番号の数より大きければ、計算形 GO TO 文は無効であり、制御はプログ
ラム内の次の実行文に渡されます。
例
DO
PRINT *, ”Enter a number 1-3: ”
READ *, k
GO TO (20, 30, 40) k
PRINT *, ”Number out of range.”
EXIT
20 i = 20
GO TO 100
30 i = 30
GO TO 100
40 i = 40
100 print *, i
END DO
単純 GO TO 文
単純 GO TO 文は、指定された文番号を持つ文に制御を移行します。
構文
GO TO label
実行の仕組み
label の位置にある文に制御が移行されます。
例
古い形式の Fortran プログラムでは、しばしば GO TO 文と論理 IF 文が組み合わせられ、次のよ
うな変な制御移行が行われます。
IF ( num1 /= num2) GO TO 10
PRINT *, ”num1 and num2 are equal.”
GO TO 30
10 IF ( num1 > num2 ) GO TO 20
PRINT *, ”num1 is smaller than num2.”
146
第6章
実行制御
フロー制御文
GO TO 30
20 PRINT *, ”num1 is greater than num2.”
30 CONTINUE
算術 IF 文
算術 IF 文は、3 つの文番号付き文の 1 つに制御を移行します。どの文に移行されるかは、算術
式の値によって決定されます。
構文
IF ( arithmetic-expression ) label1, label2, label3
実行の仕組み
1. arithmetic-expression が評価されます。
2. 結果が負の値になると、制御は label1 の文に移行されます。
3. 結果が値 0 になると、制御は label2 の文に移行されます。
4. 結果が正の値になると、制御は label3 の文に移行されます。
例
次の例のように、文番号並び中の複数の文番号が同じでもかまいません。
i = MOD(total, 3) + 1
IF ( i ) 10, 20, 10
論理 IF 文
論理 IF 文は、論理式の値に基づいて 1 つの文を実行します。実行される文は、次の文であって
はなりません。
•
構文を開始するための文
•
END 文
•
IF 文
構文
IF ( logical-expression ) executable-statement
第6章
147
実行制御
フロー制御文
実行の仕組み
1. logical-expression が評価されます。
2. 真と評価されると、executable-statement が実行されます。
3. 通常の実行の流れは、IF 文に続く最初の文から再開されます (executable-statement が単
純 GO TO 文であれば、制御は GO TO 文で指定された文から再開されます )。
例
LOGICAL :: finished
.
.
.
IF ( finished ) PRINT *, ”Done.”
PAUSE 文
PAUSE 文は、プログラムの実行を一時的に停止します。
構文
PAUSE [ pause-code ]
ここで pause-code は、文字定数または 5 桁以内の数字の並びです。
実行の仕組み
1. プログラムの実行が一時停止され、次のメッセージが標準出力に書き込まれます。
To resume execution, type 'go'.
pause-code を指定すると、次のメッセージが書き込まれます。
To resume execution, type 'go'.
PAUSE pause-code
2. 通常の実行の流れは、ユーザーが go と入力して [Return] キーを押すと再開されます。ユー
ザーが go 以外の値を入力すると、プログラムの実行は終了します。
標準入力デバイスが端末以外であれば、次のメッセージが表示されます。
To resume execution, execute a kill -15
command.
148
第6章
実行制御
フロー制御文
pid は、一時停止したプログラムの一意のプロセス識別番号です。kill コマンドは、ユーザー
がログインした端末から発行できます。
例
PAUSE 999
STOP 文
STOP 文は、プログラムの実行を終了させます。
構文
STOP [ stop-code ]
ここで stop-code は、文字定数、名前つき定数、または 5 桁以内の数字の並びです。
実行の仕組み
stop-code を指定すると、次のメッセージが標準出力に書き込まれます。
STOP stop-code
例
STOP ”Program has stopped executing.”
第6章
149
実行制御
フロー制御文
150
第6章
7 プログラム単位および手続き
本章では、各種プログラム単位の内部構造体、その使用方法、プログラム単位間での情報交換お
よび共有の方法について説明します。本章で説明する項目は、次のとおりです。
•
用語と概念
•
主プログラム
•
外部手続き
•
内部手続き
•
文関数
•
引き数
•
手続き引用仕様
•
モジュール
•
初期値設定プログラム単位
プログラム単位と手続きの構築に使用できる個別の文についての詳細は、265 ページの第 10 章
「HP Fortran 文」を参照してください。
第7章
151
プログラム単位および手続き
用語と概念
用語と概念
以降の項では、本章全体で使用する用語の定義と概念について説明します。
プログラム単位
プログラムは、次のプログラム単位で構成されます。
•
主プログラム単位
•
サブルーチンや関数などの外部手続き
•
モジュールプログラム単位
•
初期値設定プログラム単位
完全実行可能プログラムには、主プログラム単位が 1 つと、それぞれが個別にコンパイル可能な
0 個以上の他のプログラム単位が含まれます。プログラム単位は、構文、文、注釈、および
INCLUDE 行からなる、順序付けられた集合です。先頭の文では、プログラム単位の種別を識別し
ます。これは、主プログラム単位の場合にのみ省略可能です。END 文は、プログラム単位の終了
を示します。
実行可能プログラム単位は、主プログラムと外部手続きだけです。プログラムの実行は、主プロ
グラムの最初の実行文から始まり、通常は最後の文で終了します。実行中に主プログラムが外部
手続きを引用する場合は、その手続きに制御が渡され、手続きが実行されてから、制御が主プロ
グラムに返されます。実行中の手続きでも、他の手続きを引用したり、その手続き自体を再帰的
に引用できます。
主プログラム単位については 155 ページの「主プログラム」の項を、外部手続きについては 158
ページの「外部手続き」の項を参照してください。
非実行可能プログラム単位は、次のとおりです。
•
モジュールプログラム単位。このプログラム単位には、他のプログラム単位で使用される
データ宣言、利用者定義の型定義、手続き引用仕様、共通ブロック宣言、変数群宣言、およ
び副プログラム定義が含まれています。モジュールについては、188 ページの「モジュー
ル」の項を参照してください。
•
初期値設定プログラム単位。このプログラム単位では、名前付き共通ブロックの変数の初期
値が指定されます。初期値設定プログラム単位については、196 ページの「初期値設定プロ
グラム単位」の項を参照してください。
152
第7章
プログラム単位および手続き
用語と概念
手続き
手続きは、一連の文が含まれ、プログラムの実行中に呼び出すことができる、サブルーチンまた
は関数です。使用場所や使用方法に応じて、次の手続きを使用できます。
•
組み込み手続きは、言語によって定義され、宣言や定義なしで使用できます。組み込み手続
きによって、科学的および技術的アプリケーションに重要な共通の計算が実装されます。組
み込み手続きについては、509 ページの第 11 章 「組み込み手続き」を参照してください。
•
外部手続きは、個別にコンパイル可能なプログラム単位であり、その名前と他の入口点は大
域有効範囲を持っています。外部手続きについては、158 ページの「外部手続き」の項を参
照してください。
•
内部手続きは、外部手続きと比べてアクセスが制限されています。主プログラム単位または
外部手続きでしか使用できず、その親プログラム単位の外側からはアクセスできません。内
部手続きについては、164 ページの「内部手続き」の項を参照してください。
•
モジュール手続きは、モジュールプログラム単位でしか定義できず、参照結合でしかアクセ
スできません。モジュール手続きについては、188 ページの「モジュール」の項を参照して
ください。
有効範囲
Fortran で定義されているすべての言語要素は、その属性が認識される有効範囲を持っています。
たとえば、副プログラムで使用される文番号は、その副プログラムの外側から直接引用すること
はできません。この副プログラムが文番号の有効域となります。副プログラムで宣言されている
変数の有効範囲は、その副プログラムです。共通ブロック名は任意のプログラム単位内で使用で
き、同じ言語要素を引用します。つまり、共通ブロック名は大域有効範囲を持っていることにな
ります。これに対して、DATA 文の DO 形反復や配列構成子で使用される添え字付き変数の有効範
囲は、DO 形反復構文自体です。
結合
有効範囲の概念によって言語要素のアクセスが制限される場合は、結合の概念によって、さまざ
まな言語要素を同じ有効範囲や異なる有効範囲で相互にアクセス可能にすることができます。結
合の種類は次のとおりです。
•
引き数結合は、手続き引用時に実引き数と仮引き数の間で設定される結合です。詳細は、
168 ページの「引き数結合」の項を参照してください。
第7章
153
プログラム単位および手続き
用語と概念
•
親子結合は、入れ子になった有効域に適用されます。この場合、外側の有効域 ( 外部手続き
など ) は内側の有効域 ( 内部手続きなど ) に対して親プログラムとして機能します。親子結
合では、親プログラムと入れ子になった有効域は、データを共有できます。内部手続きにつ
いては、164 ページの「内部手続き」の項を参照してください。
•
ポインター結合は、ポインターと、ポインター代入文によって設定された指示先との間の結
合です。詳細は、126 ページの「ポインター結合状態」の項と、92 ページの「ポインター代
入」の項を参照してください。
•
順序結合は、仮引き数と実引き数が次元数の異なる配列である場合に、両者間に設定される
結合です。詳細は、169 ページの「配列仮引き数」の項を参照してください。
•
記憶列結合は、同じ記憶領域を持つ異なるオブジェクトの結合であり、EQUIVALENCE 文およ
び COMMON 文によって設定されます。記憶列結合についての詳細は、265 ページの第 10 章
「HP Fortran 文」の EQUIVALENCE 文および COMMON 文の説明を参照してください。定義に
SEQUENCE 文が含まれている構造型オブジェクトも、記憶列結合させることができます。119
ページの「列構造型」の項を参照してください。
•
参照結合では、さまざまなプログラム単位が USE 文を使用してモジュール言語要素にアクセ
スできます。モジュールと USE 文についての詳細は、188 ページの「モジュール」の項を参
照してください。
154
第7章
プログラム単位および手続き
主プログラム
主プログラム
主プログラムは、プログラム単位です。実行可能プログラムには、主プログラムを 1 つだけ含め
なければなりません。実行は、常に主プログラムから始まります。
主プログラムでは、完全なプログラム全体の設計と構造を決定し、通常は手続きを引用して各種
の処理を実行できます。プログラムは、主プログラムのみで構成し、すべてのプログラムロジッ
クを主プログラムに含めることができます。
主プログラムの形式は次のとおりです。
[PROGRAM program-name]
[specification-part]
[execution-part]
[internal-procedure-part]
END [PROGRAM [program-name]]
program-name
プログラム名。program-name は、PROGRAM 文で使用した場合にのみ END
PROGRAM 文で使用できます。この場合、どちらの文でも同じ名前を指定する
必要があります。
specification-part
表 7-1 に示す 0 個以上の文や、次のいずれかを使用できます。
•
型宣言文
•
構造型定義
•
引用仕様宣言
•
文関数
•
クレイ形式のポインター文 (HP 拡張機能 )
•
構造体定義 (HP 拡張機能 )
•
記録宣言 (HP 拡張機能 )
execution-part
表 7-2 に示す 0 個以上の文や、次のいずれかを使用できます。
•
第7章
代入文
155
プログラム単位および手続き
主プログラム
•
ポインター代入文
internal-procedure-part
この形式は次のとおりです。
CONTAINS
[internal-procedure]...
ここで internal-procedure は、1 つ以上の内部手続きです。164 ページの
「内部手続き」の項を参照してください。
表 7-1 単純宣言文
ALLOCATABLE
FORMAT
POINTER
COMMON
IMPLICIT
SAVE
DATA
INTRINSIC
STATIC
DIMENSION
NAMELIST
USE
EQUIVALENCE
OPTIONAL
VIRTUAL
EXTERNAL
PARAMETER
VOLATILE
ACCEPT
ELSE
+Onomovellops
ALLOCATE
ELSE IF
OPEN
ASSIGN
ELSEWHERE
PAUSE
BACKSPACE
ENCODE
PRINT
CALL
END
READ
CASE 構文
ENDFILE
REWIND
CLOSE
EXIT
STOP
CONTINUE
FORMAT
TYPE ( 入出力 )
CYCLE
GO TO
WHERE
DEALLOCATE
IF
WHERE 構文
表 7-2 実行文
156
第7章
プログラム単位および手続き
主プログラム
表 7-2 実行文 ( 続き )
DECODE
IF 構文
DO
INQUIRE
DO 構文
NULLIFY
WRITE
主プログラム単位の必須成分は、END 文だけです。したがって、次の例は正しいコンパイル可能
プログラムです。
END
第7章
157
プログラム単位および手続き
外部手続き
外部手続き
外部手続きは、関数またはサブルーチンとして実装されます。この 2 つの主な違いは、関数副プ
ログラムが値を返すため、式に演算対象として使用できることです。
以降の項では、次に示す項目を初め、両方の種類の外部手続きについて説明します。
•
手続き定義
•
手続き引用
•
手続き呼び出しからの戻り値
•
代替入口点
手続きに結合している文 (SUBROUTINE や FUNCTION など ) についての詳細は、265 ページの第
10 章 「HP Fortran 文」を参照してください。
手続き定義
外部手続きの定義の形式は、次のとおりです。
external-procedure-statement
[specification-part]
[execution-part]
[internal-procedure-part]
end-external-procedure-statement
external-procedure-statement
手続きがサブルーチンであるか関数であるかに応じて、次のいずれかの形式を
とります。
•
[RECURSIVE] SUBROUTINE
[([dummy-arg-list])]
•
[RECURSIVE][type-spec] FUNCTION &
([dummy-arg-list]) [RESULT (result-name)]
&
ここで name は、手続き名です。type-spec は、関数の結果値の型です。
dummy-arg-list は、仮引き数をコンマで区切った並びです。168 ページの
「引き数」の項を参照してください。SUBROUTINE 文および FUNCTION 文につ
いての詳細は、265 ページの第 10 章 「HP Fortran 文」を参照してください。
158
第7章
プログラム単位および手続き
外部手続き
specification-part
表 7-1 に示す 0 個以上の文、または AUTOMATIC 文です。
execution-part
表 7-2 に示す 0 個以上の文や次に示す文です。
•
ENTRY 文
•
RETURN 文
internal-procedure-part
この文の形式は次のとおりです。
CONTAINS
[internal-procedure]...internal-procedure
内部手続きの定義です。164 ページの「内部手続き」の項を参照してくださ
い。
end-external-procedure-statement
手続きがサブルーチンであるか関数であるかに応じて、次のいずれかの形式を
とります。
•
END [SUBROUTINE [subroutine-name]]
•
END [FUNCTION [function-name]]
手続き引用
手続き引用 ( 手続き呼び出しとも呼ばれます ) は、手続き名が実行文で指定されているときに発
生し、指定された手続きが実行されます。以降の項では、サブルーチンと関数の引用、および、
手続きがそれ自体を間接または直接に呼び出す場合の再帰的引用について説明します。
サブルーチンを引用する
外部サブルーチンの引用は、サブルーチン名またはその入口点の名前の 1 つを指定する CALL 文
で発生します。CALL 文の構文は、次のとおりです。
CALL subroutine-name [([actual-argument-list])]
actual-argument-list
次のような形式の実引き数をコンマで区切った並びです。
[keyword =] actual-argument
第7章
159
プログラム単位および手続き
外部手続き
keyword
SUBROUTINE 文に指定される仮引き数の名前です。keyword についての詳細
は、172 ページの「引き数キーワード」の項を参照してください。
actual-argument
次のいずれかです。
•
変数名などの式
•
手続き名
•
選択戻り
引き数についての詳細は、168 ページの「引き数」の項を参照してください。
alternate-return
次のいずれかです。
•
*label
•
&label
label は、CALL 文と同じ有効域の分岐先でなければなりません。アンパサン
ドの接頭辞 (&) は HP 拡張機能であり、固定形式でのみ使用できます。選択戻
りについては、161 ページの「手続き引用から返す」の項を参照してくださ
い。
利用者定義代入を実装するサブルーチンの引用については、184 ページの「利用者定義代入」の
項を参照してください。
関数の引用
外部関数副プログラムは、名前、または入口点名の 1 つによって引用されます。関数引用の構文
は次のとおりです。
name ([actual-argument-list])
ここで name は、関数名、または入口点のいずれかの名前です (163 ページの「代替入口点」の
項を参照 )。actual-argument-list の内容は、サブルーチン引用と同じですが (159 ページの
「手続き引用」の項を参照 )、選択戻りを含めることはできません。
利用者定義演算子を実装する関数の引用については、182 ページの「利用者定義演算子」の項を
参照してください。
160
第7章
プログラム単位および手続き
外部手続き
再帰的引用
それ自体を直接または間接に呼び出す手続きは、再帰的です。この手続きの場合、FUNCTION 文
または SUBROUTINE 文に RECURSIVE という語を追加する必要があります。
関数がそれ自体を直接呼び出す場合は、その引用仕様が明示的になるように、FUNCTION 文で
RECURSIVE 句と RESULT 句の両方を指定する必要があります。
次の例は、再帰的関数を示しています。
RECURSIVE FUNCTION factorial (n) RESULT(r)
INTEGER :: n, r
IF (n.ne.0) THEN
r = n*factorial(n-1)
ELSE
r = 1
ENDIF
END FUNCTION factorial
内部手続きも外部手続きも、再帰的に使用できます。
手続き引用から返す
副プログラムの END 文が発生すると、制御は呼び出し側のプログラム単位に返されます。
RETURN 文を使用すると、手続きの任意の場所で同じ効果が得られます。RETURN 文の構文は、次
のとおりです。
RETURN [alt-return-arg]
ここで alt-return-arg は、サブルーチンの引き数並びに含まれるいずれかの選択戻り引き数
の位置として評価されるスカラ整数式です。alt-return-arg は、関数で指定される RETURN 文
には使用できません。
デフォルトでは、サブルーチン呼び出しから制御が返されると、CALL 文の後の最初の実行文が
次に実行されます。ただし、サブルーチン呼び出しで選択戻りを実引き数として指定すると、制
御を他の文に戻すことができます。選択戻りは、接頭辞のアスタリスク (*) が付いている文番号
です。各文番号は、実引き数の並びにおいて、仮引き数の並びに含まれるプレースホルダー、つ
まりアスタリスク (*) に対応する位置に挿入されます。たとえば、サブルーチン subr の仮引き
数の並びが次のように指定されている場合を考えます。
SUBROUTINE subr(x, y, z, *, *)
この場合、実引き数には、次の呼び出しのように、選択戻り用の 2 つの文番号を指定する必要が
あります。
CALL subr(a, b, c, *10, *20)
第7章
161
プログラム単位および手続き
外部手続き
互換性のための拡張機能として、HP Fortran では、固定形式の場合にのみ、接頭辞としてアス
タリスクのかわりにアンパサンド (&) を使用できます。選択戻りは省略できず、結合している実
引き数にはキーワードを使用できません。選択戻り引き数の構文についての詳細は、265 ページ
の第 10 章 「HP Fortran 文」の CALL 文および RETURN 文の説明を参照してください。
次の例 alt_return.f90 は、選択戻り機能を示しています。引用されているサブルーチン subr で
は、最初の引き数 where_to の値に基づいて、2 つの選択戻り引き数の一方が選択されます。
例 7-1
alt_return.f90
PROGRAM main
! illustrates alternate return arguments
INTEGER :: por
10
15
20
! point of return
por = -1 ! interpreted by arithmetic IF
CALL subr(por, *10, *15) ! executes first
PRINT *, 'Default returning point'
por = 0
CALL subr(por, *10, *15) ! executes second
GOTO 20 ! control should never reach here
PRINT *, 'Line 10 in main'
por = 1
CALL subr(por, *10, *15) ! executes third
GOTO 20 ! control should never reach here
PRINT *, 'Line 15 in main'
CONTINUE
END PROGRAM main
SUBROUTINE subr(where_to, *, *)
! Argument list includes placeholders for two alternate returns;
! the third argument, where_to, is used to select a return
! argument
INTEGER :: where_to
25
162
! use arithmetic IF to select a return
IF (where_to) 25, 30, 35 ! labels to transfer control
PRINT *, 'Should never print'
PRINT *, 'Line 25 in subr'
RETURN
! default returning point
第7章
プログラム単位および手続き
外部手続き
30
35
PRINT *, 'Line 30 in subr'
RETURN 1 ! select the first return argument
PRINT *, 'Line 35 in subr'
RETURN 2 ! select the second return argument
END SUBROUTINE subr
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 alt_return.f90
$ a.out
Line 25 in subr
Default returning point
Line 30 in subr
Line 10 in main
Line 35 in subr
Line 15 in main
代替入口点
通常、手続きが引用される場合、実行は手続きの最初の実行文から始まります。ただし、ENTRY
文を使用すると、手続きへの代替入口点を定義して、各入口点に名前を結合することができま
す。手続きの各 ENTRY 文で手続きの入口を定義し、個別の他の手続きとして名前で引用できま
す。
ENTRY 文の構文は、次のとおりです。
ENTRY entry-name ([dummy-arg-list])[RESULT (result-name)]
第7章
163
プログラム単位および手続き
内部手続き
内部手続き
内部手続きは、外部手続きに似ていますが、次のような違いがあります。
•
CONTAINS 文の後の親プログラム単位 ( 主、外部、またはモジュールプログラム単位 ) で定義
しなければなりません。
•
親プログラムでしか引用できません。
•
親プログラムから親子結合によって他の言語要素にアクセスできます。
•
ENTRY 文は使用できません。
•
引き数として渡すことはできません。
•
内部手続きを含めることはできません。
内部手続き定義の構文は、外部手続きの場合と同じですが (158 ページの「手続き定義」の項を
参照 )、内部手続き部分はありません。内部手続きの引用は、外部手続きの場合と同じです。
159 ページの「手続き引用」の項を参照してください。
次の例 int_func.f90 では、内部関数が宣言され、引用されています。外部手続きと内部手続きの
両方で、手続きに明示的引用仕様を要求する形状引き継ぎ配列が仮引き数として指定されている
ことに注意してください (178 ページの「手続き引用仕様」の項を参照 )。引用仕様を明示的にす
るには、外部手続きを引用仕様宣言内で宣言する必要があります。内部手続きの引用仕様は、デ
フォルトで明示的です。
例 7-2
int_func.f90
PROGRAM main
! declare and initialize an array to pass to an external
! procedure
REAL, DIMENSION(3) :: values = (/2.0, 5.0, 7.0/)
!
!
!
!
Because the dummy argument to print_avg is an assumed-shape
array (see the definition of print_avg below), the
procedure interface of print_avg must
be made explicit within the calling program unit.
INTERFACE
SUBROUTINE print_avg(x)
REAL :: x(:)
164
第7章
プログラム単位および手続き
内部手続き
END SUBROUTINE print_avg
END INTERFACE
CALL print_avg(values)
END PROGRAM main
! print_avg is an external subprogram
SUBROUTINE print_avg(x)
REAL :: x(:) ! an assumed-shape array
! reference the internal function get_avg
PRINT *, get_avg(x)
CONTAINS ! start of internal procedure part
REAL FUNCTION get_avg(a) ! get_avg is an internal procedure
! The interface of an internal procedure is explicit within
! the hosting unit, so this function may declare a as an
! assumed-shape array.
REAL a(:) ! an assumed-shape array
! references to the SUM and SIZE intrinsics
get_avg = SUM(a) / SIZE(a)
END FUNCTION get_avg
END SUBROUTINE print_avg
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 int_func.f90
$ a.out
4.66667
第7章
165
プログラム単位および手続き
文関数
文関数
スカラ値を持つ関数の評価を 1 つの Fortran 代入文で表現できる場合は、このような定義を主プ
ログラム単位や副プログラムの宣言部に含めることができます。この定義を文関数と呼びます。
文関数は、定義されている有効範囲に対して局所的です。構文は次のとおりです。
function-name (dummy-argument-list) = scalar-expression
すべての仮引き数は、スカラでなければなりません。scalar-expression に使用するすべての
言語要素は、宣言部の前の方で宣言しておく必要があります。文関数では、すでに宣言されてい
る他の文関数を引用できます。その名前を手続き名引き数として渡すことはできません。文関数
は、明示的引用仕様を持ちます。
次の例 stmt_func.f90 は、164 ページの「内部手続き」の項で示したものと同じですが、
get_avg が内部関数ではなく文関数として実装されています。プログラムの注釈が示すように、
文関数の仮引き数がスカラでなければならないため、配列 x の各要素が個別の引き数として文関
数に渡されます。
例 7-3
stmt_func.f90
PROGRAM main
! declare and initialize an array to pass to an external
! procedure
REAL, DIMENSION(3) :: values = (/2.0, 5.0, 7.0/)
!
!
!
!
Because the dummy argument to print_avg is an assumed-shape
array (see the definition of print_avg below), the
procedure interface of print_avg must be made
explicit within the calling program unit.
INTERFACE
SUBROUTINE print_avg(x)
REAL :: x(:)
END SUBROUTINE print_avg
END INTERFACE
CALL print_avg(values)
END PROGRAM main
! print_avg is an external subprogram
SUBROUTINE print_avg(x)
166
第7章
プログラム単位および手続き
文関数
REAL :: x(:)
! an assumed-shape array
! Define the statement function get_avg.
! Note that the dummy arguments must be scalar, so in order
! to find the average of the elements of the array, we must
! pass each element as a separate argument
get_avg(x1, x2, x3) = (x1 + x2 + x3) / 3
! reference the statement function get_avg
PRINT *, get_avg(x(1), x(2), x(3))
END SUBROUTINE print_avg
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 stmt_func.f90
$ a.out
4.66667
第7章
167
プログラム単位および手続き
引き数
引き数
引き数データは、手続き呼び出し中に渡されます。引き数には、仮引き数と実引き数の 2 種類が
あります。仮引き数は、手続き定義の引き数の並びで指定され、実引き数の数、型、種別、およ
び次元数を定義します。実引き数は手続き引用に指定される引き数であり、仮引き数名で認識さ
れる場合にも、引用される手続きに使用される実際の言語要素です。
本項では、引き数に関連して次の項目について説明します。
•
引き数結合
•
引き数キーワード
•
二重結合
•
INTENT 属性
•
%REF および %VAL
引き数結合
引き数結合は、実引き数と、引き数のある手続きの呼び出し時に最初に発生する仮引き数とのリ
ンクです。引用される手続きの実行時には、仮引き数は実際には実引き数の別名として使用され
ます。引用元のプログラム単位に制御が返されると、仮引き数と実引き数の結合が解除され、実
引き数を仮引き数名で引用できなくなります。
引き数結合の原則は位置に基づいています。つまり、実引き数の並びの最初の項目は、仮引き数
の並びの最初の項目と結合され、それぞれの並びの残りの引き数も順次結合されます。ただし、
引き数キーワードを使用すると、この位置の対応関係を無効にすることができます。172 ページ
の「引き数キーワード」の項を参照してください。
仮引き数と実引き数の種別、型、および次元数は、一致しなければなりません。対応する仮引き
数と実引き数は、両方ともスカラであるか、または両方とも配列でなければなりません。また、
両方が配列の場合は、同じ次元を持たなければなりません。同様に、実引き数が式、または関数
引用の場合は、仮引き数の型および種別と一致しなければなりません。
以降の項では、次の仮引き数について詳細を説明します。
•
スカラ
•
配列
•
構造型
•
ポインター
168
第7章
プログラム単位および手続き
引き数
•
手続き名
スカラ仮引き数
仮引き数がスカラであれば、それに対応する実引き数は、同じ種別および型を持つスカラまたは
スカラ式でなければなりません。仮引き数が文字型変数で、長さを引き継ぐ場合は、実引き数の
長さが引き継がれます。それ以外の場合、実引き数の長さは少なくとも仮引き数と同じでなけれ
ばならず、副プログラムからは仮引き数の範囲内の文字にしかアクセスできません。長さは、基
本文字型の場合にのみ異なる場合があります。
配列仮引き数
仮引き数が形状引き継ぎ配列の場合、対応する実引き数の種別、型、および次元数と一致しなけ
ればなりません。仮引き数は、形状を実引き数から引き継ぐため、実引き数と仮引き数の間に要
素別の結合が生じます。
仮引き数が形状明示配列または大きさ引き継ぎ配列であれば、実引き数の種別と型は一致しなけ
ればなりませんが、次元数は一致しなくてもかまいません。各要素は列結合されます。つまり、
実引き数と仮引き数は、それぞれ次元数や形状に関係なく記憶領域で要素の一次列と見なされ、
各列の対応する要素が配列要素順で相互に結合されます。
順序結合の結果、実引き数の大きさ全体が少なくとも仮引き数と同じにならなければならず、引
用される手続きからは仮引き数の大きさ全体に含まれる要素にしかアクセスできません。
たとえば、実引き数の宣言が次のような場合について説明します。
REAL a(0:3,0:2)
また、対応する仮引き数の宣言は次のようになっています。
REAL d(2,3,2)
この場合、実引き数と仮引き数の要素間の対応関係は、次のようになります。
Dummy
<=> Actual
------------------d(1,1,1) <=> a(0,0)
d(2,1,1) <=> a(1,0)
d(1,2,1) <=> a(2,0)
...
d(2,3,2) <=> a(3,2)
実引き数とそれに結合している仮引き数が基本文字型配列であれば、文字長が同じでない場合が
あります。この場合、仮引き数と実引き数の 1 文字目が一致し、配列要素ではなく後続の文字が
一致します。
次の例は、文字の順序結合を示しています。実引き数の宣言が次のようになっているものと仮定
します。
第7章
169
プログラム単位および手続き
引き数
CHARACTER*2 a(3,4)
また、対応する仮引き数の宣言は、次のようになっています。
CHARACTER*4 d(2,3)
この場合、実引き数と仮引き数の要素間の対応関係は、次のようになります。
Dummy
<=> Actual
------------------d(1,1) <=> a(1,1)//a(2,1)
d(2,1) <=> a(3,1)//a(1,2)
...
d(2,3) <=> a(2,4)//a(3,4)
実引き数は部分配列でもかまいませんが、部分配列が他の形状引き継ぎ仮引き数と結合すると、
部分配列の複写が生成され、パフォーマンスが低下する可能性があります。
各種配列については、54 ページの「配列宣言」の項を参照してください。
構造型仮引き数
構造型オブジェクトを渡すと、対応する構造型の仮引き数と実引き数は、同じ構造型を持つもの
と仮定されます。引用される手続きの引用仕様が引用元のプログラム単位で明示的でないと、コ
ンパイラによる型チェックは実行されません。次のいずれかを実行して、仮引き数と実引き数の
型が同じかどうかを確認する必要があります。
•
両方の副プログラムで構造型の定義を複写します。
•
定義をモジュールに挿入して、両方の副プログラムで参照結合によって使用可能にします。
明示的引用仕様については、178 ページの「手続き引用仕様」の項を参照してください。モ
ジュールと参照結合については、188 ページの「モジュール」の項を参照してください。
ポインター仮引き数
仮引き数が POINTER 属性を持っている場合は、実引き数も POINTER 属性を持たなければなりま
せん。また、両者の種別、型、および次元数が一致しなければなりません。仮引き数が POINTER
属性を持たなくても、実引き数がポインターであれば、引き数結合の動作は、ポインター実引き
数が手続き引用時に指示先に置換された場合と同じになります。
手続き仮引き数
仮引き数が手続きであれば、実引き数は適切な副プログラム名でなければなりません。また、こ
の名前は、呼び出し側単位で EXTERNAL として宣言するか、引用仕様宣言で定義しなければなり
ません (178 ページの「手続き引用仕様」の項を参照 )。内部手続き、文関数、および総称名は、
実引き数として渡すことができません。
170
第7章
プログラム単位および手続き
引き数
実引き数が組み込み手続きであれば、引用には適切な個別名を使用する必要があります。また、
INTRINSIC 属性を持たなければなりません。
次の例 intrinsic_arg.f90 では、組み込み関数 QSIN および QCOS が INTRINSIC 属性を持つように
宣言されているため、利用者定義サブルーチン call_int_arg に引き数として渡すことができ
ます。仮引き数 trig_func は、仮手続きであることを示すためにサブルーチンで EXTERNAL 属
性を使用して宣言されているので注意してください。この宣言と主プログラム単位での実引き数
の宣言は、両者が異なる有効域で発生しているので競合しません。
例 7-4
intrinsic_arg.f90
PROGRAM main
! declare the intrinsics QSIN and QCOS with the INTRINSIC
! attribute to allow them to be passed as arguments
REAL(16), INTRINSIC :: QSIN, QCOS
CALL call_int_arg(QSIN)
CALL call_int_arg(QCOS)
END PROGRAM main
SUBROUTINE call_int_arg(trig_func)
! trig_func is an intrinsic function--see the declarations
! of the actual arguments in the main program. trig_func
! is declared here as EXTERNAL to indicate that it is a
! dummy procedure.
REAL(16), EXTERNAL :: trig_func
REAL(16), PARAMETER :: pi=3.1415926
INTEGER :: i
DO i = 0, 360, 45
! Convert degrees to radians (i*pi/180) and call the
!
intrinsic procedure passed as trig_func.
WRITE(6, 100) i,” degrees “, trig_func(i*pi/180)
END DO
100 FORMAT (I4, A9, F12.8)
END SUBROUTINE call_int_arg
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 intrinsic_arg.f90
$ a.out
0 degrees
0.00000000
45 degrees
0.70710675
第7章
171
プログラム単位および手続き
引き数
90
135
180
225
270
315
360
0
45
90
135
180
225
270
315
360
degrees
degrees
degrees
degrees
degrees
degrees
degrees
degrees
degrees
degrees
degrees
degrees
degrees
degrees
degrees
degrees
1.00000000
0.70710686
0.00000015
-0.70710665
-1.00000000
-0.70710697
-0.00000030
1.00000000
0.70710681
0.00000008
-0.70710670
-1.00000000
-0.70710691
-0.00000023
0.70710659
1.00000000
EXTERNAL 文および INTRINSIC 文については、265 ページの第 10 章 「HP Fortran 文」を参照
してください。組み込み手続きについての詳細は、509 ページの第 11 章 「組み込み手続き」を
参照してください。
引き数キーワード
引き数キーワードを使用すると、仮引き数の位置に関係なく、手続き引用で実引き数を指定でき
ます。引き数キーワードを使用して、次の構文のように実引き数と仮引き数を明示的にペアにし
ます。
dummy-argument = actual-argument
引き数に引き数キーワードを使用する場合は、その後に引き数キーワードを持つ他の引き数を指
定する必要があります。引き数の並びに含まれるすべての引き数に引き数キーワードを使用する
場合は、実引き数を任意の順序で指定できます。
引き数キーワードの使用例として、SUM 組み込み関数について説明します。633 ページの
「SUM(ARRAY, DIM, MASK)」の項で後述するように、この組み込み関数は array, dim, および
mask という 3 つの引き数を、この順番にとります。dim および mask は省略可能な引き数です。
したがって、次の例は SUM の正しい引用です。
SUM(a,2)
SUM(a,mask=a.gt.0)
SUM(dim=2,array=a)
次の例は、不正な引用です。mask キーワードを指定しなければなりません。
SUM(a,dim=2,a.gt.0)
172
! ILLEGAL, mask keyword missing
第7章
プログラム単位および手続き
引き数
省略可能な引き数
実引き数は、それに対応する仮引き数が省略可能な場合は、手続き引用の引き数並びから省略で
きます。仮引き数が省略可能なのは、OPTIONAL 属性で宣言され、引き数並びの最後に指定され
ている場合です。また、手続き引用の場合は、OPTIONAL 属性を持つ後続の引き数を省略できま
す。それ以外の場合は、対応関係が識別しやすいように、キーワードを指定しなければなりませ
ん (172 ページの「引き数キーワード」の項を参照 )。省略可能な引き数を取ることができるの
は、明示的引用仕様を持つ手続きだけです。
次の例 optional_arg.f90 では、仮引き数の 1 つを OPTIONAL 属性で宣言している内部関数が引用
されています ( 内部関数は明示的引用仕様を持つため、仮引き数を省略可能な引き数にします。
164 ページの「内部手続き」の項を参照 )。この関数では、PRESENT 組み込み関数を使用して、
省略可能な引き数の有無がテストされます。組み込み関数が .TRUE. を返す ( 実引き数が省略可
能な仮引き数に結合している ) 場合、関数は 2 つの引き数の合計を返し、それ以外の場合は 1 だ
け増分された必須引き数を返します。
例 7-5
optional_arg.f90
PROGRAM main
! illustrates the optional argument feature
INTEGER :: arg1 = 10, arg2 = 20
PRINT *, add_or_inc(arg1) ! omit optional argument
PRINT *, add_or_inc(arg1, arg2)
CONTAINS ! internal procedure with explicit interface
INTEGER FUNCTION add_or_inc(i1, i2)
! return the sum of both arguments if the second argument
! (declared as optional) is present; otherwise, return the
! first argument incremented by 1
INTEGER :: i1
INTEGER, OPTIONAL :: i2
! optional argument
! use PRESENT intrinsic to see if i2 has an actual
! argument associated with it
IF (PRESENT(i2)) THEN
add_or_inc = i1 + i2 ! add both arguments
ELSE
add_or_inc = i1 + 1
! increment required argument
第7章
173
プログラム単位および手続き
引き数
END IF
END FUNCTION add_or_inc
END PROGRAM main
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 optional_arg.f90
$ a.out
11
30
OPTIONAL 文と属性の構文、規則、および制限条項については、418 ページの「OPTIONAL ( 文
および属性 )」の項を参照してください。PRESENT 組み込み関数については、610 ページの
「PRESENT(A)」の項を参照してください。
二重結合
手続き引用によってデータオブジェクトが複数の仮引き数に結合される場合、そのオブジェクト
を手続き引用で再定義してはなりません。次の例について説明します。
PROGRAM p
CALL s (a,a)
CONTAINS
SUBROUTINE s (c,d)
c = 22.01
! ILLEGAL definition of one of the dummy
! arguments associated with data object a
...
END SUBROUTINE
END PROGRAM
仮引き数 c および d は、どちらも実引き数 a と結合されます。この手続きには、c への代入が含
まれており、a を再定義する効果があります。このような a の再定義は不正です。この規則で
は、同じ配列の部分が重複する実引き数となります。
また、引き数結合と、参照結合、親子結合、または記憶列結合のいずれかを通じて手続きに対し
てデータオブジェクトを使用可能にする場合、そのデータオブジェクトは仮引き数でのみ定義
し、引用しなければなりません。
次のコードでは、データオブジェクト a は、引き数結合と親子結合の結果としてサブルーチンに
対して使用可能になります。サブルーチンで a を直接引用するのは不正です。
PROGRAM p
CALL s (a,b)
CONTAINS
174
第7章
プログラム単位および手続き
引き数
SUBROUTINE s (c,d)
c = 22.01
! valid definition of a through the dummy
! argument
d = 3.0*a
! direct reference to a is ILLEGAL
...
END SUBROUTINE
END PROGRAM
INTENT 属性
引き数について付加的なコンパイル時チェックを可能にし、余分な副作用を回避するために、
INTENT 属性を仮引き数ごとに INTENT(IN), INTENT(OUT) または INTENT(INOUT) として指定
し、宣言できます。
INTENT 属性に指定できる値には次のような意味があります。
•
IN は、引き数を副プログラムで変更禁止にする場合に使用します。
•
OUT は、値が代入されるまで、実引き数を副プログラムで使用禁止にすることを暗黙指定し
ます。
•
INOUT (INOUT 形式も許されます ) は、実引き数を入口で定義しなければならず、副プログラ
ムで確定可能であることを暗黙指定します。
INTENT 属性についての詳細は、388 ページの「INTENT ( 文および属性 )」の項を参照してくだ
さい。
%VAL および %REF 組み込み関数
デフォルトで、HP Fortran では文字以外の引き数は引用渡しされます。Fortran では、引用さ
れる手続きに実引き数の値が渡されるかわりに、アドレスが渡され、仮引き数の名前が結合され
ます。168 ページの「引き数結合」の項を参照してください。HP Fortran が文字引き数を渡す
ときには、隠し長さパラメータと実引き数のアドレスが含まれます。
ただし、HP Fortran で拡張機能として提供される組み込み関数 %VAL および %REF を使用する
と、引き数の渡し方を変更できます。
•
%VAL(arg) は、arg の値 ( アドレスではない ) が引用される手続きに渡されることを指定しま
す。arg には、定数変数、配列要素、または構造型成分を指定できます。
•
%REF(arg) は、arg のアドレスが引用される手続きに渡されることを指定します。これは、
HP Fortran が文字以外のすべての引き数を渡す場合の方法なので、%REF が役立つのは arg
が文字型の場合だけです。文字引き数と %REF を使用すると、隠し長さパラメータを抑制す
る効果があります。
第7章
175
プログラム単位および手続き
引き数
通常、これらの組み込み関数を使用するのは、Fortran から C 関数のような他の言語で記述され
た手続きに引き数を渡す場合です。次の例は、この使用方法を示しています。このプログラム
は、Fortran 90 の主プログラム単位と C 関数から構成されています。主プログラムは C 関数を
呼び出して、整定数、実変数、文字型変数、および整数式の 4 つの引き数を渡します。次に、主
プログラムは組み込み関数を使用して Fortran の引き数渡し規約を C に準拠するように変更し
ます。C は、文字列、つまり Fortran の文字型変数を除くすべての引き数が値渡しされるものと
仮定します。また、文字列は、隠し長さパラメータなしで引用渡しされるものと仮定します。
例 7-6
pass_args.f90
PROGRAM main
REAL :: x = 3.4
INTEGER :: i1 = 5, i2 = 7
! C expects strings to be null-terminated, so use the
! concatenation operator to append a null character.
CHARACTER(LEN=5) :: str = "Hi!"//CHAR(0)
! Pass 4 arguments--a constant, a variable, a character
! variable, and an expression--to a function written in C.
! Use HP Fortran’s built-in functions to change the
! argument-passing conventions to conform to C.
CALL get_args(%VAL(20), %VAL(x), %REF(str), %VAL(i1+i2))
END PROGRAM main
例 7-7
get_args.c
#include <stdio.h>
/* accept 4 arguments from a Fortran 90 program, which are
* passed as C expects them to be passed
*/
void get_args(int i1, float x, char *s, int i2)
{
/* display argument values */
printf("First argument:
%i\n", i1);
printf("Second argument: %f\n", x);
printf("Third argument:
%s\n", s);
printf("Fourth argument: %i\n", i2);
}
次の例は、両方のファイルをコンパイルして実行するためのコマンド行と、実行結果です。
176
第7章
プログラム単位および手続き
引き数
$ cc -Aa -c get_args.c
$ f90 pass_args.f90 get_args.o
$ a.out
First argument:
20
Second argument: 3.400000
Third argument:
Hi!
Fourth argument: 12
複数言語によるプログラミングについての追加情報は、『HP Fortran プログラマーガイド』を参
照してください。また、組み込み関数を ALIAS 指令と併用することもできますが、その場合は
構文が少し異なります。
第7章
177
プログラム単位および手続き
手続き引用仕様
手続き引用仕様
手続き引用仕様は、手続き名、引き数、および結果 ( 手続きが関数の場合 ) など、手続き引用中
で指定する情報です。引用仕様が明示的であれば、各引き数と結果のすべての特性、つまり型、
種別、属性、および数値は、その引用の有効範囲で定義されます。引用仕様が暗黙的であれば、
コンパイラで引用仕様に関して手続き引用が許されるように想定できます。
すべての手続き引用仕様は、次の場合を除き暗黙的です。
•
組み込み手続き
•
内部手続き
•
モジュール手続き
•
結果句を指定する再帰的関数
•
引用仕様が引用仕様宣言で宣言されている外部手続き
明示的引用仕様が必須になるのは次の場合です。
•
手続き引用でキーワード形式の実引き数が使用される場合
•
手続きが OPTIONAL 引き数をとる場合
•
仮引き数が形状引き継ぎ配列またはポインターの場合
•
関数の結果が配列値またはポインターの場合
•
手続きが、長さが動的に決定される文字関数の場合
•
総称名の手続き引用の場合
•
手続き引用によって利用者定義の演算子または代入が実装される場合
•
手続きの名前が組み込み手続きと同じだが、手続きを組み込み手続きより優先したい場合。
510 ページの「組み込み関数の可用性」の項を参照してください。
•
コンパイラでコンパイル時に引き数チェックを実行したい場合
以降の項では、引用仕様宣言と、それを次の要素の作成に使用する方法について説明します。
•
総称手続き
•
利用者定義演算子
•
利用者定義代入
178
第7章
プログラム単位および手続き
手続き引用仕様
引用仕様宣言
引用仕様宣言は、外部手続きに明示的引用仕様を提供したり、総称手続きを定義するために使用
します。引用仕様宣言は、初期値設定プログラム単位を除く任意のプログラム単位で使用できま
す。プログラム単位の宣言部で指定します。
引用仕様宣言の構文は次のとおりです。
INTERFACE [generic-spec]
[interface-body]...
[MODULE PROCEDURE module-procedure-name-list]
END INTERFACE
generic-spec
次のいずれかです。
•
generic-name
•
OPERATOR (operator)
•
ASSIGNMENT (=)
generic-spec を省略する場合は、MODULE PROCEDURE 文も省略しなければな
りません。
generic-name
引用仕様宣言を含む副プログラムで引用される総称手続きの名前です。
operator
次の形式の組み込みまたは利用者定義の単項または 2 項演算子です。
.letter[letter]... .
interface-body
次のとおりです。
function-statement
[specification-part]
end-function-statement
または
subroutine-statement
[specification-part]
end-subroutine-statement
第7章
179
プログラム単位および手続き
手続き引用仕様
module-procedure-name-list
総称引用仕様として generic-spec を持つモジュール手続きの名前をコンマ
で区切った並びです。各モジュール手続き名には、参照結合によって、または
この引用仕様宣言がモジュール手続きを定義するモジュール内にある場合は親
子結合によってアクセス可能でなければなりません。
MODULE PROCEDURE 文が存在する場合は、generic-spec も存在しなければな
りません。
次の例 proc_interface.f90 では、主プログラム単位で引用仕様宣言を使用して、関数 avg の明示
的引用仕様を提供しています。
例 7-8
proc_interface.f90
! Define an external function avg with one assumed-shape dummy
! argument. Note that the definition of the function must
! lexically precede its declaration in the interface block.
REAL FUNCTION avg(a)
REAL a(:)
avg = SUM(a)/SIZE(a)
END FUNCTION avg
PROGRAM main
REAL,DIMENSION(3) :: x
INTERFACE
REAL FUNCTION avg(a)
REAL, INTENT(IN) :: a(:)
END FUNCTION avg
END INTERFACE
x=(/2.0, 4.0, 7.0/)
PRINT *, avg(x)
END PROGRAM main
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 proc_interface.f90
$ a.out
4.33333
180
第7章
プログラム単位および手続き
手続き引用仕様
総称手続き
Fortran 90 の総称手続きの概念は、利用者定義の総称手続きが使用可能になるように、
FORTRAN 77 の総称組み込み関数の概念が拡張されたものです。手続きが総称になるのは、総
称名が個別手続きの集合と結合されている場合です。総称名を引用すると、実引き数に異なる
型、種別、および次元数を使用できます。引き数の違いによって、呼び出される個別手続きが決
定されます。
総称手続きを定義するには、引用仕様宣言でその名前と個別手続きの引用仕様を定義します。
179 ページの「引用仕様宣言」の項を参照してください。引用仕様宣言の個別手続きは、すべて
サブルーチン、またはすべて関数でなければなりません。各手続きの引用仕様は、次の 1 つ以上
の点で他と異なっていなければなりません。
•
仮引き数の数が異なっていなければなりません。
•
仮引き数の並びで同じ位置にある引き数は、型、種別、または次元数が異なるものでなけれ
ばなりません。
•
仮引き数は、他の手続きの引き数並びに含まれる他の仮引き数と異なる名前であるか、また
は、同じ名前を持つ仮引き数は、すべて型、種別、または次元数が異なっていなければなり
ません。
同じ総称名を持つ複数の引用仕様宣言を使用することはできますが、この種のすべての引用仕様
宣言に引用仕様が指定されている個別手続きは、前述の基準に従って区別できなければなりませ
ん。
MODULE PROCEDURE 文を使用すると、個別手続きの並びを拡張し、引用仕様宣言を含むプログラ
ム単位から他の方法でアクセス可能な手続きを取り込むことができます。MODULE PROCEDURE 文
では手続き名のみを指定します。手続き引用仕様はすでに明示的になっています。MODULE
PROCEDURE 文は、総称指定を持つ引用仕様宣言でしか使用できません。また、引用仕様宣言は、
名前の付いた手続きの定義を含む同じモジュール中、または、参照結合によって手続きがアクセ
スできるプログラム単位中に含めなければなりません。
次の例は、一次方程式を解くために、係数が実数の場合は rlineq、係数が複素数の場合は
zlineq の 2 つのサブルーチンがコード化される場合を仮定しています。総称名 lineq は
INTERFACE 文で宣言されているため、引き数が実数型か複素数型かに応じて、個別手続きのい
ずれかの引用に使用できます。
INTERFACE lineq
SUBROUTINE rlineq(ra,rb,rx)
REAL,DIMENSION(:,:) :: ra
REAL,DIMENSION(:) :: rb,rx
END SUBROUTINE rlineq
SUBROUTINE zlineq(za,zb,zx)
COMPLEX,DIMENSION(:,:) :: za
第7章
181
プログラム単位および手続き
手続き引用仕様
COMPLEX,DIMENSION(:) :: zb,zx
END SUBROUTINE zlineq
END INTERFACE lineq
利用者定義演算子
OPERATOR 句を INTERFACE 文と併用して、新しい利用者定義演算子を定義したり、すでに定義
されている演算子や組み込み演算子の動作を拡張、またはオーバーロードできます。後者の使用
方法は、総称手続きを定義する場合に似ています (181 ページの「総称手続き」の項を参照 )。再
定義された演算子は、総称演算子と結合されます。
OPERATOR 句が INTERFACE 文に含まれている場合、引用仕様宣言内の個別手続きはすべて関数
でなければなりません。各関数では、型、種別、および次元数の異なる演算対象の演算子を実装
できます。これらの関数は、利用者定義演算子が単項か 2 項かに応じて、1 つまたは複数の必須
引き数に制限されます。各関数は、次の形式による式の結果を返します。
[operand] operator operand
引用仕様宣言に含まれる各関数の仮引き数は、INTENT(IN) 属性を持たなければなりません。演
算子が組み込みの場合、指定した各関数は組み込み演算子が持つ演算対象と同数の引き数をとら
なければなりません。また、引き数は、一般に組み込み演算と結合しているものと区別できなけ
ればなりません。ただし、引き数を利用者定義演算子の演算対象として指定する場合、引き数
キーワードを使用してはなりません。
利用者定義演算子が総称名で引用される場合、その引用は一意の個別関数名に変換する必要があ
ります。関数は、演算対象の数、型、種別、および次元数を引用仕様宣言内で指定された関数の
仮引き数並びと照合することによって選択されます。総称名の引用 (181 ページの「総称手続き」
の項を参照 ) と同様に、演算対象の属性と一致する手続きは 1 つだけでなければならず、一致す
る関数が選択されて呼び出されます。
次のプログラム def_op.f90 は、利用者定義演算を示しています。演算 .inrect. では、2 つの構
造型演算対象が比較されます。一方の演算対象にはグラフ上の 1 点の x および y 座標が保持さ
れ、他方には長方形を定義する座標の集合が保持されます。点が長方形の内側にあれば、演算で
は .TRUE. として評価されます。演算が定義されているモジュールには、演算対象の型の定義も
含まれています。
注釈が示すように、モジュールを引用する USE 文と同じファイル内でモジュールが定義されてい
る場合、定義は辞書順で USE 文の前になければなりません。モジュールと USE 文については、
188 ページの「モジュール」の項を参照してください。
182
第7章
プログラム単位および手続き
手続き引用仕様
例 7-9
def_op.f90
! Note that, if a module definition and any USE statements that
! reference the definition are in the same file, then the
! definition must lexically precede the USE statements.
MODULE coord_op_def
! Defines a logical operation for comparing two derived-type
! operands, as well as the derived types
! Define a derived type for the co-ordinates of a point
! in a graph
TYPE coord_pt
INTEGER :: x, y
END TYPE coord_pt
! define a derived type for the co-ordinates of a rectangle
TYPE rect_coords
TYPE(coord_pt) :: p1, p2
END TYPE rect_coords
! Interface block to define the logical operator .inrect.
! Evaluates to .TRUE. if the point operand lies inside
! the rectangle operand
INTERFACE OPERATOR (.inrect.)
MODULE PROCEDURE cmp_coords
END INTERFACE
CONTAINS
LOGICAL FUNCTION cmp_coords(pt, rect)
! returns .TRUE. if pt is inside rect
! arguments
TYPE (coord_pt), INTENT (IN) :: pt
TYPE (rect_coords), INTENT (IN) :: rect
cmp_coords = .FALSE.
! initialization
IF (pt%x >= rect%p1%x .AND. pt%x < rect%p2%x
.AND. pt%y >= rect%p1%y .AND. pt%y < rect%p2%y)
cmp_coords = .TRUE.
! pt is inside rect
&
&
END FUNCTION cmp_coords
END MODULE coord_op_def
第7章
183
プログラム単位および手続き
手続き引用仕様
PROGRAM main
! make the defined operation and the derived-type definitions
! of the operands accessible to this program unit
USE coord_op_def
! specify a value for the rectangle co-ordinates
TYPE (rect_coords) :: rectangle = &
rect_coords(coord_pt(3, 5), coord_pt(7, 10))
TYPE (coord_pt) :: point ! user will specify value for this
PRINT *, 'Enter two co-ordinates (integers) in a graph:'
READ *, point
! perform defined operation
IF (point .inrect. rectangle) THEN
PRINT *, 'The point lies inside the rectangle.'
ELSE
PRINT *, 'The point lies outside the rectangle.'
END IF
END PROGRAM main
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 def_op.f90
$ a.out
Enter two co-ordinates (integers) in a graph:
4,8
The point lies inside the rectangle.
利用者定義代入
ASSIGNMENT 句を INTERFACE 文と併用すると、代入演算子を拡張、またはオーバーロードする 1
つ以上のサブルーチンを指定できます。各サブルーチンには、正確に 2 つの引き数が必要です。
第 1 の引き数には、INTENT(OUT) 属性または INTENT(INOUT) 属性を指定できます。第 2 の引
き数には、INTENT(IN) 属性が必要です。第 1 の引き数は代入文の左辺の変数に対応し、第 2 の
引き数は右辺の式に対応します。
総称名や利用者定義演算子と同様に、複数の利用者定義代入を使用できますが、代入文の各出現
個所で一意の個別サブルーチンに解決されなければなりません。利用者定義代入の引用仕様宣言
で指定したサブルーチンの並びから、仮引き数の種別、型、および次元数が代入文の左辺と右辺
で一致するサブルーチンが選択され、呼び出されます。
184
第7章
プログラム単位および手続き
手続き引用仕様
次の例 def_assign.f90 は、利用者定義代入を示しています。この代入によって、右辺の演算対象
データの要素別統計解析が実行され、結果が左辺の演算対象に保存されます。注釈が示すよう
に、モジュールを引用する USE 文と同じファイルでモジュールが定義されている場合、定義は辞
書順で USE 文の前になければなりません。モジュールと USE 文については、188 ページの「モ
ジュール」の項を参照してください。
例 7-10
def_assign.f90
! Note that, if a module definition and any USE statements that
! reference the definition are in the same file, then the
! definition must lexically precede the USE statements.
MODULE def_assign_stats
! Defines the derived-type operands and extends the assignment
! operator to perform a statistical analysis of the data in
! raw_data
! input data
TYPE raw_data
REAL :: x(100) ! values to be averaged
INTEGER :: n
! number of values assigned to x
END TYPE raw_data
! output data
TYPE stats_data
REAL :: sum, max, min, avg
END TYPE stats_data
! statistical results
! interface block to extend the assignment operator
INTERFACE ASSIGNMENT (=)
MODULE PROCEDURE do_stats
END INTERFACE
CONTAINS
SUBROUTINE do_stats(lside, rside)
! define the operations that are performed when
! rside is assigned (=) to lside
TYPE (raw_data), INTENT (IN) :: rside
TYPE (stats_data), INTENT (OUT) :: lside
! use a structure constructor for initialization
lside = stats_data(0, 0, 9999999.9, 0)
第7章
185
プログラム単位および手続き
手続き引用仕様
! find the sum, max, and min
DO i = 1, rside%n
lside%sum = lside%sum + rside%x(i)
IF (lside%max < rside%x(i)) lside%max = rside%x(i)
IF (lside%min > rside%x(i)) lside%min = rside%x(i)
END DO
lside%avg = lside%sum / rside%n
END SUBROUTINE do_stats
END MODULE def_assign_stats
! the average
PROGRAM main
! Make the defined assignment and the definitions of the
! derived-type operands in the assignment accessible to
! this program unit
USE def_assign_stats
TYPE (raw_data) :: user_data
! assignment
TYPE (stats_data) :: user_stats
CALL get_data(user_data)
user_stats = user_data
PRINT *, 'Maximum
PRINT *, 'Minimum
PRINT *, 'Sum =',
PRINT *, 'Average
END PROGRAM main
! right-hand side of
! left-hand side of assignment
! collect user data
! defined assignment statement
=', user_stats%max
=', user_stats%min
user_stats%sum
=', user_stats%avg
SUBROUTINE get_data(data)
! this subroutine stores user-input values and the number
! of values stored in data
! make the definition of raw_data accessible
USE def_assign_stats
TYPE (raw_data) :: data
! the argument
REAL :: val
INTEGER :: i
! get user input
186
第7章
プログラム単位および手続き
手続き引用仕様
DO i = 1, 100
PRINT *, 'Enter a positive real (negative to quit):'
READ *, val
IF (val < 0.0) EXIT ! negative, so leave
data%x(i) = val
data%n = i ! count of values so far
END DO
END SUBROUTINE get_data
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 def_assign.f90
$ a.out
Enter a positive real (negative to quit):
25.5
Enter a positive real (negative to quit):
35.5
Enter a positive real (negative to quit):
45.5
Enter a positive real (negative to quit):
-1
Maximum = 45.5
Minimum = 25.5
Sum = 106.5
Average = 35.5
第7章
187
プログラム単位および手続き
モジュール
モジュール
モジュールは、参照結合によってアクセスできる定義と宣言が含まれ、通常は関連付けられてい
る非実行可能プログラム単位です。通常、モジュールの用途は次のとおりです。
•
構造型の定義と宣言
•
大域データ領域の定義と宣言
•
演算子の定義
•
副プログラムライブラリの作成
モジュール中の定義は、参照結合によって他のプログラムからアクセス可能になります。モ
ジュールへのアクセスを必要とするプログラム単位の場合は、その宣言部の先頭に USE 文を指定
しなければなりません。文でモジュール名を指定する必要があります。
以降の項では、モジュールプログラム単位と USE 文について説明します。最後の項には、モ
ジュールを使用する見本プログラムが記載されています。
注記
モジュールを含むプログラムをコンパイルするには、各モジュールがそれを使用
するプログラム単位より先にコンパイルされることを確認する必要があります。
モジュールを含むプログラムをコンパイルする方法についての詳細は、『HP
Fortran プログラマーガイド』を参照してください。
モジュールプログラム単位
モジュールプログラム単位の構文は次のとおりです。
MODULE module-name
[specification-part]
[module-procedure-part]
END [MODULE [module-name]]
module-name
モジュール名です。
188
第7章
プログラム単位および手続き
モジュール
specification-part
表 7-1 に示す FORMAT 文以外の 1 つ以上の文です。また、
specification-part には、文関数の定義や自動割り付けオブジェクトを含
めることはできません (HP Fortran では、モジュールで宣言された言語要素
はデフォルトでその値を保持するので、モジュールで SAVE 属性を指定する必
要はありません )。
specification-part で宣言された各言語要素と、module-procedure-part
で定義された各手続きは、PUBLIC 属性または PRIVATE 属性を持ちます。デ
フォルトでは、すべての言語要素が PUBLIC 属性を持っているため、参照結合
によってアクセスできます。PRIVATE 属性を持つ言語要素には、モジュール
からしかアクセスできません。
PUBLIC および PRIVATE の属性と文についての詳細は、265 ページの第 10 章
「HP Fortran 文」を参照してください。
module-procedure-part
CONTAINS
module-procedure[module-procedure...]
module-procedure
関数またはサブルーチンです。module-procedure の構造は外部関数やサブ
ルーチンと同じですが、module-procedure の END 文には、SUBROUTINE ま
たは FUNCTION のうち該当する方のキーワードを含めなければなりません。外
部手続きの場合、省略可能です。外部サブルーチンについては、158 ページの
「外部手続き」の項を参照してください。
モジュール手続きについては、次の点に注意してください。
•
使用するプログラム単位中に明示的引用仕様がなければなりません。モ
ジュール手続きの引用仕様宣言を作成する必要はありません。
•
内部手続きを含めることもできます。
•
実引き数として渡すことができます。
モジュールには、参照結合によってアクセス可能になる次のような要素があります。
•
宣言されている変数
•
名前付き定数
•
構造型の定義
第7章
189
プログラム単位および手続き
モジュール
•
手続き引用仕様
•
モジュール手続き
•
総称名
•
変数群
USE 文
USE 文は、使用プログラム単位中、つまり、その文が指定されているプログラム単位中のモ
ジュール言語要素へのアクセスを提供します。USE 文では、プログラム単位のアクセス先となる
モジュールの名前を指定します。指定したモジュール中の情報には、プログラムから参照結合に
よってアクセス可能になります。USE 文は、プログラム単位の宣言部の先頭に書かなければなり
ません。
USE 文には次の 2 つの形式を使用できます。
•
USE module-name[, rename-list]
•
USE module-name, ONLY : access-list
rename-list
次のコンマで区切られた並びです。
local-name => module-entity-name
module-entity-name
モジュール言語要素の名前です。
local-name
使用プログラム単位で module-entity-name へのアクセスに使用される名前
です。
access-list
次のコンマで区切られた並びです。
[local-name =>] module-entity-name
構文の説明が示すように、USE 文には名称変更機能があり、モジュール言語要素を使用プログラ
ム単位で仮称指定できます。local-name および module-entity-name 間の結合は、概念上は
引き数結合に似ており、一方の名前は他方の別名であり、この 2 つの結合は使用プログラム単位
中でのみ有効です。
190
第7章
プログラム単位および手続き
モジュール
名称変更機能を使用すると、同じ名前を持つ言語要素が複数のモジュールに含まれている場合
に、名前の衝突を解決できます。参照結合によって mod_defs1, mod_defs2 という 2 つのモ
ジュールにアクセスするプログラム単位について説明します。mod_defs1 の言語要素の名前は
a, b, および c で、mod_defs2 の言語要素の名前は b, c, および d です。次の USE 文では、使用プ
ログラム単位中の名前の衝突が回避されます。
USE mod_defs1
USE mod_defs2, b => local_b, c => local_c
ONLY 句は、モジュール言語要素へのアクセスに対して付加的な制御レベルを提供します。188
ページの「モジュールプログラム単位」の項で前述したように、PRIVATE 属性および PUBLIC 属
性によって、すべての使用プログラム単位のモジュール言語要素へのアクセスが制御されます。
ONLY 句では、個別プログラム単位中でのアクセスが制御されます。
たとえば、モジュール mod_defs に言語要素 ent_x, ent_y, および ent_z が含まれている場合に
ついて説明します。プログラム単位に次の USE 文が含まれている場合、
USE mod_defs, ONLY : ent_x, entry += local_y
ent_x および ent_y のみがアクセス先となります。また、ent_y には名前 local_y でアクセス
しなければなりません。
プログラム単位の複数の USE 文で同じモジュールを指定できます。
•
一方の USE文に ONLY句がなければ、PUBLIC属性を持つすべてのモジュール言語要素がアクセ
ス可能になります。また、rename-lists と access-lists からのすべての local-names
は、連結された単一の rename-list として解釈されます。
•
すべての USE 文に ONLY 句が含まれている場合は、すべての access-lists が連結された単一
の access-list として解釈されます。
詳細は、493 ページの「USE」の項を参照してください。
見本プログラム
次の見本プログラムは、次の 3 つのファイルで構成されています。
•
main.f90
•
precision.f90
•
lin_eq_slv.f90
ファイル main.f90 は、2 つのモジュール precision および linear_equation_solver 中の言
語要素に参照結合によってアクセスするドライバです。この 2 つのモジュールが、他の 2 つの
ファイルです。
第7章
191
プログラム単位および手続き
モジュール
precision の目的は、精度の移植性を確保するために、プログラム中の他のプログラム単位に
種別型パラメータを渡すことです。第 2 のモジュール linear_equation_solver には、3 つの
モジュール手続きが含まれており、最初の solve_linear_equations では他の 2 つのモジュー
ル手続きが使用されます。solve_linear_equations 自体は、主プログラムによって呼び出さ
れます。
代数でいうと、main.f90 が解の入力として提供する等式は次のようになります。
2x + 3y + 4z = 20
3x + 4y + 5z = 26
4x + 5y - 6z = -4
例 7-11
main.f90
PROGRAM main
! use the two modules defined in precision.f90 and
! lin_eq_slv.f90
USE precision
USE linear_equation_solver
IMPLICIT NONE
! the matrix a contains the coefficients to solve; b holds
! the constants on the right-hand side of the equation;
! the solution goes in x
REAL (adequate) :: a(3,3), b(3), x(3)
INTEGER :: i, j
! set by solve_linear_equations to indicate whether or not
! a solution was possible
LOGICAL :: error
! initialize the matrix
DO i = 1,3
DO j = 1,3
a(i,j) = i+j
END DO
END DO
a(3,3) = -a(3,3)
! initialize the vector of constants
b = (/ 20, 26, -4 /)
CALL solve_linear_equations (a, x, b, error)
IF (error) THEN
192
第7章
プログラム単位および手続き
モジュール
PRINT *, 'Cannot solve.'
ELSE
PRINT *, 'The solution:', x
END IF
END PROGRAM main
例 7-12
precision.f90
MODULE precision
! The named constant adequate is a kind number of a real
! representation with at least 10 digits of precision and 99
! digits range that normally results in 64-bit arithmetic.
! This constant ensures the same level of precision
! regardless of whether the program
! of whether the program is compiled on a 32-bit or 64-bit
! single-precision machine.
INTEGER, PARAMETER :: adequate = SELECTED_REAL_KIND(10,99)
END MODULE precision
例 7-13
lin_eq_slv.f90
MODULE linear_equation_solver
USE precision
IMPLICIT NONE
PRIVATE adequate ! to avoid a "double definition" of adequate
! in program units that also use precision
! forbid outside access to these two module procedures
PRIVATE :: factor, back_substitution
CONTAINS ! module procedures defined here
SUBROUTINE solve_linear_equations (a, x, b, error)
! solve the system of linear equations ax = b; set error to
! true if the extents of a, x, and b are incompatible or
! a zero pivot is found
REAL (adequate), DIMENSION (:, :), INTENT (IN) :: a
REAL (adequate), DIMENSION (:), INTENT (OUT) :: x
REAL (adequate), DIMENSION (:), INTENT (IN) :: b
LOGICAL, INTENT (OUT) :: error
REAL (adequate), DIMENSION (SIZE (b), SIZE (b) + 1) :: m
INTEGER :: n
n = SIZE (b)
! check for compatible extents
第7章
193
プログラム単位および手続き
モジュール
error = SIZE(a, DIM=1) /= n .OR. SIZE(a, DIM=2) /= n &
.OR. SIZE(x).LT. n
IF (error) THEN
x = 0.0
RETURN
END IF
! append the right-hand side of the equation to m
m (1:n, 1:n) = a
m (1:n, n+1) = b
! factor m and perform forward substitution in the last
! column of m
CALL factor (m, error)
IF (error) THEN
x = 0.0
RETURN
END IF
! perform back substitution to obtain the solution
CALL back_substitution (m, x)
END SUBROUTINE solve_linear_equations
SUBROUTINE factor (m, error)
! Factor m in place into a lower and upper triangular
! matrix using partial pivoting
! Set error to true if a pivot element is zero; Perform
! forward substitution with the lower triangle on the
! right-hand side m(:,n+1)
REAL (adequate), DIMENSION (:, :), INTENT (INOUT) :: m
LOGICAL, INTENT (OUT) :: error
INTEGER, DIMENSION (1) :: max_loc
REAL (adequate), DIMENSION (SIZE (m, DIM=2)) :: temp_row
INTEGER :: n, k
INTRINSIC MAXLOC, SIZE, SPREAD, ABS
n = SIZE (m, DIM=1)
triang_loop: DO k = 1, n
max_loc = MAXLOC (ABS (m (k:n, k)))
temp_row (k:n+1) = m (k, k:n+1)
m (k, k:n+1) = m (k-1+max_loc(1), k:n+1)
m (k-1+max_loc(1), k:n+1) = temp_row (k:n+1)
IF (m (k, k) == 0) THEN
error = .TRUE.
194
第7章
プログラム単位および手続き
モジュール
EXIT triang_loop
ELSE
m (k, k:n+1) = m (k, k:n+1) / m (k, k)
m (k+1:n, k+1:n+1) = m (k+1:n, k+1:n+1) - &
SPREAD (m (k, k+1:n+1), 1, n-k) *
SPREAD (m (k+1:n, k), 2, n-k+1)
END IF
END DO triang_loop
END SUBROUTINE factor
&
SUBROUTINE back_substitution (m, x)
! Perform back substitution on the upper triangle to compute
! the solution
REAL (adequate), DIMENSION (:, :), INTENT (IN) :: m
REAL (adequate), DIMENSION (:), INTENT (OUT) :: x
INTEGER :: n, k
INTRINSIC SIZE, SUM
n = SIZE (m, DIM=1)
DO k = n, 1, -1
x (k) = m (k, n+1) - SUM (m (k, k+1:n) * x (k+1:n))
END DO
END SUBROUTINE back_substitution
END MODULE linear_equation_solver
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 precision.f90 lin_eq_slv.f90 main.f90
$ a.out
The solution: 1.0 2.0 3.0
f90 コマンド行で指定するファイルの順序が重要です。モジュールを含むファイルは、そのモ
ジュールを使用するプログラム単位を含むファイルより先にコンパイルしなければなりません。
モジュールを使用するプログラムをコンパイルする方法についての詳細は、『HP Fortran プログ
ラマーガイド』を参照してください。
第7章
195
プログラム単位および手続き
初期値設定プログラム単位
初期値設定プログラム単位
初期値設定プログラム単位では、共通ブロック中のデータ値が初期化されます。初期値設定プロ
グラム単位の構文は次のとおりです。
BLOCK DATA [block-data-name]
[specification-part]
END [BLOCK DATA [block-data-name]]
block-data-name
初期値設定プログラム単位の名前です。この名前は省略可能なので注意してく
ださい。省略した場合は、実行可能プログラムで名前なしの初期値設定プログ
ラム単位を複数使用することはできません。
specification-part
次の 0 個以上の要素です。
•
型宣言文
•
USE 文
•
IMPLICIT 文
•
COMMON 文
•
DATA 文
•
EQUIVALENCE 文
•
構造型定義
•
次の属性単純宣言文 :
・DIMENSION
・INTRINSIC
・PARAMETER
・POINTER
・SAVE
・TARGET
USE 文が初期値設定プログラム単位に含まれている場合、プログラム単位からは名前付き定数に
のみアクセス可能になります。
196
第7章
プログラム単位および手続き
初期値設定プログラム単位
初期値設定プログラム単位では、複数の共通ブロックを初期化できます。ただし、共通ブロック
は 1 つの初期値設定プログラム単位中でしか初期化できません。共通ブロック中のすべてのオブ
ジェクトを初期化する必要はありませんが、共通ブロックは完全に指定しなければなりません。
HP Fortran では、拡張機能として、空白または余分な共通ブロック中のオブジェクトを初期化
できます。次の例は、この拡張機能を示しています。
BLOCK DATA blank
COMMON//aa(3),ab(5) ! an unnamed common block
DATA aa/3*1.0/
DATA ab/1.0,2.0,3*4.0/
END BLOCK DATA blank
第7章
197
プログラム単位および手続き
初期値設定プログラム単位
198
第7章
8 入出力およびファイル処理
本章では、HP Fortran でサポートされる入出力およびファイル処理について説明します。説明
する項目は次のとおりです。
•
記録
•
ファイル
•
装置へのファイルの接続
•
ファイル探査方法
•
停留入出力
•
入出力文
•
入出力文の構文
•
バイナリ入出力変換
•
ASA 復帰制御
•
プログラム例
第8章
199
入出力およびファイル処理
記録
記録
記録とは、Fortran 90 の入出力処理の基本単位であり、記録が書式付きか書式なしかに応じて、
文字または 2 進値で構成されます。後述の項では、書式付き記録と書式なし記録、およびファイ
ル終了記録の特殊なケースについて説明します。
停留入出力によって、記録の部分読み込み / 書き込みが可能になるので注意してください。詳細
は、213 ページの「停留入出力」の項を参照してください。
書式付き記録
書式付き記録は、並び入出力または変数群入出力の実行によって編集された文字、またはデータ
転送時に書式仕様によって編集された文字で構成されます ( 書式仕様についての詳細は、235
ページの「書式仕様」の項を参照 )。書式付き記録の長さは文字数で表され、事前に定義された
記録の長さ制限はありません。
書式なし記録
書式なし記録は、処理系で表現可能な形式の 2 進値で構成されます。書式なし記録の長さはバイ
ト数で表されます。書式なし記録は、並び入出力文、変数群入出力文、書式仕様を使用してデー
タを編集する入出力文では処理できません。
ファイル終了記録
ファイル終了記録は特殊ケースのもので、データは含まれておらず、順次ファイルの最後の記録
です。ファイル終了記録は、次の場合に書かれます。
•
ENDFILE 文を実行した場合
•
ファイルが CLOSE 文によって明示的に閉じられた場合、または書き込み操作の後にプログラ
ムが終了することによって暗黙的に閉じられた場合
•
書き込み操作の後で、およびファイル終了記録が書かれる前に、BACKSPACE 文が実行された
場合
READ 文実行中にファイル終了記録が発生した場合、READ 文に END 指定子か IOSTAT 指定子、ま
たはその両方が含まれていなければ、プログラムの実行はアボートされます。これらの指定子に
ついての詳細は、265 ページの第 10 章 「HP Fortran 文」の READ の説明を参照してください。
200
第8章
入出力およびファイル処理
ファイル
ファイル
ファイルはデータの集合であり、論理記録の並びとして編成されます。ファイル内の記録は、
ファイル終了記録を除き、すべてが書式付きか、またはすべてが書式なしです。
後述の項では、外部ファイルおよび内部ファイルという 2 種類のファイルについて説明します。
外部ファイル
外部ファイルは、ディスクや磁気テープなどの周辺機器に格納されます。外部ファイルには、順
番探査または直接探査が可能です。詳細は、206 ページの「ファイル探査方法」の項を参照して
ください。
スクラッチファイル
スクラッチファイルは、特殊な外部ファイルです。これは名前なしの一時ファイルであり、開い
ている間だけ存在します。つまり、プログラムが終了すると存在しなくなります。HP Fortran
では、tempnam(3S) システムルーチンを使用してスクラッチファイルが命名されます。この名
前は作成直後にファイルシステム経由では使用できなくなり、ls(1) コマンドで表示することも
できず、他のプロセスでは開くことができません。
スクラッチファイルを作成するには、次のように OPEN 文に STATUS='SCRATCH' 指定子を含まな
ければなりません。
OPEN (25, STATUS='SCRATCH')
他のすべての点では、スクラッチファイルの動作は他の外部ファイルと同じです。スクラッチ
ファイルを使用するプログラムの例については、230 ページの「ファイル探査」の項を参照して
ください。
内部ファイル
内部ファイルは、変数に格納され、その変数の存続期間中は存在します。その主な用途は、変換
を行うための編集記述子を使用して、内部表現の形式と文字の形式の間でデータ変換をプログラ
ム内で行うことです ( 編集記述子についての詳細は、236 ページの「編集記述子」の項を参照 )。
内部ファイルとして、次のいずれかを使用できます。
•
文字変数
•
文字型配列
•
文字型配列要素
第8章
201
入出力およびファイル処理
ファイル
•
部分列
•
整数型または実数型の配列 (HP Fortran の拡張機能 )
•
前述の、構造体の成分 ( 旧形式 )、または構造型の成分であるもの
ただし、ベクトル添え字を持つ配列部分を内部ファイルとして使用できないので注意してくださ
い。
内部ファイル内の記録の探査方法は、書式付き順次ファイル内の記録の探査方法と同じです。詳
細は、206 ページの「書式付き入出力」の項を参照してください。内部ファイルを使用するプロ
グラムの例については、226 ページの「内部ファイル」の項を参照してください。
202
第8章
入出力およびファイル処理
装置へのファイルの接続
装置へのファイルの接続
プログラムで外部ファイルに対して入出力処理を実行する前に、ファイルと装置番号との論理接
続を確立しなければなりません。接続が確立されたら、対応する装置番号 ( 負でない整数式 ) を
指定して、プログラムでそのファイルを引用できます。次の例では、OPEN 文で装置番号 1 を
ファイル my_data に接続し、WRITE 文で total_acct および balance の値を my_data に書き
込むようにしています。
OPEN (UNIT=1, FILE='my_data')
WRITE (1, '(F8.2)') total_acct, balance
後述の項では、次の 3 種類の装置番号について説明します。
•
OPEN 文を使用して明示的に接続する装置番号
•
事前に接続済みの装置番号
•
自動的に開かれる装置番号
外部ファイルへ接続する
通常、外部ファイルと装置番号との接続は、OPEN 文によって確立されます。プログラムがファ
イルの使用を完了すると、CLOSE 文によって接続を解除します。接続が解除されたら、別の
OPEN 文を使用して装置番号を他のファイルに割り当てることができます。また、CLOSE 文に
よって接続が解除されたファイルは、同じ装置番号または異なる装置番号に再接続できます。
装置を一度に複数のファイルに接続することはできません。
次のコードでは、装置 9 と外部ファイル first_file との接続を確立しています。この外部ファ
イルは、デフォルトで順番探査用に開かれます。プログラムがファイルの使用を完了すると、
CLOSE 文によって接続が解除され、装置番号は他のファイルへの接続に使用可能になります。
CLOSE 文の後で、プログラムは装置 9 を別の外部ファイル new_file に接続します。
! connect unit 9 to first_file
OPEN (9, FILE='first_file')
...
! process file
...
! terminate connection
CLOSE (9)
! connect same unit number to new_file
OPEN (9, FILE='new_file')
第8章
203
入出力およびファイル処理
装置へのファイルの接続
...
! process file
...
! terminate connection
CLOSE (9)
内部ファイルに対して入出力を実行する
内部ファイルは装置番号に接続されないので、OPEN 文は不要です。この種のファイルは、文字
変数として引用されます。次の例では、WRITE 文で並び入出力を使用して、データを char_var
から内部ファイル int_file に転送しています。int_file は長さ 80 文字として宣言されてい
るので、char_var の長さは 80 文字以内とみなされます。
CHARACTER(LEN=80) :: int_file
...
WRITE (FILE=int_file, FMT=*) char_var
内部ファイルについての詳細は、201 ページの「内部ファイル」の項を参照してください。
事前に接続済みの装置番号
装置番号 5, 6 および 7 は事前に接続されているので、明示的に開く必要はなく、システム定義
ファイルに次のように接続されます。
•
装置 5 は標準入力に接続されます。つまり、デフォルトでは、プログラムを実行中の処理系
のキーボードに接続されます。
•
装置 6 は標準出力に接続されます。つまり、デフォルトでは、プログラムを実行中の処理系
の端末 / ディスプレイに接続されます。
•
装置 7 は標準エラーに接続されます。つまり、デフォルトでは、プログラムを実行中の処理
系の端末 / ディスプレイに接続されます。
定義済みの各論理装置は、Fortran 90 プログラムの実行中に自動的に開かれ、そのプログラムの
存続期間中は開かれたままです。たとえば、あらかじめ OPEN 文を実行しなくても、PRINT 文で
標準出力が使用できることを意味します。事前に接続されている論理装置に対して CLOSE を実
行しても効果はありません。
事前に接続されている装置番号は、OPEN 文で新規ファイルに割り当てて再利用できます。ただ
し、事前に接続されている装置番号を新規ファイルに接続すると、元の接続先には再接続できな
くなります。
HP-UX の入出力リダイレクション (< および >) 演算子とパイプ (|) 演算子を使用すると、標準入
力、標準出力または標準エラーから、選択したファイルにリダイレクトできます。
204
第8章
入出力およびファイル処理
装置へのファイルの接続
自動的に開かれる装置番号
OPEN 文によってファイルと接続されていない装置番号は、READ または WRITE 文を使用して自
動的に開くことができます。自動的に開くときのファイル名は、次の形式の文字列です。
ftnXX
ここで XX は、01 ~ 99 の範囲の装置番号に置換されます。
ftnXX = path 形式の環境変数を代入すると、path で指定したファイルが開かれます。それ以外
の場合は、名前が ftnXX のファイルが現在のディレクトリ内で開かれます。そのファイルが存
在しなければ、作成されます。
次のプログラムを参照してください。
PROGRAM Auto
WRITE (11,'(A)') 'Hello, world!'
END
このプログラムでは、次の文字列
Hello, world!
がファイル ftn11 に書き込まれます。
このプログラムをコンパイルして a.out にし、次のように (/bin/sh または /bin/ksh を使用し
て ) 実行する場合を考えます。
ftn11=datafile
export ftn11
a.out
出力文字列はファイル ftn11 の代わりに datafile に書き込まれます。
自動的に開かれるファイルは、常に順次ファイルとして開かれます。記録長や書式など、自動的
に開かれるファイルの他の特性は、そのファイルを作成するデータ転送文によって決まります。
文が書式付き、並び入出力または変数群入出力でなければ、ファイルは書式なしファイルとして
作成されます。
第8章
205
入出力およびファイル処理
ファイル探査方法
ファイル探査方法
HP Fortran では、順番探査と直接探査の両方が可能です。探査方法は、ファイルを装置番号に
接続するときに、OPEN 文で指定します。次の例では、ファイル new_data を直接探査用に開き
ます。
OPEN(40, ACCESS='DIRECT', RECL=128, FILE='new_data')
探査方法を指定しなければ、このファイルは順番探査用に開かれます。
後述の項では、順番探査方法と直接探査方法について説明します。
順番探査
順番探査用に開いているファイル内の記録は、書き込まれた順番でしか探査できません。順次
ファイルは、書式付き記録または書式なし記録で構成されています。記録が書式付きであれば、
並び入出力文、変数群入出力文および書式付き入出力文を使用して操作できます。書式なし記録
の場合は、書式なし入出力文だけを使用しなければなりません。順次ファイルの最後の記録は、
ファイル終了記録です。
後述の項では、順次ファイルに使用できる次の種類の入出力について説明します。
•
書式付き入出力
•
並び入出力
•
変数群入出力
•
書式なし入出力
書式付き入出力
書式付き入出力では、書式仕様を使用してプログラムとの間のデータ入出力の体裁が定義され、
表示用に編集された ASCII 記録が生成されます ( 書式仕様についての詳細は、235 ページの「書
式仕様」の項を参照 )。データは、必要に応じて 2 進値と文字形式間で変換され、転送されます。
書式なし入出力用に接続されているファイルでは、書式付き入出力を実行できません。詳細は、
212 ページの「書式なし入出力」の項を参照してください。
書式付き入出力は、書式仕様を含むデータ転送文を使用しなければ実行できません。書式仕様
は、データ転送文内で定義するか、その文で引用する FORMAT 文で定義します。
書式付きファイルを探査するプログラムの例については、230 ページの「ファイル探査」の項を
参照してください。
206
第8章
入出力およびファイル処理
ファイル探査方法
並び入出力
並び入出力は、データが転送されるときに変換されるという点で書式付き入出力に似ています
が、書式を制御するための書式仕様を使用しません。代わりに、データはそのデータの型に従っ
て編集されます。通常、並び入出力は、標準入力からの読み込みと標準出力への書き出しに使用
されます。
並び入出力では、次の READ 文のように、編集記述子の並びの代わりに書式識別子としてアスタ
リスク (*) が使用されます。この例では、
READ *, A, B, C
並び入出力は、内部ファイルと書式付きの順次外部ファイルでしか実行できません。この種の入
出力は、両方のファイルタイプに対して同じように機能します。
入力 並び入力用の入力データは、1 つ以上の空白、スラッシュ、または前後に任意の数の空白
が付いたコンマで区切られた値で構成されます ( スラッシュの後に値を記述しないで使用 )。文
字定数内を除き、記録終了も区切り記号として機能します。最初の記録読み込み時の先行する空
白は、後にスラッシュまたはコンマが付いていなければ、値区切り子の一部とはみなされませ
ん。
入力値として、表 8-1 に示す任意の値を使用できます ( 空白は記号 b で表されています )。
表 8-1 並び入出力の入力値
値
意味
z
空値。ゼロ個以上の空白を囲む 2 つの連続する区切り記号で表
される (b/ など )。
c
途中に空白がない定数表現。I, F, A または L 編集記述子で読み
込み可能でなければならない。2 進、8 進および 16 進データ
は不正。
r*c
入力記録内で c の出現個所が連続して r 個 ( 整数 ) あるのと等
価。たとえば、5*0.0 は 0.0 0.0 0.0 0.0 0.0 と等価。
r*z
z の出現個所が連続して r 個あるのと等価。
読み込みは、常に新規記録の先頭から始まります。入力記録内でスラッシュが発生しない限り、
記録は並びが満たされるまで読み込まれます。スラッシュには、直前の値の転送後に READ 文を
終了させる効果があり、現在記録内の残りのデータは無視されます。
第8章
207
入出力およびファイル処理
ファイル探査方法
表 8-2 は、並び入力データの編集規則の概要です。
表 8-2 並び入力データの形式
データの型
入力データの規則
整数型
整定数と同じ規則が適用さます。
実数型および
倍精度実数型
実数型と倍精度実数型に有効な形式。また、符号付き
整定数で指数を示すことができ (Q, D または E は省略
可能 )、小数部がない値の場合は小数点を省略できま
す。
複素数型およ
び倍精度複素
数型
コンマで区切られ、かっこで囲まれた 2 つの整定数、
実定数または倍精度実定数。最初の数値は複素数また
は倍精度複素数の実部で、2 番目の数値は虚部です。
各数値の前または後に、空白または終了記録を付ける
ことができます。
論理型
文字で構成され、そのうち空白でない最初の文字は真
を表す T または偽を表す F でなければなりません ( 省
略可能な小数点を除く )。整定数でもかまいません。
文字型
文字定数と同じ形式。定数に区切り記号が含まれる場
合にのみ、一重引用符または二重引用符で区切る必要
があります。囲み記号は入力時に破棄されます。文字
定数は、ある記録から次の記録へと継続できます。終
了記録に達しても、空白や他の文字が定数の一部にな
ることはありません。文字定数の長さが項目の長さ
len より長ければ、定数の左端から len 文字分だけ転
送されます。定数の長さが len 以下であれば、その定
数は項目内で後続の空白を使用して左詰めされます。
出力 並び出力の編集は、出力項目並び内のデータの型と値、および OPEN 文の DELIM 指定子の
値によって決まります (DELIM 指定子についての詳細は、265 ページの第 10 章 「HP Fortran
文」の OPEN 文の説明を参照 )。
208
第8章
入出力およびファイル処理
ファイル探査方法
表 8-3 は、各データ型の表示を決定する規則をまとめたものです。
表 8-3 並び出力データの編集
データの
型
出力データの編集規則
整数型
整定数として出力。
実数型お
よび倍精
度実数型
大きさに応じて指数を付けたり付けなかったりして出力。
また、データの有効桁数をできるだけ厳密に保つのに適し
た欄の幅と小数点以下の桁を出力。
複素数型
コンマで区切られ、かっこで囲まれた 2 つの数値として出
力。
論理型
並び要素の値が .TRUE. であれば T を出力し、それ以外の
場合は F を出力します。
文字型
Alen 編集記述子を使用する出力。ここで len は文字式の
長さです ( 二重使用を考慮して調整 )。DELIM='NONE' ( デ
フォルト ) であれば、一重引用符 (') または二重引用符 (”)
は二重使用されず、記録は並び入力に適さない場合があり
ます。DELIM= で指定された値が 'NONE' でなければ、指定
した囲み記号だけが二重使用されます。文字列は囲み記号
なしの出力であり、これも並び入力には不適切になります。
文字値を除き、すべての出力には先行の空白が 1 個だけ付きます。また、ファイルの出力時に
ASA 復帰制御を提供するために、各記録の先頭にも空白文字が挿入されます。詳細は、225
ページの「ASA 復帰制御」の項を参照してください。たとえば、次の文を考えます。
PRINT *, 'Hello, world!'
この文では、次の行が出力されます ( ここで b は空白を示します )。
bHello,bworld!
出力項目の値の長さが 79 文字を超える場合は、現在記録が書き出され、新規記録が開始されま
す。
空値および値区切り子のスラッシュは、並び出力文では出力されません。
第8章
209
入出力およびファイル処理
ファイル探査方法
変数群入出力
変数群入出力では、データ転送文で NML 指定子を使用して変数群名を引用し、変数群を転送でき
ます。NAMELIST 文では、変数群内の変数を指定して変数群に名前を付けます。
並び入出力と同様に、変数群入出力では、データの編集時に書式仕様を使用せず、データの型に
よって決定されたデフォルト書式が使用されます。
次の例で、NAMELIST 文は変数群 name_group を定義しています。i, j および c で構成されてい
ます。READ 文では、装置番号 27 に接続されているファイルから、記録が name_group に読み込
まれます。次に、PRINT 文では、name_group 内の変数から標準出力にデータが書き出されます
(HP Fortran では、拡張機能として変数群入出力で PRINT 文のこのような使用が許されます )。
INTEGER :: i, j
CHARACTER(LEN=10) :: c
NAMELIST /name_group/ i, j, c
...
READ (UNIT=27,NML=name_group)
PRINT name_group
記録の出力時に ASA 復帰制御を提供できるように、変数群出力の記録はそれぞれ空白文字で始
まります (225 ページの「ASA 復帰制御」の項を参照 )。
変数群入出力は、書式付きの順次外部ファイルでしか実行できません。
次のプログラムは、変数群入出力を示しています。
PROGRAM namelist
INTEGER, DIMENSION(4) :: ivar
CHARACTER(LEN=3), DIMENSION(3,2) :: cvar
LOGICAL :: lvar
REAL :: rvar
NAMELIST /nl/ ivar, cvar, lvar, rvar
READ (*,nl)
PRINT nl
END PROGRAM namelist
入力データが次のようになっている場合を考えます。
&nl
ivar = 4,3,2,1
lvar=toodles
cvar=,,'QRS',2*,2*'XXX'
rvar=5.75E25, cvar(3,2)(1:2)='AB'
/
この場合、出力は次のとおりです。
210
第8章
入出力およびファイル処理
ファイル探査方法
b&NLbIVAR
= 4 3 2 1bCVAR
='', 'QRS', '',
'', 'XXX', 'ABX'bLVAR
= TbRVAR
=
5.75000E+25b/
後述の項では、変数群入出力の形式について説明します。NAMELIST 文についての詳細は、403
ページの「NAMELIST」の項を参照してください。
入力 変数群入力の記録の形式は、次のとおりです。
1. アンパサンド (&) の直後に変数群名が続きます。変数群名は、あらかじめ NAMELIST 文で定義
しておかなければなりません。
拡張機能として、アンパサンドの代わりにドル記号 ($) を使用できます。
2. 名前 - 値のペアおよび値区切り子で構成される並び。名前 - 値のペアは、変数群内の変数名、
等号 (=)、および並び入力と同じ形式の値 (z, c, r*c および r*) で構成されます。名前 - 値の
ペアは、並びに任意の順序で記述でき、省略してもかまいません。
値区切り子として、次のいずれかを使用できます。
•
空白
•
タブ
•
改行文字
•
前述のいずれかにコンマを 1 個付けたもの
3. 終了を表すスラッシュ (/)。拡張機能として、スラッシュの代わりに ($END) を使用すること
ができます。
文字型の名前は、部分列範囲で修飾でき、配列名は添え字 / 部分配列で修飾できます。名前 - 値
のペアに含まれる名前が配列名であれば、等号に続く値の数は、配列内の要素数を超えてはなら
ず、値区切り子で区切らなければなりません。値の数が要素数より少なければ、残りの要素には
空値が与えられます。
変数群入力の値は、並び入力のデータと同じ規則に従って編集されます。詳細は、表 8-2 を参照
してください。
出力 変数群出力の記録の形式は、入力記録と同じですが、次のような例外があります。
•
変数群名は、常に大文字で表記されます。
•
論理値は T または F のどちらかになります。
•
並び出力と同様に、文字値はデフォルトで囲み記号を付けずに出力されるので、変数群入力
には不適切です。ただし、OPEN 文で DELIM 指定子が使用されると、文字定数に使用する囲
み記号の一重引用符または二重引用符を使用します。
第8章
211
入出力およびファイル処理
ファイル探査方法
•
2 つの記録に分割できるのは、文字値と複素数値だけです。
書式なし入出力
書式なし入出力では、転送データの形式変換を行いません。代わりに、データはコンピュータの
内部形式で保存されます。書式付き入出力用に接続されているファイルでは、書式なし入出力を
実行できません (206 ページの「書式付き入出力」の項を参照 )。
書式なし入出力では、転送時に変換によるオーバーヘッドが発生しないので、書式付き入出力、
並び入出力、変数群入出力よりも効率的です。ただし、書式なし入出力の場合、データは内部形
式で転送されるため、移植性がありません。
直接探査
直接探査ファイルで入出力を実行する場合は、記録を任意の順序で読み書きできます。直接探査
ファイル内の記録は、すべて同じ長さになっています。
記録の読み書きは、REC 指定子を含む READ 文と WRITE 文によって実行されます。各記録は、正
の整数の記録番号で識別されます。たとえば、最初の記録は記録番号 1、2 番目の記録は記録番
号 2 となります。REC 指定子を指定しなければ、次のようになります。
•
READ 文を実行すると、現在記録から入力され、ファイルポインターが直後の記録に移動しま
す。
•
WRITE 文を実行すると、ファイルポインターの位置にある記録に出力され、ファイルポイン
ターは直後の記録に進められます。
HP Fortran では、拡張機能として、順番探査の入出力文を使用して、直接探査用に接続されて
いるファイルを探査できます。
個々の記録の記録番号は、一度定めると変更や削除することはできませんが、記録を書き直すこ
とはできます。直接探査ファイルは、記録番号を持つファイルの部分として、ファイル終了記録
を含みません。したがって、直接探査による入力文または出力文を使用してファイルを探査する
場合、END 指定子は不正なので使用できません。
直接探査ファイルでは、書式付き記録と書式なし記録の両方がサポートされます。書式付き入出
力と書式なし入出力の動作は、順次ファイルの場合とまったく同じです。ただし、直接探査ファ
イルでは、並び入出力、変数群入出力または停留入出力は行えません。
直接探査を使用するプログラムの例については、230 ページの「ファイル探査」の項を参照して
ください。
212
第8章
入出力およびファイル処理
停留入出力
停留入出力
デフォルトでは、データ転送によって、ファイルは最後に読み書きされた記録の後の位置に配置
されます。この種の入出力を前進書式付き順番探査入出力と呼びます。Fortran 90 では、停留入
出力を実行できます。停留入出力の場合、ファイルは最後に読み書きされた文字の直後の位置に
配置され、直後の記録へは前進しません。この入出力は文字指向であり、順番探査用に開かれて
いる外部ファイルにだけ使用することができます。並び入出力や変数群入出力には使用できませ
ん。
停留入出力を使用するには、READ または WRITE 文で ADVANCE='NO' 指定子を指定しなければな
りません。230 ページの「ファイル探査」の項のプログラム例では、次のように最初の WRITE
文に停留入出力が使用されています。
WRITE (6, FMT='(A)', ADVANCE='NO') &
' Enter number to insert in list:
'
停留入出力を WRITE 文で使用すると、通常は記録の終わりに出力される改行文字が抑止されま
す。これは、このプログラム例では望ましい効果です。停留 WRITE 文を使用すると、READ 文へ
のユーザー入力はプロンプトとして、同じ行にとどまります。
改行編集記述子 ($) でも同じ効果が得られます。この編集記述子も、記録の終わりで復帰 / 行送
りを抑止する HP Fortran の拡張機能です。239 ページの「改行編集記述子 ($)」の項を参照して
ください。
READ 文での停留入出力を示すプログラム例については、226 ページの「プログラム例」の項中
の 228 ページの「停留入出力」の項を参照してください。停留入出力と ADVANCE 指定子の詳細
は、第 10 章の READ 文と WRITE 文の説明を参照してください。
第8章
213
入出力およびファイル処理
入出力文
入出力文
HP Fortran では、次の 3 種類の入出力文がサポートされます。
•
データ転送文 ( 表 8-4 を参照 )
•
ファイル位置付け文 ( 表 8-5 を参照 )
•
補助入出力文 ( 表 8-6 を参照 )
すべての入出力文についての詳細は、265 ページの第 10 章 「HP Fortran 文」を参照してくだ
さい。
表 8-4 データ転送文
文
用途
ACCEPT
事前に接続されているデフォルトの入力装置 ( 標準入力 )
からデータを入力する ( 拡張 )。
DECODE
内部ファイルからデータを入力する ( 拡張 )。
ENCODE
内部ファイルにデータを出力する ( 拡張 )。
PRINT
事前に接続されているデフォルトの出力装置 ( 標準出力 )
にデータを出力する。
READ
接続されている装置または自動的に開かれる装置から
データを入力する。
TYPE
PRINT 文と同義 ( 拡張 )。
WRITE
接続されている装置または自動的に開かれる装置にデー
タを出力する。
214
第8章
入出力およびファイル処理
入出力文
注記
DECODE 文と ENCODE 文は内部ファイル用の互換性拡張機能として使用できます
が、移植性はなく、Fortran の旧バージョンとの下位互換性を保つために用意さ
れています。プログラムを規格に合致した移植可能なものにしておくには、外部
ファイルと内部ファイルの両方に READ 文と WRITE 文を使用しなければなりませ
ん。
ACCEPT 文と TYPE 文も、標準入力からの読み込みと標準出力への書き出しに使用
する互換性拡張機能として使用できます。ただし、プログラムを移植可能にして
おく場合は、ACCEPT 文と TYPE 文の代わりに READ 文と PRINT 文を使用しなけれ
ばなりません。
表 8-5 ファイル位置付け文
文
用途
BACKSPACE
接続されている順次ファイルのファイルポインターを直
前の記録の先頭に移動する。
ENDFILE
順次ファイルの直後の記録としてファイル終了記録を書
き込む。
REWIND
接続されているファイルのファイルポインターを、その
ファイルの開始位置に移動する。
表 8-6 補助入出力文
文
用途
CLOSE
装置をファイルから接続解除する。
INQUIRE
ファイルまたは装置に関する情報を問い合わせる。
OPEN
既存ファイルを装置に接続するか、ファイルを作成して
装置に接続するか、またはファイルと装置の接続の特定
の指定子を変更する。
第8章
215
入出力およびファイル処理
入出力文の構文
入出力文の構文
ファイル位置付け文と補助入出力文の一般的な構文形式は、次のとおりです。
statement-name (io-specifier-list)
statement-name
表 8-5 または表 8-6 に示す文の 1 つです。
io-specifier-list
文の処理を制御する I/O 指定子をコンマで区切った並びで
す。
データ転送文の一般形式は、次のとおりです。
statement-name (io-specifier-list) data-list
statement-name
表 8-4 に示す文の 1 つです。
io-specifier-list
データ転送を制御する I/O 指定子をコンマで区切った並びで
す。
data-list
入出力項目をコンマで区切った並びです。
次の項では、I/O 指定子と data-list の形式について説明します。個々の入出力文の構文につ
いての詳細は、265 ページの第 10 章 「HP Fortran 文」を参照してください。
I/O 指定子
I/O 指定子は、ファイルまたはデータ転送操作の追加情報を入出力文に指定します。また、I/O
指定子を ( 特に INQUIRE 文で ) 使用して、ファイルの情報を得ることもできます。表 8-7 は、
HP Fortran でサポートされるすべての I/O 指定子と、各指定子を使用できる文を示しています。
ACCEPT, DECODE, ENCODE および TYPE 文は規格に定められていないもののため、この表には含ま
れていないので注意してください。すべての I/O 指定子と文についての詳細は、265 ページの第
10 章 「HP Fortran 文」を参照してください。各指定子を使用できる入出力文の下に、入出力指
定子の説明があります。
表 8-7 入出力文および指定子
WRITE
REWIND
READ
PRINT
OPEN
INQUIRE
ENDFILE
216
CLOSE
ACCESS=
BACKSPAC
入出力指定子
○ ○
第8章
入出力およびファイル処理
入出力文の構文
表 8-7 入出力文および指定子 ( 続き )
○
BLANK=
○ ○
DELIM=
○ ○
DIRECT=
○
END=
○
EOR=
○
○ ○ ○ ○ ○
EXIST=
○
FILE=
○ ○
FORM=
○ ○
FORMATTED=
○
IOLENGTH=
○
○ ○ ○ ○ ○
NAME=
○
NAMED=
○
NEXTREC=
○
NUMBER=
第8章
○
○ ○ ○
○
NML=
○
○ ○ ○
○
FMT=
IOSTAT=
WRITE
○ ○
ADVANCE=
ERR=
REWIND
READ
PRINT
OPEN
INQUIRE
ENDFILE
CLOSE
ACTION=
BACKSPAC
入出力指定子
○
○
217
入出力およびファイル処理
入出力文の構文
表 8-7 入出力文および指定子 ( 続き )
○ ○
POSITION=
○ ○
READ=
○
READWRITE=
○
○
REC=
RECL=
○ ○
SEQUENTIAL=
○
UNFORMATTED=
UNIT=
WRITE=
○
○
SIZE=
STATUS=
WRITE
PAD=
REWIND
○
READ
OPENED=
PRINT
OPEN
INQUIRE
ENDFILE
CLOSE
BACKSPAC
入出力指定子
○
○
○
○ ○ ○ ○ ○
○ ○ ○
○
入出力項目並び
入出力項目並びは、変数群入出力以外のどのデータ転送文にも使用できます ( 詳細は、210 ペー
ジの「変数群入出力」の項を参照 )。入出力項目並びの一般形式は、次のとおりです。
item1[, item2...]
ここで item は、単純データ要素または入出力 DO 形反復です。
後述の項では、単純データ要素と入出力 DO 形反復について説明します。
218
第8章
入出力およびファイル処理
入出力文の構文
単純データ要素
入力処理における単純データ要素は、次の変数です。
•
スカラ
•
配列
•
配列要素または部分配列
•
部分列
•
構造体
•
構造体の成分
•
旧形式の構造体
•
旧形式の構造体の成分
•
ポインター
出力処理では、入力処理で使用できる変数だけでなく、ほとんどの式を単純データ要素に含むこ
とができます。入出力項目中の式に関数引用がある場合、その関数自体で入出力を実行してはな
らないので注意してください。
次の PRINT 文の出力項目並びには、2 つの単純データ要素、つまり変数 radius と radius から
形成された式が含まれています。
99 FORMAT('Radius = ', F10.2, 'Area = ', F10.2)
PRINT 99, radius, 3.14159*radius**2
次の READ 文には、3 つの単純データ要素、つまり部分列 (name(1:10))、変数 (id) および配列
名 (scores) が含まれています。
88 FORMAT(A10,I9,10I5)
READ(5, 88) name(1:10), id, scores
WRITE 文の入出力項目並び内で単純データ要素として配列名が使用される場合は、その配列内の
各要素が出力されます。書式仕様が使用される場合は、その書式が必要に応じて再利用され、各
要素が出力されます。たとえば、次のコードを考えます。
INTEGER :: i(10) = (/1,2,3,4,5,6,7,8,9,10/)
88 FORMAT('
N1:',I5, ' N2:',I5, ' N3:',I5)
PRINT 88, i
このコードの場合、出力は次のとおりです。
第8章
219
入出力およびファイル処理
入出力文の構文
N1:
N1:
N1:
N1:
1
4
7
10
N2:
N2:
N2:
N2:
2 N3:
5 N3:
8 N3:
3
6
9
入出力における配列の使用には、次の制限条項が適用されます。
•
ベクトル添え字の部分配列は、内部ファイルとして使用できません。
•
大きさ引き継ぎ配列は、入力項目または出力項目として全体配列で引用できません。
入出力における構造体 ( 旧形式を含む ) の使用には、次の制限条項が適用されます。
•
構造体のすべての成分は、そのデータ転送文を含む有効域内で参照可能でなければなりませ
ん。
•
構造体のすべての成分が書き込まれます。
•
入出力項目並び内の構造体は、変数引用の最終成分である末端成分の POINTER 属性の成分を
含んでいてはいけません。つまり、成分の引用が a%b%c である場合、a はポインターでもか
まいませんが、b はポインターであってはいけません。
入出力 DO 形反復
入出力 DO 形反復は、入力、出力、または初期化されるデータ要素の並びと、反復の指定の集合
で構成されています。入出力 DO 形反復の構文は、次のとおりです。
(list , index = init , limit [, step ])
list
入出力項目並びで、他の入出力 DO 形反復を含めることができます。
index
入出力 list 形項目並び内の要素が読み書きされる回数を制御する整変数で
す。実変数の使用もサポートされていますが、廃止予定事項です。
init
入出力 DO 形反復の開始時に index に代入される初期値である式です。
limit
index の終了値である式です。
step
DO 形反復の実行ごとに index を増分または減分する値の式です。step は、
正でも負でもかまいません。デフォルト値は 1 です。
内側の DO 形反復には、外側の DO 変数を使用できます。
入出力 DO 形反復の動作は、DO 構文と同じです。入出力 DO 形反復で繰り返す範囲は、入出力さ
れる要素の並びです。入出力 DO 形反復では、出力処理に有効なデータ要素の並びを転送できま
す。index には、反復の開始時に init の値が代入されます。実行は、DO ループの場合と同様に
反復されます (136 ページの「DO 構文」の項を参照 )。
220
第8章
入出力およびファイル処理
入出力文の構文
通常、入出力 DO 形反復は、次のように配列の配列要素ごとの転送に使用されます。
INTEGER :: b(10)
PRINT *, (b(i), i = 1,10)
b が値 1 ~ 10 で順番に初期化されていれば、PRINT 文では次の出力が生成されます。
1 2 3 4 5 6 7 8 9 10
並び内で添え字なしの配列名が現れると、繰り返しごとに配列全体が転送されます。次に例を示
します。
REAL :: x(3)
PRINT *, (x, i=1, 2)
x が [ 1 2 3 ] に初期化されていれば、出力は次のようになります。
1.0 2.0 3.0 1.0 2.0 3.0
並びには、DO 変数を使用する式を含めることができます。次に例を示します。
REAL :: x(10) = (/.1, .2, .3, .4, .5, .6,
PRINT *, (i*2, x(i*2), i = 1, 5)
.7, .8, .9, 1 /)
この例では、次の数値が出力されます。
2 .2 4 .4 6 .6 8 .8 10 1
また、入出力 DO 形反復は入れ子にすることもできます。入れ子にした入出力 DO 形反復の形式
は、次のとおりです。
(((list, index1 = init1, limit1, step1), index2 = init2, limit2,
step2) ... indexN = initN, limitN, stepN)
入れ子の入出力 DO 形反復には、他の入れ子の DO 形反復の場合と同じ規則が適用されます。た
とえば、例として次の文を示します。
REAL :: a(2,2)
a(1,1)
a(2,1)
a(1,2)
a(2,2)
=
=
=
=
1
2
3
4
WRITE(6,*)((a(i,j),i=1,2),j=1,2)
この場合、出力は次のようになります。
1.0 2.0 3.0 4.0
第8章
221
入出力およびファイル処理
入出力文の構文
つまり内側の DO 形反復は、外側の DO 形反復が実行されるたびにいったん完全に実行されます。
222
第8章
入出力およびファイル処理
バイナリ入出力変換 (Itanium® ベース システム )
バイナリ入出力変換 (Itanium® ベース システム )
この機能を使用すると、さまざまな入出力装置でのすべての書式なし順次データの入出力で、バ
イナリ変換を実行するように指定することができます。OPEN コマンドと INQUIRE コマンド
はどちらも、CONVERT 引き数を受け付けます。
使用可能な変換
使用可能な変換には次の 2 種類があります。
•
Native— デフォルトの指定であり、変換は実行されません。“Big_Endian” と指定しても同じ
です。
•
Little_Endian— データを読み込む際に Little_Endian 形式から Native 形式に変換し、データ
をディスクへ書き込む際に Little_Endian 形式に戻します。
OPEN 文に CONVERT パラメータを指定したときには、その入出力装置に対するすべての入出
力で、指定した変換が実行されます。
INQUIRE 文に CONVERT パラメータを指定したときには、指定した入出力装置で実行時に実
行される変換を示す文字列が返されます。
実行する変換の種類を指定する方法には、OPEN 文に CONVERT パラメータを指定する方法以
外に、2 つの方法があります。
•
環境変数 FORT_CONVERT<unit> (<unit> は、変換を行う入出力装置の番号 ) に、指定可能
な変換の種類 (Native または Little Endian) のいずれかを指定すると、その入出力装置で
は、その入出力装置を参照する OPEN 文のそれぞれに CONVERT パラメータを指定したの
と同じように、変換が実行されます。プログラムで使用しているすべての入出力装置につい
て変換を有効にするためには、多くの環境変数を定義する必要があります。
•
入出力装置番号を伴わないグローバル環境変数 FORT_CONVERT があり、これを使用する
と、プログラムで使用しているすべての入出力装置に対して指定したことになります。
バイナリ変換の指定方法
変換の対象とするファイル / 装置および適用する変換の種類を指定する方法には、以下の 3 つが
あります ( 優先順位の高い順に示します )。
•
環境変数 : “FORT_CONVERT<unit_num>”
•
環境変数 : “FORT_CONVERT”— すべての入出力装置を対象とする
第8章
223
入出力およびファイル処理
バイナリ入出力変換 (Itanium® ベース システム )
•
OPEN 文のパラメータ : “CONVERT=”
通常、コードは OPEN 文および INQUIRE 文に CONVERT= パラメータを指定して記述されま
す。そのため、環境変数による方法は、「通常の」コーディングを無効にできるように優先順位
が高く設定されています。
注記
OPEN 文の CONVERT パラメータは、f90 バージョン 2.7 以降でのみ利用でき、
UNFORMATTED ファイルでのみ受け付けれらます。
224
第8章
入出力およびファイル処理
ASA 復帰制御
ASA 復帰制御
プログラム asa(1) は、ASA 復帰制御文字を使用する Fortran 90 プログラムの出力を、多数のプ
リンターで適切に扱えるように処理できます。
asa の構文は、次のとおりです。
asa [file-names]
ここで file-names は、ASA 規則に従って解釈される復帰制御文字付きで出力されたファイル
名の並びです。
表 8-8 は、ASA 復帰制御文字とその意味を示しています。
表 8-8 ASA 復帰制御文字
文字
意味
空白
空白
0
2 行前進する。
1
次ページの先頭に前進する。
+
前進しないで直前の 1 行を重ね打ちする。
asa は file-names から入力を読み込みます。また、file-names を指定しなければ、標準入力
から入力を読み込みます。各行の 1 文字目は、制御文字と解釈されます。表 8-8 に示す以外の文
字で始まる行は、空白で始まるものと解釈され、標準エラーに適切な診断が表示されます。asa
プログラムでは、入力行が解釈され、その出力が標準出力に送信されます。各入力ファイルは、
新しいページから始まります。
asa 復帰制御文字を使用するプログラムの出力を正しく表示するには、asa をフィルターとして
使用する必要があります。たとえば、次の例では、ASA 復帰制御文字を使用して各行を出力す
る実行可能 HP Fortran プログラム fortran_asa の出力が、asa フィルターを介してラインプ
リンターコマンド lp に引き渡されます。
fortran_asa | asa | lp
第8章
225
入出力およびファイル処理
プログラム例
プログラム例
本項には、HP Fortran の入出力およびファイル処理機能を示すプログラム例が記載されていま
す。
内部ファイル
次の例 int_file は、内部ファイルの内部で編集記述子をどのように使用できるかを示していま
す。プログラム内の注釈は、プログラムの動作を詳細に示す説明です。
例 8-1
int_file.f90
! The main program is a driver for the function roundoff, which
! truncates and rounds a floating-point number to a requested
! number of decimal places. The main program prompts for two
! numbers, a double-precision number and an integer. These are
! passed to the function roundoff as arguments. The
! double-precision argument (x) is the value to be rounded, and
! the integer (n) represents the number of decimal places for
! rounding. The function converts both arguments to character
! format, storing them in separate internal files. The function
! uses the F edit descriptor (to which n in character format has
! been appended) to round x. This rounded value is finally
! converted back from a character string to a double-precision
! number, which the function returns.
PROGRAM main
REAL (KIND=8) :: x, y, roundoff
! Use nonadvancing I/O to suppress the newline and keep the
!
prompt on the same line as the input.
WRITE (6, '(X, A)', ADVANCE='NO') 'Enter a real number: '
READ (5, '(F14.0)') x
WRITE (6, '(A)') 'How many significant digits (1 - 9) to the'
WRITE (6,'(X, A)',ADVANCE='NO') 'right of the decimal point? '
! Don’t enter a number greater than you input into x!
READ (5, '(I1)') n
y = roundoff(x, n)
PRINT *, y
END PROGRAM main
226
第8章
入出力およびファイル処理
プログラム例
! This function truncates and rounds x to the number of decimal
! places specified by n. The function performs no error
! checking on either argument.
REAL (KIND=8) FUNCTION roundoff(x, n)
INTEGER :: n
REAL (KIND=8) :: x
CHARACTER (LEN=14) :: dp_val
CHARACTER :: dec_digits
! Use an edit descriptor to convert the value of n to a
!
character; write the result to the internal file
!
dec_digits.
WRITE (dec_digits, '(I1)') n
! Concatenate dec_digits to the string 'F14.'. The complete
! string forms an edit descriptor that will convert the
! binary value of x to a formatted value of x to a
! formatted character string that formats the
! value. The character represents the requested level of
! precision. The formatted number is stored in the internal
! file dp_val.
WRITE (dp_val, '(F14.'//dec_digits//')') x
! Re-convert the formatted record in dp_val to a binary
! value that the function will return.
READ (dp_val, '(F14.0)') roundoff
END FUNCTION roundoff
次のコマンド行でコンパイルし、実行した場合、実行例の出力は次のようになります。
$ f90 int_file.f90
$ a.out
Enter a real number: 3.1415927
How many significant digits (1 - 9) to the
right of the decimal point? 3
3.142
第8章
227
入出力およびファイル処理
プログラム例
停留入出力
次のプログラムでは、書式付き順次ファイルが、任意数の欄に分割された記録のセットとして読
み込まれます。プログラムでは、停留入出力を使用して、各フィールドが読み込まれ、処理され
ます。注釈は、プログラムの動作を示しています。データファイルの並びに含まれる grades
は、プログラムに読み込まれます。
例 8-2
nonadvance.f90
! This program uses nonadvancing I/O to read a series of
! sequential-file records, character by character. Each
! record is divided into fields. The first field is the name
! of a student and is 20 characters log. Each of the
! remaining fields s a numeric test score and is 3
! i characters long. The name score fields. The program
! reads the name field, then reads each score field
! until it encounters end-of-record. When the
! program encounters end-of-record, it starts a new record.
! When it encounters and end-of-file,
! the program is done. For the sake of simplicity, the
! program does no error-checking.
PROGRAM main
INTEGER :: grade, count, sum, average
CHARACTER(LEN=20) name
OPEN(20, FILE='grades')
WRITE (6, 10) ”Name”, ”Average”
WRITE (6, *) ”--------------------------”
DO ! read and process each record
sum = 0
count = 0
! Read the first field of each record, using nonadvancing
! I/O so as not to advance beyond that field. The END=
! specifier causes the program to exit the loop and branch
! to the statement at 999 when it detects end-of-file.
READ(20, ”(A20)”, ADVANCE='NO', END=999) name
! Read each of the score fields of the record, using
! nonadvancing I/O to avoid advancing to the next record
! after each read. The EOR= specifier causes the program
! to break out of the loop and resume
! execution at the statement labeled 99.
DO ! inner loop to read scores
228
第8章
入出力およびファイル処理
プログラム例
! read a score and convert it to integer
READ(20, ”(I3)”, ADVANCE='NO', EOR=99) grade
count = count + 1
sum = sum + grade
END DO
99
! calculate average
average = sum/count
WRITE(6, 20) name, average
END DO
! write student name and average
10 FORMAT (X, A, T21, A)
20 FORMAT (X, A, I3)
999 CLOSE(20)
END PROGRAM main
例 8-3
Sandra Delford
Joan Arunsoelton
Herman Pritchard
Felicity Holmes
Anita Jayson
Phil Atley
Harriet Myrle
Pete Hartley
grades
79
8
100
97
93
9
84
67
85
64
92
78
85
27
78
54
81
77
87
58
90
35
93
58
72100100
79
65 0
75 88 73
95 68 72 93
49
95 97 92 84 93
71 93 58
次のコマンド行でコンパイルし、実行した場合、実行例の出力は次のようになります。
$ f90 nonadvance.f90
$ a.out
Name
Average
-------------------------Sandra Delford
86
Joan Arunsoelton
57
Herman Pritchard
68
Felicity Holmes
78
Anita Jayson
85
Phil Atley
30
Harriet Myrle
89
Pete Hartley
66
第8章
229
入出力およびファイル処理
プログラム例
ファイル探査
次の例 file_access.f90 は、外部ファイルの順番探査と直接探査を示しています。直接探査用で開
かれているファイルは、スクラッチファイルです。注釈は、プログラムの動作を示しています。
例 8-4
file_access.f90
! This program uses an external file and a scratch file to
! insert a number into a list of numerically sorted numbers.
! The sorted list is held in a external file. The program uses
! the scratch file as a temporary holding place. The program
! uses direct access method with the scratch file.
PROGRAM main
REAL :: number_to_insert, number_in_list
INTEGER :: rec_num, ios1, ios2, i
! Initialize counter.
rec_num = 0
! ios1 must be initialized to 0 so that the error-handling
! section at the end of the program will work correctly
ios1= 0
! Open the scratch file and the sequential data file
OPEN (18, FILE='list', STATUS='UNKNOWN', IOSTAT=ios1, ERR=99)
OPEN (17, STATUS='SCRATCH', ACCESS='DIRECT', FORM='FORMATTED',
&
IOSTAT=ios1, ERR=99, RECL=16)
! Use nonadvancing I/O to suppress newline at the end of output
!
record, thus keeping the prompt on the same line with the
!
input.
WRITE (6, FMT='(A)', ADVANCE='NO') &
' Enter number to insert in list: '
READ *, number_to_insert
! Read from sorted list and write to scratch file until we find
!
where to insert number; then, write number_to_insert, and
!
continue writing remaining sorted numbers to scratch file.
DO WHILE (ios1 >= 0) ! loop only if OPEN didn’t encounter EOF
! The END=15 specifier in the READ statement gets us out of
! the loop, once we’re in it.
READ (18, *, END=10, IOSTAT=ios2, ERR=99) number_in_list
IF (number_to_insert <= number_in_list) THEN
230
第8章
入出力およびファイル処理
プログラム例
rec_num = rec_num + 1
! add the new record
WRITE(17, 100, REC=rec_num) number_to_insert
DO
rec_num = rec_num + 1
WRITE(17, 100, REC=rec_num) number_in_list
READ (18, *, END=15, IOSTAT=ios2, ERR=99) number_in_list
END DO
ELSE
rec_num = rec_num + 1
WRITE (17, 100, REC=rec_num) number_in_list
END IF
END DO
! The file is empty or the item goes at the end of file. Add 1
!
to rec_num for the record to be inserted.
10 rec_num = rec_num + 1
WRITE (17, 100, REC=rec_num) number_to_insert
! Copy the scratch file to the data file. But first rewind
! so that we start writing at beginning of the data file.
15 REWIND 18
! Read from scratch file and write to data file
DO i = 1, rec_num
READ (17, 100, REC=i) number_in_list
WRITE (18, *) number_in_list
END DO
CLOSE (18)
CLOSE (17)
STOP 'Inserted!'
! Error handling section
99 IF (ios1 /= 0) THEN
WRITE (7, 200) ”Open error = ”, ios1
ELSE
WRITE (7, 200) ”Read error = ”, ios2
END IF
100 FORMAT (F16.6)
200 FORMAT (A, 2I6)
END PROGRAM main
次のコマンド行でコンパイルし、実行した場合、実行例の出力は次のようになります。プログラ
ムの実行前後に cat コマンドを使用して list の内容を表示すると、次のようになります。
第8章
231
入出力およびファイル処理
プログラム例
$ f90 file_access.f90
$ cat list
0.5
1.2
2.5
3.5
26.15
$ a.out
Enter number to insert in list:
STOP Inserted!
$ cat list
0.5
1.2
2.5
3.5
4.7
26.15
232
4.7
第8章
9 入出力の編集
入出力の編集は、データ転送処理中に、データが処理系で読み取り可能な 2 進表現と人が読み取
れる文字形式の間で変換されるときに行われます。書式なしデータ転送の方が、データ変換の
オーバーヘッドが発生しないので高速ですが、データを人が読み取れる形式で表示したり、デー
タの内部表現形式が異なるマシン間でデータを転送する場合には、入出力の編集が役立ちます。
入出力の編集は、明示的でも暗黙的でもかまいません。暗黙的編集は、並び入出力と変数群入出
力の実行で発生します。この場合、プログラマーが介入しなくても、データは入出力項目のデー
タの型に基づいて自動的に変換されます ( 並び入出力と変数群入出力についての詳細は、207
ページの「並び入出力」の項および 210 ページの「変数群入出力」の項を参照 )。明示的編集は
プログラマーの制御下で行われ、プログラマーはデータの変換方法を指定します。
本章では、明示的な入出力の編集と次の事項について説明します。
•
FORMAT 文
•
書式仕様
•
編集記述子
•
文字式の書式仕様
•
入れ子の書式仕様
•
書式仕様と入出力データの並び
第9章
233
入出力の編集
FORMAT 文
FORMAT 文
FORMAT 文の機能は、次の 1 つ以上のデータ転送文に使用できる編集情報を指定することです。
•
ACCEPT ( 拡張 )
•
DECODE ( 拡張 )
•
ENCODE ( 拡張 )
•
PRINT
•
READ
•
TYPE ( 拡張 )
•
WRITE
FORMAT 文の構文は、次のとおりです。
label FORMAT ( format-spec )
label
文番号です。
format-spec
編集記述子をコンマで区切った並びで構成される書式仕様です。編集記述子に
ついての詳細は、次の項を参照してください。
FORMAT 文では、データ転送文で引用できるように label を指定しなければなりません。1 つの
FORMAT 文を多数のデータ転送文で引用できます。次の例では、READ 文と WRITE 文の両方で同
じ FORMAT 文を引用しています。
READ(UNIT=22, FMT=10)ivar, fvar
WRITE(17, 10)ivar, fvar
...
10 FORMAT(I7, F14.3)
FORMAT 文とデータ転送文についての詳細は、265 ページの第 10 章 「HP Fortran 文」を参照し
てください。
234
第9章
入出力の編集
書式仕様
書式仕様
書式仕様は、READ 文で読み込むデータ、あるいは WRITE 文または PRINT 文で書き込むデータの
編集を定義する編集記述子の並びで構成されます。書式仕様は、FORMAT 文で指定するか、また
はデータ転送文中の文字式で指定できます。
書式仕様の構文は、次のとおりです。
[descriptor1[, descriptor2...]]
descriptor
データを内部 (2 進 ) 形式と外部 ( 文字 ) 形式の間で変換するための編集記述子
です。編集記述子についての詳細は、次の項を参照してください。
並び入出力と変数群入出力では、書式仕様は使用できないので注意してください。
第9章
235
入出力の編集
編集記述子
編集記述子
編集記述子は、内部 (2 進 ) 形式と外部 ( 文字 ) 形式との間のデータ変換を記述する符号化文字で
す。編集記述子には、次の 3 種類があります。
•
データ編集記述子では、型や幅 ( 文字数 ) など、読み書きされるデータの編集を定義します。
すべてのデータ編集記述子は反復可能であり、前に正の整数を付けて編集記述子の反復数を
指定できます。
•
制御編集記述子では、入力項目間の空白の数、入力に含まれる空白の取扱い、桁移動数など
の編集情報を指定します。制御編集記述子のうち、反復可能なのはスラッシュ (/) だけです。
•
文字列編集記述子では、テキストが出力されます。反復可能な文字列編集記述子はありませ
ん。
表 9-1 は、HP Fortran でサポートされるすべての編集記述子を示しています。この表の構文説
明が示すように、欄の幅の指定 (w) は、HP Fortran のどのデータ編集記述子の場合も省略可能
です。規格では、欄幅指定子は A 編集記述子の場合のみ省略可能と定義されているので注意して
ください。また、この表では、どの編集記述子が反復可能で、その用途は入力、出力、または両
方のどれであるかを示しています。
表 9-1 編集記述子
反復可能
かどうか
入出力の
用途
文字列
不可
出力
囲まれた文字列を出力する。
$
制御
不可
出力
出力の最後の改行を抑止す
る。
/ ( スラッシュ )
制御
可
入出力
現在記録を終了して新規記録
を開始する。
: ( コロン )
制御
不可
入出力
入出力項目並びを使い尽くす
と編集を中止する。
A[w] または R[w]
データ
可
入出力
文字データを変換する。
B[w[.m]]
データ
可
入出力
2 進数字列に整数データを変
換する。
記述子
種類
"..." または
'...'
236
機能
第9章
入出力の編集
編集記述子
表 9-1 編集記述子 ( 続き )
記述子
種類
反復可能
かどうか
入出力の
用途
機能
BN
制御
不可
入出力
数値入力データに含まれる空
白を無視する。
BZ
制御
不可
入出力
数値入力データに含まれる空
白をゼロとして扱う。
D[w.d]
データ
可
入出力
実数型のデータを指数付きで
変換する。
E[w.d[Ee]]
データ
可
入出力
実数型のデータを指数付きで
変換する。
EN[w.d[Ee]]
データ
可
入出力
工学表記で実数型のデータを
変換する。
ES[w.d[Ee]]
データ
可
入出力
科学表記で実数型のデータを
変換する。
F[w.d]
データ
可
入出力
指数なしで実数型のデータを
変換する。
G[w.d[Ee]]
データ
可
入出力
あらゆる型の数値データを変
換する。
Q[w.d]
データ
可
入出力
実数型のデータを指数付きで
変換する。
nHs
文字列
不可
出力
後続の n 文字を出力する。
I[w[.m]]
データ
可
入出力
整数データを変換する。
L[w]
データ
可
入出力
論理データを変換する。
M
データ
可
入出力
通貨データをコンマ付きで入
出力する。
N
データ
可
入出力
通貨データをドル記号とコン
マ付きで入出力する。
O[w[.m]]
データ
可
入出力
8 進数字列で整数データを変
換する。
第9章
237
入出力の編集
編集記述子
表 9-1 編集記述子 ( 続き )
記述子
種類
反復可能
かどうか
入出力の
用途
機能
kP
制御
不可
入出力
桁移動数を k に設定する。
Q
制御
不可
入力
現在の入力記録で読み取り対
象として残っているバイト数
を返す。
S または SP
制御
不可
出力
省略可能な正符号を出力す
る。
SS
制御
不可
出力
省略可能な正符号を出力しな
い。
Tc
制御
不可
入出力
桁 c に移動する。
TLc
制御
不可
入出力
左に c 桁移動する。
TRc または cX
制御
不可
入出力
右に c 桁移動する。
Z[w[.m]]
データ
可
入出力
16 進数字列で整数データを
変換する。
後述の項では、編集記述子について説明します。
注記
複素数データの欄を定義する単一の編集記述子はありません。代わりに、2 つの
実数型編集記述子を使用しなければなりません。1 つ目は、数値の実部に使用し、
2 つ目は虚部に使用します。2 つの編集記述子は、同じものでも違うものでもか
まいません。また、2 つの編集記述子の間に制御編集記述子と文字列編集記述子
を挿入することもできます。
同様に、構造型とポインターの編集を行うための編集記述子もありません。構造
型の場合は、構造型の成分のデータ型と一致する適切な編集記述子列を指定しな
ければなりません。ポインターの場合は、指示先となるオブジェクトの型と一致
する編集記述子を指定しなければなりません。
238
第9章
入出力の編集
編集記述子
文字列編集記述子 (’...’ または ”...”)
文字列編集記述子は、書式付き出力記録に文字定数を書き込むときに使用します。入力の編集に
使用することはできません。定数を囲む記号として、アポストロフィまたは引用符を使用するこ
とができます。どちらの場合も、1 対にして使用しなければなりません。つまり、アポストロ
フィで始めた場合は、末尾にもアポストロフィを使用してください。囲もうとする文字定数に囲
み記号が含まれている場合は、他の囲み記号を使用しなければなりません。また、同じ種類の囲
み記号を 2 つ続けて使用し、文字定数の 1 つの文字とすることもできます。欄幅は、空白を含
む、囲み記号で囲まれた文字数です。
表 9-2 は、出力時の文字列編集記述子の例です。b は空白を表しているので注意してください。
表 9-2 文字列編集記述子 : 出力例
記述子
欄幅
出力
'Enter data:'
11
Enter data:
"David's turn"
12
David's turn
"bbbSpacesbbb"
12
bbbSpacesbbb
'That''ll do.'
11
That'll do.
"""That'll do!"""
13
"That'll do!"
""""
1
"
'"'
1
"
改行編集記述子 ($)
改行編集記述子は、書式付き順次ファイルに出力時に改行文字 ( つまり復帰行送り ) の生成を抑
止する HP 拡張機能です。デフォルトでは、カーソルは各出力文の後で新規行に移動します。改
行編集記述子が含まれている場合、カーソルはその行の最後に出力された文字の右隣にとどまり
ます。
注記
第9章
停留入出力の場合も、記録の終わりの改行が抑止されます。改行編集記述子 ($)
と違って、停留入出力は Fortran 90 の標準機能であり、入出力に使用することが
できます。詳細は、213 ページの「停留入出力」の項および 411 ページの
「OPEN」の項の ADVANCE 入出力指定子の説明を参照してください。
239
入出力の編集
編集記述子
スラッシュ編集記述子 (/)
スラッシュ編集記述子は、現在記録を終了し、新規記録 ( 端末上の改行など ) を開始させます。
この編集記述子を使用した場合は、入力と出力のどちらでも同じ結果になり、現在記録が終了し
て新規記録が開始されます。たとえば、出力時には改行文字が出力され、入力時には改行が読み
込まれます。
スラッシュ編集記述子を使用する場合は、次の留意事項に注意してください。
•
連続する複数のスラッシュを書式仕様の先頭に記述すると、スラッシュと同数だけ記録がス
キップされます。
•
書式仕様の先頭以外の位置で n 個のスラッシュを指定すると ( ここで n は 1 より大きい値 )、現
在記録の処理が終了し、n- 1 個の記録がスキップされます。
•
書式にn個のスラッシュしか含まれていない場合 (他の書式識別子が含まれていない場合) は、
n + 1 個の記録がスキップされます。
スラッシュ編集記述子をコンマで他の記述子と区切る必要はありません。
コロン編集記述子 (:)
コロン編集記述子 (:) は、書式付き入出力の実行中に入出力項目並びが使い尽くされた場合に、
編集制御を終了するために使用します。入出力項目並び内のすべての項目が読み書きされると、
コロン編集記述子はそれ以上の編集処理を中止します。並びに他の項目が残っている場合、コロ
ン編集記述子は不正です。
次に例を示します。
WRITE (*, 40) 1, 2
WRITE (*, 50) 1, 2
40 FORMAT(3(' value =', I2))
50 FORMAT(3(:, ' value =', I2))
最初の WRITE 文では、次の行が出力されます。
value = 1 value = 2 value =
記述子 I2 に達して満たされなくなるまで編集制御は終了しないので、記述子 'value =' は 3 回反
復されます。
2 番目の WRITE 文では、次の行が出力されます。
value = 1 value = 2
この時点で、コロン記述子は文字列 ' value=' が 3 回目に出力される前に編集制御を終了させ
ます。
240
第9章
入出力の編集
編集記述子
A および R ( 文字 ) 編集記述子
A および R 編集記述子では、文字データの欄を定義します。A 編集記述子では左揃えを指定し、R
編集記述子では右揃えを指定します。
R 編集記述子は、HP の拡張です。
文字編集記述子の構文は、次のとおりです。
[r]A[w]
[r]R[w]
r
反復数を指定する正の整定数です。
w
欄幅です。w を指定しなければ、デフォルトは対応する入出力項目のバイト数
です。
移植性を高める機能として、任意のデータ型の項目を使用することができます。
A および R 編集記述子を入出力に使用した場合の結果は、編集記述子で指定した幅 (w) が入出力
項目の長さより小さいか、大きいか、または等しいかに応じて異なります。表 9-3 は入力時の結
果を示し、表 9-4 は出力時の結果を示しています。
表 9-3 入力時の文字データ欄の内容
記述子
A
R
第9章
幅 / 長さの関係
結果
幅 < 長さ
データは変数に後続の空白を使
用して左揃えされる。
幅 >= 長さ
データは欄内の右端の文字から
取り込まれる。
幅 < 長さ
データは変数に先行ヌルを使用
して右揃えされる。
幅 >= 長さ
データは欄内の右端の文字から
取り込まれる。
241
入出力の編集
編集記述子
表 9-4 出力時の文字データ欄の内容
記述子
幅 / 長さの関係
結果
A
幅 <= 長さ
データは欄内の左端の文字から
出力される。
幅 > 長さ
値は先行の空白を付けて出力さ
れる。
幅 <= 長さ
データは欄内の右端の文字から
出力される。
幅 > 長さ
値は先行の空白を付けて出力さ
れる。
R
入力時の文字編集記述子の使用例については、表 9-5 を参照してください。各表で、b は空白を
表し、z はヌルを表しています。
表 9-5 A および R 編集記述子 : 入力例
記述子
入力欄
変数の長さ
保存される値
A3
XYZ
3
XYZ
R3
XYZ
4
zXYZ
A5
ABCbb
10
ABCbbbbbbb
R9
RIGHTMOST
4
MOST
R8
CHAIRbbb
8
CHAIRbbb
R4
CHAIR
8
zzzzCHAI
A4
ABCD
2
CD
242
第9章
入出力の編集
編集記述子
出力時の文字編集記述子の使用例については、表 9-6 を参照してください。各表で、b は空白を
表し、z はヌルを表しています。
表 9-6 A および R 編集記述子 : 出力例
記述子
内部文字
変数の長さ
出力
A6
ABCDEF
6
ABCDEF
R4
ABCDEFGH
8
EFGH
A4
ABCDE
5
ABCD
A8
STATUS
6
bbSTATUS
R8
STATUS
6
bbSTATUS
R8
STATUS
8
STATUSbb
B (2 進 ) 編集記述子
B 編集記述子では、2 進データの欄を定義します。この記述子によって、外部 2 進数とその内部
表現の間で変換が行われます。
2 進編集記述子の構文は、次のとおりです。
[r]B[w[.m]]
r
反復数を指定する正の整定数です。
w
欄幅を指定する正の整定数です。
m
これは、符号なし整定数であり、欄に必要な最小桁数を指定し、ゼロでない最
初の桁まで先行するゼロを必要な数だけ強制的に挿入します。m の値は、入力
時には無視されます。m を指定しなければ、デフォルト値の 1 とみなされま
す。m が w より大きければ、欄には w 個のアスタリスクが埋め込まれます。
入力
2 進入力を受け取る変数は、整数型でなければなりません。有効な文字は 0 と 1 だけです。
BLANK='ZERO' を指定してファイルを開かなければ、先行する空白以外の空白は無視されます。
第9章
243
入出力の編集
編集記述子
BLANK='ZERO' を指定してファイルを開くと、先行する空白以外の空白はゼロとして扱われます
(BLANK 指定子についての詳細は、411 ページの「OPEN」の項を参照 )。正符号、負符号、コン
マなどの記号は使用できません。2 進数以外の数字を指定すると、エラーが発生します。整変数
( または入出力項目 ) に対して桁数が多すぎる場合は不正です。
表 9-7 は、入力時の 2 進編集記述子の例です。
表 9-7 B 編集記述子 : 入力例
入力欄 (2 進数 )
記述子
保存される値 (2 進数 )
B8
1111
1111
B8
01111
1111
B4
10101
1010
B8
1.1
エラー : 不正な文字
出力
入力と違って、出力時の項目はどんな型でもかまいませんが、文字値は ASCII 表現に等価な 2
進数 ( 長さ指定なし ) としてしか出力されません。w が変換後の 2 進数の桁数より大きければ
( 先行するゼロを除く )、2 進数は出力欄内で右揃えされます。
w が変換後の 2 進数の桁数より小さければ、欄には w 個のアスタリスクが埋め込まれます。これ
は、主として負の値の出力に影響します。負の値は 2 の補数の形式で出力されるので、上位ビッ
トはゼロ以外の値になり、w が出力値全体の 2 進数の桁数より小さければ、欄にはアスタリスク
が埋め込まれます。
項目の 2 進値全体を表すために必要な欄幅は、そのバイト数を 8 倍したサイズです。たとえば、
INTEGER*4 項目の場合は、欄に必要な w は最高 32 文字となります。
出力時には、1 と 0 だけが出力されます。
表 9-8 は、出力時の 2 進編集記述子の例です。
表 9-8 B 編集記述子 : 出力例
記述子
内部値
出力
B5
27
11011
B8
27
bbb11011
244
第9章
入出力の編集
編集記述子
表 9-8 B 編集記述子 : 出力例 ( 続き )
記述子
内部値
出力
B8.6
27
bb011011
B8
-27
********
BN および BZ ( 空白 ) 編集記述子
BN および BZ 編集記述子では、数値入力欄の途中にある空白と後続の空白の解釈を制御します。
空白編集記述子の構文は、次のとおりです。
BN
BZ
入力文の実行開始時には、OPEN 文で BLANK='ZERO' を指定して装置を接続している場合を除き、
数値に含まれる空白は無視されます。BN および BZ を指定すると、現在の READ 文に対する
BLANK 指定子は無効になります。BLANK 指定子についての詳細は、411 ページの「OPEN」の項
を参照してください。
BZ 編集記述子が書式仕様内にある場合は、後続の数値欄の途中にある空白と後続の空白はゼロ
として扱われます。BZ 編集記述子は、BN 編集記述子または書式仕様の終わりに達するまで有効
になっています。BN を指定すると、途中にある空白はすべて削除され、入力数値は欄幅の範囲
内で右揃えされます。
BN および BZ 編集記述子の影響を受けるのは、入力文の実行時の I, B, O, F, D, E, EN, ES, G および
Z 編集記述子だけです。BN および BZ 編集記述子は、文字編集記述子と論理編集記述子には影響
しません。
表 9-9 は、入力時の BN および BZ 編集記述子の例です。
表 9-9 BN および BZ 編集記述子 : 入力例
入力文字
BN の編集効果
I4
1b2b
12
1020
F6.2
b4b.b2
4.2
40.02
E7.1
5b.bE1b
5.0 x 101
5.0 x 1011
記述子
第9章
BZ の編集効果
245
入出力の編集
編集記述子
表 9-9 BN および BZ 編集記述子 : 入力例 ( 続き )
記述子
E5.0
入力文字
BN の編集効果
3E4bb
3.0 x 104
BZ の編集効果
3.0 x 10400
( オーバーフロー )
BN および BZ 編集記述子は、出力文の実行時には無視されます。
D, E, EN, ES, F, G および Q ( 実数 ) 編集記述子
D, E, EN, ES, F, G および Q 編集記述子では、実数欄を定義します。実数編集記述子に対応する入
出力項目は、数値型でなければなりません ( 規格では、実数型と複素数型しか許されません。
HP Fortran では、拡張として整数型が許されます )。
これらの編集記述子の構文は、次のとおりです。
[r]D[w.d]
[r]E[w.d[{E|D|Q}e]]
[r]EN[w.d[Ee]]
[r]ES[w.d[Ee]]
[r]F[w.d]
[r]G[w.d[{E|D|Q}e]]
[r]Q[w.d]
r
反復数を指定する正の整定数です。
w
欄幅を指定する正の整定数です。
d
出力時の小数点以下の桁数を指定する負でない整定数です。
e
指数の桁数を指定する正の整定数です。
複素数のデータを編集する場合は、2 つの実数編集記述子を使用することができます。最初の編
集記述子は数値の実部に使用し、2 つ目は虚部に使用します。2 つの編集記述子は、同じもので
も違うものでもかまいません。また、2 つの編集記述子の間に制御編集記述子と文字列編集記述
子を挿入することもできます。
246
第9章
入出力の編集
編集記述子
入力時の実数編集記述子
実数編集記述子の入力欄は、省略可能な正符号または負符号と、後続の数値列で構成されます。
数値列には、小数点を含めることもできます。入力文字列から小数点を省略すると、文字列の右
端から d 桁が小数点以下の桁数として解釈されます。入力文字列に小数点が含まれ、それが編集
記述子と競合する場合は、入力文字列の小数点が優先されます。この基本形式の後に、次のいず
れかの形式の指数を指定できます。
•
符号付き整定数
•
E と後続の省略可能な符号付き整定数
•
D と後続の省略可能な符号付き整定数
•
Q と後続の省略可能な符号付き整定数
この 4 つの指数形式は、同じように処理されます。ただし、入力時には e は無効なので注意して
ください。
EN および ES 編集記述子は、入力時の F 編集記述子と同じです。Q 編集記述子 (HP Fortran の
拡張 ) は、入力時の E 編集記述子と同じです。
表 9-10 は、入力時の実数編集記述子の例です (「記述子」並びの BZ 編集記述子では、数値欄の
先行空白以外の空白をゼロとして扱います )。
表 9-10 D, E, F および G 編集記述子 : 入力例
記述子
入力欄
保存される値
F6.5
4.51E4
45100
G4.2
51-3
.00051
E8.3
7.1bEb5
710000
D9.4
bbb45E+35
.0045 x 1035
BZ, F6.1
-54E3b
-5.4 x 1030
出力時の実数編集記述子
実数編集記述子の出力欄は、先行の空白 ( 必要時 ) と省略可能な符号付きの小数点を用いた実定
数の w 欄幅で構成されます。この実定数は、小数点以下 d 桁に端数処理されます。後述の項で
は、出力時の実数編集記述子の詳細を説明します。
第9章
247
入出力の編集
編集記述子
D および E 編集記述子 D および E 編集記述子では、実数値と複素数値用に標準化された浮動小
数点欄を定義します。値は、d 桁に端数処理されます。指数部は、e 桁で構成されます。D また
は E 編集記述子で Ee を省略すると、指数はその大きさに応じて 2 または 3 桁を占めます。欄幅
w は、d+7 以上という一般規則に従わなければなりません。Ee を使用する場合、w は d+e+5 以
上です。この規則によって、先行の空白、値の符号、小数点、d 桁、指数文字 (D, E または Q)、
指数の符号、および指数の各位置が決定されます。Ee, De および Qe の指定は E 編集記述子で使
用可能であり、どの指数文字が出力されるかを制御します。
表 9-11 は、出力時の E および D 編集記述子の例です。
表 9-11 D および E 編集記述子 : 出力例
記述子
内部値
出力
D10.3
+12.342
b0.123D+02
E10.3E3
-12.3454
-.123E+002
E12.4
+12.34
bb0.1234E+02
D12.4
-.00456532
b-0.4565D-02
D10.10
+99.99913
**********
E11.5
+999.997
0.10000E+04
E10.3E4
+.624 x 10-30
.624E-0030
EN および ES 編集記述子 EN および ES 編集記述子では、それぞれ工学表記と科学表記を使用し
て浮動小数点値の編集をします。この 2 つの編集記述子の形式は E 編集記述子に似ていますが、
次のような違いがあります。
•
EN 編集記述子によって生成される欄は、3 で除算できる指数と 1 ~ 999 の範囲内の有効数字部
になります。
•
ES 編集記述子によって生成される欄は、小数点の前が 1 桁になります。
表 9-12 は、出力時の EN および ES 編集記述子の例です。
表 9-12 EN および ES 編集記述子 : 出力例
記述子
EN12.3
248
内部値
+3.141
出力
bbb3.141E+00
第9章
入出力の編集
編集記述子
表 9-12 EN および ES 編集記述子 : 出力例 ( 続き )
記述子
内部値
出力
ES12.3
+3.141
bbb3.141E+00
EN12.3
+.00123
bbb1.230E-03
ES12.3
+.00123
bbb1.230E-03
EN12.3
-.7
-700.000E-03
ES12.3
-.7
bb-7.000E-01
EN12.3
+1234.5
bbb1.235E+03
ES12.3
+1234.5
bbb1.235E+03
F 編集記述子
F 編集記述子では、実数値と複素数値の欄を定義します。値は、小数点以下 d 桁に端数処理され
ます。欄幅 w は、先行空白、符号、小数点、および必要に応じて端数処理するためのロールオー
バー桁の位置を設けるために、4 桁より大きくなければなりません。
表 9-13 は、出力時の F 編集記述子の例です。
表 9-13 F 編集記述子 : 出力例
記述子
内部値
出力
F5.2
+10.567
10.57
F3.1
-254.2
***
F6.3
+5.66791432
b5.668
F8.2
+999.997
b1000.00
F8.2
-999.998
-1000.00
F7.2
-999.997
*******
F4.1
+23
23.0
第9章
249
入出力の編集
編集記述子
G 編集記述子
G 編集記述子は任意のデータ型に使用することができますが、通常は実数値と複素数値の欄を定
義するために使用します。
整数、文字、および論理データの入出力欄を指定するときに G 編集記述子を使用する場合の構文
と効果は、整数、文字および論理編集記述子と同じです。d および e の値 ( 指定した場合 ) は無
効です。
G 編集記述子は、データの大きさに応じて E または F 編集記述子として解釈されます ( これらの
編集記述子の詳細は、248 ページの「D および E 編集記述子」の項および 249 ページの「F 編
集記述子」の項を参照 )。E 編集記述子は、次の条件の 1 つが真のときに使用されます。
•
絶対値が 0.1 より小さく 0 でない場合
•
絶対値が 10**d 以上の場合 (d 桁に端数処理後 )。
大きさが前述のどちらの規則にも当てはまらなければ、F 編集記述子が使用されます。F 編集記
述子が使用されると、Gw.d を指定した場合には 4、Gw.dEe を指定した場合には e+2 にそれぞ
れ欄幅が調整されます。また、調整後の欄幅と同じ数だけ後続の空白が付加されます。さらに、
新しい欄幅に応じて d が内部で修正されます。
固定または浮動小数点の編集記述子の場合、欄幅は w 桁です。値は d 桁に端数処理され、指数は
e 桁で構成されます。Ee を省略すると、指数は 2 桁になります。Ee を省略した場合に、指数が
99 より大きければ ( つまり 3 桁必要であれば )、出力から指数文字が削除されます。欄幅 w は、
d+7 以上という一般規則に従わなければなりません。また、Ee を指定すると、w は d+e+5 以上
です。この規則によって、先行の空白、値の符号、d 桁、小数点、および必要な場合は指数文字
(D, E または Q)、指数の符号、および指数の各位置が決定されます。Ee, De および Qe の指定は、
どの指数文字が出力されるかが制御されるので注意してください。
表 9-14 は、出力時の G 編集記述子の例です。
表 9-14 G 編集記述子 : 出力例
記述子
内部値
解釈
出力
G10.3
+1234.0
E10.3
b0.123E+04
G10.3
-1234.0
E10.3
-0.123E+04
G12.4
+12345.0
E12.4
bb0.1235E+05
G12.4
+9999.0
F8.0, 4X
bbb9999.bbbb
G12.4
-999.0
F8.1, 4X
bb-999.0bbbb
250
第9章
入出力の編集
編集記述子
表 9-14 G 編集記述子 : 出力例 ( 続き )
記述子
内部値
解釈
出力
G7.1
+.09
E7.1
0.9E-01
G5.1
-.09
E5.1
*****
G11.1
+9999.0
E11.1
bbbb0.1E+05
G8.2
+9999.0
E8.2
0.10E+05
G7.2
-999.0
E7.2
*******
G8.2
.true
L8
bbbbbbbT
G7.2
-999.0
E7.2
bbbb1234
Q 編集記述子
Q 編集記述子 (HP の拡張 ) は、出力時の E 編集記述子と同じ効果を持っていますが、指数は E の
代わりに Q が出力されます。
また、Q 編集記述子を使用すると、入力記録のうち読み込み対象として残っているバイト数を判
別することもできます。詳細は、258 ページの「Q ( 残りバイト数 ) 編集記述子」の項を参照し
てください。
H ( ホレリス ) 編集記述子
H 編集記述子では、指定した数の文字が出力されます。この編集記述子の構文は、次のとおりで
す。
nHcharacter-sequence
n
出力文字数を指定する正の整数です。この数値は、character-sequence の
実際の文字数と正確に一致しなければなりません。
character-sequence
出力される表現可能文字 ( 空白を含む ) の文字列です。
第9章
251
入出力の編集
編集記述子
表 9-15 は、出力時のホレリス編集記述子の例です。
表 9-15 H 編集記述子 : 出力例
記述子
欄幅
出力
12HbbbSpacesbbb
12
bbbSpacesbbb
14H"Itbisn'tbso."
14
"Itbisn'tbso."
I ( 整数 ) 編集記述子
I 編集記述子では、整数欄を定義します。この編集記述子は、HP の拡張として実数データや論
理データにも使用することができます。それに対応する入出力項目は、数値型または論理型でな
ければなりません。
整数編集記述子の構文は、次のとおりです。
[rI][w[.m]]
r
反復数を指定する正の整定数です。
w
欄幅を指定する正の整定数です。
m
負でない整定数であり、欄の最小桁数を指定し、ゼロでない最初の桁まで先行
するゼロを必要な数だけ強制的に挿入します。m の値は、入力時には無視され
ます。m を指定しなければ、デフォルト値の 1 とみなされます。m が w より大
きければ、欄には w 個のアスタリスクが埋め込まれます。m = 0 のときに項目
が 0 であれば、空白だけが出力されます。
入力
整数編集記述子を指定すると、入力記録の次の w 桁が解釈されます。数値は、現在の記述子を使
用中の項目の型に合わせて変換されます。正の値の場合、正符号は省略可能です。欄内では小数
点を指定しないでください。
表 9-16 は、入力時の整数編集記述子の例です。
表 9-16 I 編集記述子 : 入力例
記述子
入力欄
保存される値
I4
b1bb
1
I5
bbbbb
0
252
第9章
入出力の編集
編集記述子
表 9-16 I 編集記述子 : 入力例 ( 続き )
記述子
入力欄
保存される値
I5
bbbbb1
0
I2
-1
-1
I4
-123
-123
I3
b12
12
I3
12b
12
I3
12b
120
I3
1.1
エラー : 不正な文字
出力
整数編集記述子では、数値変数が右揃えされた ( 必要な場合は切り捨てられた ) 整数値として出
力されます。欄幅 w は、負の値の負符号の桁を見込んで、予期される桁数より 1 桁多くしなけれ
ばなりません。m を 0 に設定すると、値 0 はすべて空白として出力されます。
表 9-17 は、出力時の整数編集記述子の例です。
表 9-17 I 編集記述子 : 出力例
記述子
内部値
出力
I4
+452.25
b452
I2
+6234
**
I3
-11.92
-11
I5
-52
bb-52
I10
123456.5
bbbb123456
I6.3
3
bbb003
I3.0
0
bbb
I3
0
bb0
第9章
253
入出力の編集
編集記述子
L ( 論理 ) 編集記述子
L 編集記述子では、論理データの欄を定義します。この編集記述子の構文は、次のとおりです。
[r]L[w]
r
反復数を指定する正の整定数です。
w
欄幅を指定する正の整定数です。
L 編集記述子に対応する入出力項目は、論理型、ショート論理型、またはバイト型でなければな
りません。
入力
欄幅では、真の場合は T ( または t)、偽の場合は F ( または f) に続く省略可能な空白と小数点が
走査されます。入力欄の中で空白でない最初の文字 ( 省略可能な小数点を除く ) によって、指定
された論理変数に保存される値が決まります。空白でない最初の文字が T, t, F, f またはピリオ
ド (.) でなければ、エラーが発生します。
表 9-18 は、入力時の論理編集記述子の例です。
表 9-18 L 編集記述子 : 入力例
記述子
入力欄
保存される値
L1
T
.TRUE.
L1
f
.FALSE.
L6
.TRUE.
.TRUE.
L7
.false.
.FALSE.
L2
.t
.TRUE.
L8
bbbbTRUE
.TRUE.
L3
ABC
エラー : 不正な文字
254
第9章
入出力の編集
編集記述子
出力
文字 T または F は、項目の値が真であるか偽であるかに応じて出力欄内で右揃えされます。表
9-19 は、出力時の論理編集記述子の例です。
表 9-19 L 編集記述子 : 出力例
記述子
出力 ( 論理型 )
内部値
L5
偽
bbbbF
L4
真
bbbT
L1
真
T
M および N 編集記述子
M および N 編集記述子は、通常、通貨に使用される形式で数値を出力するために使用します。
たとえば、N 編集記述子を使用すると、値 1234.5 は、1,234.50 の形式で出力されます。また、
M 編集記述子を使用すると、同じ値が $1,234.50 と出力されます。
O (8 進 ) 編集記述子
O 編集記述子では、8 進データの欄を定義します。この記述子によって、外部 8 進数とその内部
表現の間で変換が行われます。
8 進編集記述子の構文は、次のとおりです。
[r]O[w[.m]]
r
反復数を指定する正の整定数です。
w
欄幅を指定する正の整定数です。
m
負でない整定数であり、欄の最小桁数を指定し、ゼロでない最初の桁まで先行
するゼロを必要な数だけ強制的に挿入します。m の値は、入力時には無視され
ます。m を指定しなければ、デフォルト値の 1 とみなされます。m が w より大
きければ、欄には w 個のアスタリスクが埋め込まれます。
入力
整変数 ( または入出力項目 ) の桁数が多すぎると、結果は不定になります。有効な 8 進数字は 0
~ 7 で、正符号と負符号は不正です。
第9章
255
入出力の編集
編集記述子
表 9-20 は、入力時の 8 進編集記述子の例です。
表 9-20 O 編集記述子 : 入力例
入力欄 (8 進数 )
記述子
保存される値 (8 進数 )
O8
12345670
12345670
O2
77
77
O3
064
64
O8
45r
エラー : 不正な文字
出力
項目はどんな型でもかまいませんが、文
でしか出力されません。
字変数は ASCII 表現に等価な 8 進数 ( 長さ指定なし )
w が変換後の 8 進数の桁数より大きければ ( 語間の空白を含むが先行するゼロは除く )、8 進数は
出力欄内で右揃えされます。w が変換後の 8 進数の桁数より小さければ、欄にはアスタリスクが
埋め込まれます。これは、主として負の値の出力に影響します。負の値は 2 の補数の形式で出力
されるので、上位ビットはゼロ以外の値になり、w が出力値全体の 8 進数の桁数より小さけれ
ば、欄にはアスタリスクが埋め込まれます。m を 0 に設定すると、値 0 はすべて空白として出力
されます。
表 9-21 は、出力時の 8 進編集記述子の例です。
表 9-21 O 編集記述子 : 出力例
記述子
出力 (8 進数 )
内部値
O6
80
bbb120
O2
80
**
O14
-9
bbb37777777767
O11
32767
bbbbbb77777
O6.4
79
bb0117
O12
1.1
bb7743146315
O12
'A'
b101
256
第9章
入出力の編集
編集記述子
表 9-21 O 編集記述子 : 出力例 ( 続き )
記述子
内部値
O12
'ABC'
出力 (8 進数 )
b101b102b103
P ( 桁移動数 ) 編集記述子
kP 編集記述子を指定すると、F, D, E, EN, ES および G 編集記述子に桁移動数 k が適用されます。
P 編集記述子が F, D, E, EN, ES または G 編集記述子の直前にない場合は、コンマで他の編集記述
子と区切らなければなりません。P が F, D, E, EN, ES または G 編集記述子の直前にある場合、コ
ンマは省略可能です。
たとえば、次の書式仕様を考えます。
(3P, I2, F4.1, E5.2)
この書式仕様は、次の書式仕様と等価です。
(I2, 3PF4.1, E5.2)
書式仕様の解釈時に、桁移動数は最初は 0 に設定されます。P 編集記述子に達すると、指定した
桁移動数が書式仕様に有効になり、もう 1 つの P 編集記述子に達するまで有効になっています。
入力と出力では、桁移動数の効果に次のような違いがあります。
入力
入力欄の値に指数が含まれていなければ、内部数値は欄の値を 10**-k で乗算した値と等しくな
ります。入力欄の値に指数が付いている場合、桁移動数は無効です。入力時の桁移動数の例につ
いては、表 9-22 を参照してください。
出力
EN, ES, F および G (F として解釈 ) 編集記述子での桁移動数の効果は、外部表現の値が、内部表現
の値に 10**k を乗算した値と等しくなることです。
桁移動数 (k) には、次の範囲内の値を指定しなければなりません。
-d < k < (d + 2)
d
書き込まれる数値の小数部の桁数です。
k
桁移動数を指定する符号付き整数です。
第9章
257
入出力の編集
編集記述子
出力時の桁移動数の例については、表 9-22 を参照してください。
表 9-22 P 編集記述子 : 入力例と出力例
書式仕様
入力欄
内部値
出力
(-2PG15.5)
1.97E-4
1.97 x 10-4
bbbbb.00197E-01
(2P, F15.5)
27.982
.2798199
bbbbbbb27.98200
(2P,ES15.5)
3518.
35.18
bbbb3.51800E+01
(-2P,EN15.5)
7.91E+5
7.91 x 105
bb791.00000E+03
(-2PE15.5)
.17694
17.694
bbbbb.00177E+04
書式仕様の一部または全体が反復される場合、現在の桁移動数は別の桁移動数が発生するまで変
更されません。
Q ( 残りバイト数 ) 編集記述子
Q 編集記述子は、入力記録内に読み込み対象として残っているバイト数を返し、入出力項目並び
のそれに対応する整変数に結果を入れる HP の拡張です。戻り値を使用すると、残りの入力項目
数を制御できます。
Q 編集記述子は入力時にのみ有効であり、出力時には無視されます。この編集記述子は、書式付
きファイル、順次ファイル、および直接探査ファイルの読み込みに使用することができます。次
のプログラム断片では、順次ファイルから可変長文字列が読み込まれます。
CHARACTER(LEN=80) :: string
INTEGER :: n, i
...
READ (11,'(Q,80A1)') n, (string (i:i), i=1, n)
実数データの編集に使用する Qw.d 編集記述子についての詳細は、246 ページの「D, E, EN, ES,
F, G および Q ( 実数 ) 編集記述子」の項を参照してください。
258
第9章
入出力の編集
編集記述子
S, SP および SS ( 正符号 ) 編集記述子
S, SP および SS 編集記述子では、数値出力に含まれる正符号の出力を制御します。HP Fortran
のデフォルト動作では、正符号は出力されません。ただし、書式仕様で SP 編集記述子を指定す
ると、後続の数値出力の値が正のときには正符号が出力されます。SS 編集記述子を指定すると、
後続の数値出力に正符号が出力されなくなります。S 編集記述子を指定すると、デフォルト動作
が復元されます。
符号編集記述子は、入力時には無効です。
T, TL, TR および X ( タブ ) 編集記述子
タブ編集記述子では、入力記録または出力記録のカーソル位置を指定します。この編集記述子の
構文は、次のとおりです。
Tn
TLn
TRn
nX
n
現在の出力記録または入力記録のスキップする桁数を指定する正の整定数で
す。
T 編集記述子では絶対桁数を使用しますが、TL および TR 編集記述子では現在のカーソル位置の
左側 (TL) または右側 (TR) への相対桁数を使用します。TR 編集記述子は、X 編集記述子と同じな
ので注意してください。
Z (16 進 ) 編集記述子
Z 編集記述子では、16 進データの欄を定義します。この記述子によって、外部 16 進数とその内
部表現の間で変換が行われます。
16 進編集記述子の構文は、次のとおりです。
[r ]Z[w [.m ]]
r
反復数を指定する正の整定数です。
w
欄幅を指定する正の整定数です。
第9章
259
入出力の編集
編集記述子
負でない整定数であり、欄の最小桁数を指定し、ゼロでない最初の桁まで先行
するゼロを必要な数だけ強制的に挿入します。m の値は、入力時には無視され
ます。m を指定しなければ、デフォルト値の 1 とみなされます。m が w より大
きければ、欄には w 個のアスタリスクが埋め込まれます。
m
入力
16 進入力を受け取る変数は、整数型でなければなりません。有効な 16 進数字は、0 ~ 9、およ
び A ~ F ( または a ~ f) です。BLANK='ZERO' を指定してファイルを開いた場合を除いて、先行
の空白以外の空白は無視されます。BLANK='ZERO' を指定してファイルを開くと、先行の空白以
外の空白はゼロとして扱われます。BLANK 指定子についての詳細は、411 ページの「OPEN」の
項を参照してください。正符号、負符号、コンマなどの記号は、入力に使用することはできず、
出力時にも出力されません。整変数 ( または項目 ) に対して桁数が多すぎると、結果は不定にな
ります。
表 9-23 は、入力時の 16 進数編集記述子の例です。
表 9-23 Z 編集記述子 : 入力例
記述子
入力欄 (16 進数 )
保存される値 (16 進数 )
Z4
FF3B
FF3B
Z4
fFfF
FFFF
Z2
ABCD
AB
Z3
1.1
エラー : 不正な文字
出力
項目はどんな型でもかまいませんが、文字変数は ASCII 表現に等価な 16 進数 ( 長さ指定なし )
でしか出力されません。w が変換後の 16 進数の桁数より大きければ ( 先行するゼロを除く )、16
進数は出力欄内で右揃えされます。w が変換後の 16 進数の桁数より小さければ、欄にはアスタ
リスクが埋め込まれます。これは、主として負の値の出力に影響します。負の値は 2 の補数の形
式で出力されるので、上位ビットはゼロ以外の値になり、w が出力値全体の 16 進数の桁数より
小さければ、欄にはアスタリスクが埋め込まれます。m を 0 に設定すると、値 0 はすべて空白と
して出力されます。
項目の 16 進値全体を表すために必要な欄幅は、そのバイト数を 2 倍したサイズです。たとえば、
CHARACTER*12 項目には、24 文字分の欄幅が必要です。
260
第9章
入出力の編集
編集記述子
表 9-24 は、出力時の 16 進編集記述子の例です。
表 9-24 Z 編集記述子 : 出力例
記述子
内部値
出力
Z2
27
1B
Z6.4
27
bb001B
Z
'A'
b41
Z8
'ABCD'
41424344
Z8
1.1
3F8CCCCD
第9章
261
入出力の編集
文字式の書式仕様
文字式の書式仕様
書式仕様は、データ転送文に文字式として埋め込むことができます。その文字式の結果にはかっ
こを含め、空白でない最初の文字として左かっこを使用しなければなりません。それと対になる
右かっこも、式に含めなければなりません。編集記述子の並びは、左右のかっこ内で指定しま
す。対になる右かっこの後の文字は無視されます。
文字式が文字定数であれば、アポストロフィまたは引用符で区切らなければなりません。その文
字定数に他の文字定数が含まれている場合は、入れ子の文字定数も区切らなければなりません。
内側の囲み記号として外側の囲み記号と同じものを使用する場合は、2 つ並べてください。次の
各文はそれぞれ正しく、同じ結果が生成されます。
PRINT
PRINT
PRINT
PRINT
WRITE
”('i = ', i2)”, i
”(””i = ””, i2)”, i
'(”i = ”, i2)', i
'(''i = '', i2)', i
(6, ”('i = ', i2)”) i
文字式が配列要素であれば、書式全体をその要素内で指定しなければなりません。式が文字型配
列全体の場合、書式仕様は各配列要素を配列要素順序で連結したものになります (HP Fortran で
は、拡張として整数型配列に書式仕様を含めることができます )。
次の例は、文字型配列を使用して書式仕様を指定する方法を示しています。
CHARACTER(LEN=6), DIMENSION(2) :: fspec
fspec(1) = '(F8.3,'
fspec(2) = ' I5)'
PRINT fspec, fvar, ivar
fvar の値が 12.34567 で、ivar の値が 123 であれば、出力は次のようになります。
bb12.346bb123
262
第9章
入出力の編集
入れ子の書式仕様
入れ子の書式仕様
書式仕様は、入れ子の書式仕様 ( かっこで囲まれた他の編集記述子の集合 ) にすることができま
す。また、次の例のように、入れ子の書式仕様の前に反復数を付けることもできます。
(1H , 2(I5, F10.5))
これは、次のものと等価です。
(1H , I5, F10.5, I5, F10.5)
各入れ子の書式仕様を、入れ子レベル n と呼びます。n の値は 1 から始まります。内側の入れ子
になるごとに、n が 1 ずつ大きくなります。入れ子レベル 1 には、入れ子レベル 2 を 1 つ以上含
めることができ、他のレベルの場合も同様になります。
次に例を示します。
(E9.3,I6,(2X,I4))
この例では、入れ子レベル 1 が 1 つあります。
(L2,A3/(E10.3,4(A2,L4)))
この例では、入れ子レベル 1 が 1 つと、入れ子レベル 2 が 1 つあります。
(A,(3X,(I2,(A3)),I3),A)
この例では、入れ子レベル 1、レベル 2、およびレベル 3 が 1 つずつあります。
入れ子の書式仕様の前に、反復数を付けることができます。たとえば、次の入力記録を考えま
す。
b26b6.4336b373.86b39bb49.79bb4bbb4395.4972
この入力記録は、次の FORMAT 文で入力できます。
10 FORMAT (I3,F7.4,2(F7.2,I3),F12.4)
READ 文に続く変数の並びは、先行する FORMAT 文に対応します。
READ 10,i,a,b,j,d,k,f
READ 文では、i と a の値が読み込まれます。そして、入れ子の書式仕様 F7.2,I3 が 2 度使用さ
れ、b, j, d および k の値が読み込まれ、最後に f の値が読み込まれます。
第9章
263
入出力の編集
書式仕様と入出力データの並び
書式仕様と入出力データの並び
書式付き入出力文では、入出力項目並び内の各項目が引用され、それに対応する書式仕様が走査
され、各項目の編集記述子が検索されます。項目が編集記述子と一致している限り、通常の実行
が継続されます。
編集記述子の数が項目数より多ければ、編集制御は最後の項目で終了します。編集記述子の数が
項目数より少なければ、次の 3 つの手順が実行されます。
1. 現在記録が終了します。
2. 新規記録が開始されます。
3. 次の階層に基づいて、編集制御が書式仕様に戻されます。
a.
制御は、入れ子レベル 1 の右端のグループの反復数に戻されます。入れ子レベルについて
の詳細は、263 ページの「入れ子の書式仕様」の項を参照してください。
b.
入れ子レベル 1 の右端のグループに反復数が存在しなければ、制御はそのグループ自体に
戻されます。
c.
入れ子レベル 1 のグループが存在しなければ、制御は書式仕様内の最初の編集記述子に戻
されます。
表 9-25 の例は、さまざまな状況で制御が書式仕様にどのように戻されるかを示しています。
表 9-25 編集制御と入れ子の書式仕様
書式仕様
制御の戻り先
説明
(I5,2(3X,I2,(I4)))
2(3X,I2,(I4))
入れ子レベル 1 の右端のグ
ループは、3X,I2,(I4) であ
る。制御はこのグループの反
復指定に戻される。
(F4.1,I2)
(F4.1,I2)
入れ子レベル 1 のグループは
存在しない。制御は書式仕様
内の最初の編集記述子に戻さ
れる。
(A3,(3X,I2),4X,I4)
(3X,I2),4X,I4
制御は入れ子レベル 1 のグ
ループに戻される。
264
第9章
10 HP Fortran 文
本章では、HP Fortran の文と属性をアルファベット順に説明します。構文に関する情報、適用
される規則、制限条項、および例を示します。
次の特定の型宣言については、本章を参照してください。一般的な型宣言については、102 ペー
ジの「組み込み型の型宣言」の項を参照してください。
•
BYTE
•
CHARACTER
•
COMPLEX
•
DOUBLE COMPLEX
•
DOUBLE PRECISION
•
INTEGER
•
LOGICAL
•
REAL
•
RECORD
•
TYPE(type-name)
本章では、次の項目については説明しません。
•
代入文 ( 代わりとして、第 5 章の 90 ページの「代入」の項を参照 )
•
文関数 ( 代わりとして、第 7 章の 166 ページの「文関数」の項を参照 )
•
構造構文 ( 代わりとして、99 ページの「データ型およびデータオブジェクト」の項を参照 )
第 10 章
265
HP Fortran 文
属性
属性
表 10-1 は、HP Fortran の言語要素が持ち得るすべての属性を一覧表にし、それら属性間の互換
性を示しています。2 つの属性の交差位置のボックスに○印がある場合、2 つの属性は互いに互
換性を持ち、言語要素は、それらを同時に持つことができます。これらの属性は、本章を通して
終始参照します。また同様に本書の他の章でも参照します。
表 10-1 相互利用可能な属性
○ ○
PARAMETER
○
○ ○
○ ○
○ ○ ○ ○ ○ ○ ○ ○ ○
○
○
○ ○
○
○
○ ○ ○ ○ ○ ○
○
○ ○
○
OPTIONAL
VOLATILE
○ ○
TARGET
○
INTRINSIC
○
○ ○
○
○
○
○
○ ○
POINTER
STATIC
○
SAVE
INTENT
PUBLIC
○
PRIVATE
初期化
POINTER
○ ○ ○
○
EXTERNAL
PARAMETER
○ ○ ○
OPTIONAL
DIMENSION
INTRINSIC
○ ○ ○
INTENT
AUTOMATIC
初期化
○ ○ ○
EXTERNAL
DIMENSION
AUTOMATIC
ALLOCATABLE
ALLOCATABLE
○
○ ○
○ ○
○ ○ ○ ○ ○
○
PRIVATE
○
○ ○ ○
○
○ ○ ○
PUBLIC
○
○ ○ ○
○
○ ○
SAVE
○
○
○
○ ○ ○ ○ ○ ○ ○
○
○
○ ○ ○ ○ ○ ○ ○
STATIC
266
○ ○ ○ ○
○ ○ ○ ○ ○
第 10 章
HP Fortran 文
属性
表 10-1 相互利用可能な属性 ( 続き )
VOLATILE
TARGET
STATIC
SAVE
PUBLIC
PRIVATE
POINTER
PARAMETER
OPTIONAL
INTRINSIC
INTENT
初期化
EXTERNAL
DIMENSION
AUTOMATIC
ALLOCATABLE
TARGET
○ ○ ○
○ ○
○
○ ○ ○ ○ ○ ○
VOLATILE
○ ○ ○
○ ○
○
○ ○ ○ ○ ○ ○ ○
注記
第 10 章
AUTOMATIC, STATIC および VOLATILE 文として指定できますが、型宣言文中の属
性としては指定できません。
267
HP Fortran 文
文および属性
文および属性
次に、HP Fortran プログラムで利用できるすべての文と属性を説明します。文と属性は、アル
ファベット順に記載されています。文 ( プログラム中で、文に要求される出現順序も含めて ) に
ついての一般的情報は、43 ページの「文」の項を参照してください。
268
第 10 章
HP Fortran 文
ACCEPT ( 拡張 )
ACCEPT ( 拡張 )
標準入力から読み込みます。
構文
ACCEPT 文の構文には、次の 2 つの形式があります。
•
書式付き並び構文
ACCEPT format [, input-list ]
•
変数群構文
ACCEPT name
format
次のいずれかです。
•
並び入出力を指定するアスタリスク (*)。
•
書式仕様を含んだ FORMAT 文の文番号。
•
FORMAT 文の文番号を代入された整変数。
•
文字式の書式仕様。
input-list
コンマで区切られた入力用項目の並びです。入力用項目は、変数と入出力 DO
形反復を含みます。
name
NAMELIST 文であらかじめ定義されている変数群の名前です。この構文を使用
して、ACCEPT 文は標準入力からデータを読み取り、変数群に転送します。接
続されているファイルに対して変数群入出力を実行するときは、必ず READ 文
を使用し、NML 指定子を含めてください。
説明
ACCEPT 文は、HP Fortran 拡張機能であり、他のバージョンの Fortran との互換性のために提
供されています。規格に準拠した READ 文は同じ機能を果たします。規格に合致したプログラム
を書くときは、この READ 文を使用してください。
ACCEPT 文は、標準入力からのデータを内部記憶領域へ転送します ( 装置 5 が HP-UX 標準入力
に事前接続されています )。ACCEPT 文は、書式付き並び入出力および変数群入出力の実行だけに
使用できます。
接続されているファイルからデータを読み込むためには、READ 文を使用します。
第 10 章
269
HP Fortran 文
ACCEPT ( 拡張 )
例
次は、並び書式を使用して、標準入力から整数値と浮動小数点値を読み込む ACCEPT 文の例で
す。
INTEGER :: i
REAL :: x
ACCEPT *, i, x
関連文
FORMAT, NAMELIST, PRINT, および READ
関連概念
関連情報については、次を参照してください。
•
207 ページの「並び入出力」の項
•
220 ページの「入出力 DO 形反復」の項
•
262 ページの「文字式の書式仕様」の項
270
第 10 章
HP Fortran 文
ALLOCATABLE ( 文と属性 )
ALLOCATABLE ( 文と属性 )
形状無指定を用いた割り付け配列を宣言します。
構文
ALLOCATABLE 属性を使用した型宣言文の構文を示します。
type, attrib-list :: entity-list
type
99 ページの第 5 章 「データ型およびデータオブジェクト」に説明されている
とおり、有効な型宣言 (INTEGER, REAL, LOGICAL, CHARACTER,
TYPE(type-name) など ) です。
attrib-list
ALLOCATABLE、およびそれと互換性のある省略可能な次の属性を含む、コン
マで区切られた属性の並びです。
表 10-2 ALLOCATABLE 文 : 利用可能な属性
DIMENSION
PUBLIC
PRIVATE
SAVE
TARGET
entity-list
コンマで区切られた言語要素の並びです。各言語要素は、次の形式のいずれか
です。
array-name [( deferred-shape-spec-list )]
(deferred-shape-spec-list) を省略した場合は、必ずそれを他の宣言文の
中で指定してください。
array-name
ALLOCATABLE 属性を付与される配列の名前です。
deferred-shape-spec-list
コンマで区切られたコロンの並びです。各のコロンは 1 次元を表しています。
配列の次元数は指定されたコロンの数と一致します。
第 10 章
271
HP Fortran 文
ALLOCATABLE ( 文と属性 )
ALLOCATABLE 文の構文は次のとおりです。
ALLOCATABLE [::] array-name [(deferred-shape-spec-list)]
[,array-name [(deferred-shape-spec-list)]]...
ALLOCATABLE 文から (deferred-shape-spec-list) を省いた場合は、必ずそれを型、または
DIMENSION 文のような他の宣言文の中で指定してください。
ALLOCATED 組み込み問い合わせ関数については、528 ページの「ALLOCATED(ARRAY)」の項
で説明しています。これは、割り付け配列が現在割り付けられているかどうかを判別するのに使
用できます。
説明
ALLOCATABLE 属性または文は、すべての次元の寸法が、実行時において ALLOCATE 文が実行さ
れる際に指定される配列を宣言するのに使用できます。このことから、「形状無指定」と呼ばれ
ます。割り付け配列を宣言するときは、名前と次元数だけを指定します。
例
次の文は、1 次元の形状無指定配列を宣言しており、異なる寸法を持つ場合を示しています。
! mls is deferred shape.
INTEGER, ALLOCATABLE :: mls(:)
ALLOCATE (mls (3))
! Allocate 3 elements.
DEALLOCATE (mls)
! mls is no longer allocated
ALLOCATE (mls (-n:n))
! Allocate with different extent
関連文
ALLOCATE および DEALLOCATE
関連概念
割り付け配列、およびそれらを使用する際に適用される条件についての詳細は、59 ページの
「割り付け配列」の項を参照してください。
配列ポインターは、形状無指定配列の操作に対して、より一般的な機構を提供しています。58
ページの「配列ポインター」の項を参照してください。
272
第 10 章
HP Fortran 文
ALLOCATE
ALLOCATE
割り付け配列とポインター指示先への記憶空間を提供します。
構文
ALLOCATE (allocation-list[, STAT= scalar-integer-variable])
allocation-list
コンマで区切られた allocation の並びです。
allocation
allocate-object [(allocate-shape-spec-list)] です。
allocate-object
variable-name または derived-type-component です。各
allocate-object は、割り付け配列またはポインターである必要がありま
す。
allocate-shape-spec-list
コンマで区切られた allocate-shape-spec の並びです。
allocate-shape-spec
[lower-bound:]upper-bound です。allocate-shape-spec の上下限は、
スカラ整数式です。
STAT=scalar-integer-variable
文を実行した後、エラー状態を返します。これを指定すると、文が正常に実行
されるとゼロに設定され、エラーになると次のような非ゼロのいずれかに設定
されます。
第 10 章
1
配列が割り付けらた後、エラーが発生しました。たとえば、
割り付け済みの配列を割り付けようとした場合です。
2
動的メモリー割り付け障害 ( メモリーが使用不能 ) または不
正な大きさ ( 配列が大きすぎる )。
3
1 と 2 の両方のタイプのエラーが発生しました。この種のエ
ラーは、同じ ALLOCATE 文で複数の配列を割り付けた場
合にだけ発生し、両方のエラーが発生します。
273
HP Fortran 文
ALLOCATE
scalar-integer-variable がない場合は、エラーが起きるとそのプログラ
ムは異常終了します。
説明
ALLOCATE 文は、割り付け配列に対する空間、および POINTER 属性を持った変数 ( スカラまたは
配列 ) に対する指示先を作成します。ALLOCATE 文と DEALLOCATE 文によって、ユーザーは実行
時において空間を動的に制御することが可能になります。
割り付け配列に対して、すでに割り当てられた配列を割り付けようとしたり、割り付けられてい
ない配列を割り付け解除しようとすると、エラーになります。割り付け配列が割り付けられてい
るかどうかを判別するのに、ALLOCATED 組み込み関数を使用できます。
ポインター代入文、または ALLOCATE 文を使用して、ポインターを指示先に結合できます。すで
に結合したポインターを割り付けるのはエラーではありません。そのポインターの古い結合は、
新しく割り付けられた空間と置き換えられます。しかし、古い指示先が割り付けられていて、し
かも他のどのポインターも結合していない場合は、その空間は参照できなくなります。
例
次の例では、POINTER 属性を持った複素数型配列が宣言されています。指示先空間は、実行時に
割り付けられ、その大きさは読み込まれる 2 つの整数値で決定されます。プログラムの後の方
で、その空間は DEALLOCATE 文によって解放されます。
COMPLEX, POINTER :: hermitian (:, :)
READ *, m, n
ALLOCATE (hermitian (m, n))
DEALLOCATE (hermitian, STAT = ierr)
次の例では、実数型割り付け配列が宣言されています。割り付けられる空間の大きさは、使用で
きる空間の大きさに依存します。
! Rank-2 allocatable array
REAL, ALLOCATABLE :: intense(:,:)
CALL init_i_j(i, j)
DO
ALLOCATE (intense(i, j), STAT = ierr4)
! ierr4 will be positive if there is not enough space to
!
allocate this array
IF (ierr4 == 0) EXIT
i = i/2; j = j/2
END DO
274
第 10 章
HP Fortran 文
ALLOCATE
次の例の、構造型 node は、2 分木構造の基本です。実数値成分 (val) と 2 つの node 型のポイン
ター成分、left と right で構成されています。変数 top (node 型の先頭 ) が宣言されて、ポイ
ンターに対する指示先である top%left と top%right に空間が割り当てられます。
ALLOCATE 文、DEALLOCATE 文、および node 型のポインター変数によって、そのようなツリー
構造のノードに空間を割り付け、必要に応じてツリー構造をたどり、さらに必要なくなるとその
空間を解放することが可能になります。
TYPE node
REAL val
TYPE(node), POINTER :: left, right
END TYPE node
TYPE(node) top
ALLOCATE (top % left, top % right)
! Pointer components
最後の例では、2 つの CHARACTER 配列、para と key が、POINTER 属性で宣言されています。
para は、空間を割り当てられて、key は para の部分配列を指示します。
! Pointers to char arrays
CHARACTER, POINTER :: para(:), key(:)
CALL init_k_m(k, m)
ALLOCATE (para(1000))
key => para (k : k + m)
関連文
ALLOCATABLE ( 文および属性 ), DEALLOCATE, NULLIFY, および POINTER ( 文および属性 )
関連概念
関連情報については、次を参照してください。
•
509 ページの第 11 章 「組み込み手続き」の組み込み関数 ALLOCATED と ASSOCIATED
•
125 ページの「ポインター」の項
第 10 章
275
HP Fortran 文
ASSIGN
ASSIGN
整変数に、文番号を割り当てます。
構文
ASSIGN stmt-label TO integer-variable
stmt-label
ASSIGN 文と同じ有効域内の実行可能な文、または FORMAT 文に対する文番号
です。
integer-variable 基本整数型のスカラ変数です。構造型成分、記録の欄、そして配列要素は
指定できません。
説明
変数が ASSIGN 文で定義されると、割り当て形 GO TO 文の中で、または入出力文の中の書式指定
子として使用することができます。他に使用できません。
文番号を割り当てた変数には、他の文番号、または整変数を再割り当てできます。
integer-variable に、次に整数値を割り当てた場合は、文番号は参照できません。
例
ASSIGN 20 TO last1
GO TO last1
...
! ASSIGN used with FORMAT statement
ASSIGN 10 TO form1
10 FORMAT(F6.1,2X,I5/F6.1
READ(5,form1)sum,k1,ave1
20 ...
関連文
GO TO ( 割り当て形 )
関連概念
関連情報については、次を参照してください。
•
276
42 ページの「文番号」の項
第 10 章
HP Fortran 文
ASSIGN
•
144 ページの「割り当て形 GO TO 文」の項
第 10 章
277
HP Fortran 文
AUTOMATIC ( 拡張 )
AUTOMATIC ( 拡張 )
手続き内の変数および配列を自動割り付けにします。
構文
AUTOMATIC var-name-list
var-name-list コンマで区切られた、自動割り付けの宣言をされる変数および配列の名前の並
びです。配列名の後には、省略可能な explicit-shape-spec が続きます。
説明
AUTOMATIC 文は、HP 拡張機能として提供されています。
手続き内で宣言された変数または配列が自動割り付けとして宣言されている場合は、手続きの呼
び出しごとに、その複写が 1 つできています。空間は、手続きに入ると同時に割り付けられ、抜
けると同時に割り付け解放されます。この機構は、+save オプションが指定されていない場合、
SAVE または STATIC 属性を持たない変数に対してデフォルトです。
ルーチンを呼び出すたびに、使用可能な変数の「同じ」複写を持つ必要がある場合 ( たとえば、
再帰の深さの記録を保存するために )、その変数は SAVE 属性を持つ必要があります。
次の点に注意してください。
•
AUTOMATIC 文は、手続き内でだけ使用できます。
•
局所的変数は、デフォルトで AUTOMATIC です。
•
引き数と関数値は、AUTOMATIC です。
•
自動割り付け変数は、EQUIVALENCE, DATA または SAVE 文の中には現れません。
•
AUTOMATIC 属性は、自動割り付け配列や自動割り付け文字列と同じではありません。
例
AUTOMATIC r, s, u, v, w(10)
関連文
SAVE および STATIC
278
第 10 章
HP Fortran 文
AUTOMATIC ( 拡張 )
関連概念
自動割り付け変数および静的変数については、『HP Fortran プログラマーガイド』を参照してく
ださい。
第 10 章
279
HP Fortran 文
BACKSPACE
BACKSPACE
ファイルを直前の記録の前に位置付けます。
構文
BACKSPACE 文の構文には、次の 2 つの形式があります。
•
短い形式 :
BACKSPACE integer-expression
•
長い形式 :
BACKSPACE ( io-specifier-list )
integer-expression
順ファイルに接続された装置番号です。
io-specifier-list
コンマで区切られた次の I/O 指定子の並びです。
[UNIT=]unit
順番探査の対象として開いた外部ファイルに接続される装置を指定します。
unit は、ゼロより大きい値を持つ整数式でなければなりません。省略可能な
キーワード UNIT= が省かれた場合は、unit は io-specifier-list の最初の
項目でなければなりません。
ERR=stmt-label
文の実行中にエラーが起きた場合に制御が渡される、実行文の文番号を指定し
ます。
IOSTAT=integer-variable
文が実行された後、入出力状態を返します。文の実行に成功した場合は、
integer-variable がゼロに設定されます。エラーが起きた場合は、正の整
数に設定し、エラーの内容を指示します。
説明
BACKSPACE 文は、unit に接続された外部ファイルに作用して、そのファイルの直前の記録の前
に位置付けます。そのファイルは順番探査用に接続されていなければなりません。
280
第 10 章
HP Fortran 文
BACKSPACE
例
次に示す文は、装置 10 に接続されたファイルを直前の記録の前に位置付けます。
BACKSPACE 10
次の文は、装置 17 に接続されたファイルを直前の記録の前に位置付けます。文の実行中にエ
ラーが起きた場合、制御は文番号 99 の文に渡されて、エラーコードが ios に返されます。
BACKSPACE (17, ERR=99, IOSTAT=ios)
関連文
ENDFILE, OPEN, および REWIND
関連概念
入出力の概念については、199 ページの第 8 章 「入出力およびファイル処理」を参照してくだ
さい。そこでは入出力を実行するプログラムの例も記載しています。入出力の編集については、
509 ページの第 11 章 「組み込み手続き」を参照してください。
第 10 章
281
HP Fortran 文
BLOCK DATA
BLOCK DATA
初期値設定プログラム単位の定義を開始します。
構文
BLOCK DATA [block-data-name]
block-data-name 省略可能な名前です。名前が、初期値設定プログラム単位の終わりの END
BLOCK DATA 文の中で与えられた場合は、プログラム単位を開始する BLOCK
DATA 文の中で与えられる block-data-name と同じでなければなりません。
説明
初期値設定プログラム単位は、DATA 文を使用して、名前付き共通ブロック内の変数に初期値を
指定するのに使用されます。初期値設定プログラム単位は、BLOCK DATA 文で始まります。初期
値設定プログラム単位は、188 ページの「モジュール」の項で説明したように、Fortran 90 の廃
止事項であり、モジュール機能が代替しています。
拡張機能の 1 つとして、HP Fortran では、無名共通ブロックの初期化を許しています。
例
次に示す初期値設定プログラム単位は、共通ブロック cb1 および cb2 内の複数の変数に対して、
初期値を指定しています。各共通ブロック内のすべての変数は、完全に指定されています。
BLOCK DATA
REAL b(4) DOUBLE PRECISION z(3)
COMPLEX c
COMMON /cb1/c,a,b /cb2/z,y
DATA b, z, c /1.0, 1.2 ,2*1.3, 3*7.654321D0, (2.4,3.76)/
END
関連文
COMMON, DATA, および END
関連概念
初期値設定プログラム単位の構造体および構文については、196 ページの「初期値設定プログラ
ム単位」の項で説明しています。
282
第 10 章
HP Fortran 文
BUFFER IN ( 拡張 )
BUFFER IN ( 拡張 )
クレイの BUFFER IN 文との互換性を提供します。
注記
BUFFER IN 文による非同期入出力は、サポートされていません。HP Fortran
90 V2.0 は、同期入出力用の BUFFER IN 文だけをサポートしています。
構文
BUFFER IN (unit, mode) (begin-loc, end-loc)
unit
装置識別子 ( 整数式 ) です。
mode
無視されます。
begin-loc, end-loc
BUFFER IN 操作の開始位置と終了位置を示す変数名、配列名、または配列要
素です。begin-loc および end-loc は、同じ配列の要素 ( または、配列と
EQUIVALENCE 結合された要素 ) または同じ共通ブロックのメンバーでなけ
ればなりません。
説明
BUFFER IN 文は、クレイの BUFFER IN 機能と互換性を持たせるための HP Fortran の拡張機能
です。この文は、後続の文を並行して実行させながら、データを移行します。
BUFFER IN 文は、既存のクレイコードの移植の支援として提供されます。従来の Fortran 90 の
入出力方法に比べてパフォーマンスが優れているわけではありません。
•
他の Fortran 入出力文 ( たとえば、READ, WRITE, PRINT, ACCEPT, TYPE) は、BUFFER IN 文と同
じ装置では使用できません。同じ論理装置で Fortran 90 規格の入出力操作と BUFFER IN を
混用すると、入力ストリーム (READ) が混乱したり、データファイル (WRITE) が破壊され
ます。
•
BACKSPACE 文は BUFFER IN 文で転送可能なファイルに対しては使用できません。このような
ファイルは「ピュアデータ」( 非ブロック化 ) ファイルと呼ばれます。
第 10 章
283
HP Fortran 文
BUFFER IN ( 拡張 )
例
次のプログラムでは、BUFFER IN 文および BUFFER OUT 文の使用方法を示します。このプログ
ラムは +autodbl オプションでコンパイルしなければなりません。
PROGRAM bufferedIoTest
! buffered i/o example: compile with +autodbl
INTEGER a(10)
OPEN ( UNIT = 7, NAME = ’test.dat’, FORM = ’UNFORMATTED’ )
a = (/ (i,i=1,10) /)
! initialize the array A
BUFFER OUT ( 7, 0 ) ( a, a(10) )
! write out A twice
CALL unit ( 7 )
BUFFER OUT ( 7, 0 ) ( a, a(10) )
CALL unit ( 7 )
! now position the file 40 bytes (5 integer values) into the file
CALL setpos ( 7, 5 )
! read the remainder of the 1st record, and half of the second
BUFFER IN ( 7, 0 ) ( a, a(10) )
WRITE(6,*) a
CLOSE (7)
END PROGRAM bufferedIoTest
関連文
BUFFER OUT
284
第 10 章
HP Fortran 文
BUFFER OUT ( 拡張 )
BUFFER OUT ( 拡張 )
クレイの BUFFER OUT 文との互換性を提供します。
注記
BUFFER OUT 文による非同期入出力は、サポートされていません。HP Fortran
90 V2.0 は、同期入出力用の BUFFER OUT 文だけをサポートしています。
構文
BUFFER OUT
(unit, mode) (begin-loc, end-loc)
unit
装置識別子 ( 整数式 ) です。
mode
無視されます。
begin-loc, end-loc
BUFFER OUT 操作の開始位置と終了位置をマークする変数、配列、または配列
要素の文字による名称です。begin-loc および end-loc は、単一の配列要素
( すなわち配列と EQUIVALENCE 結合された要素 ) または同じ共通ブロック
のメンバーでなければなりません。
説明
BUFFER OUT 文は、クレイの BUFFER OUT 機能と互換性を持たせるための HP Fortran の拡張機
能です。この文は、後続の文を並行して実行させながら、データを移行します。
BUFFER OUT 文は、既存のクレイコードの移植の支援として提供されます。従来の Fortran 90
の入出力方法に比べて目立ってパフォーマンスが優れているわけではありません。実際、
BUFFER OUT 文は書式なしの固定記録長入出力の速度よりもわずかに遅いです。
•
他の Fortran 入出力文 ( たとえば、READ, WRITE, PRINT, ACCEPT, TYPE) は、BUFFER OUT 文と
同じ装置では使用できません。同じ論理装置で Fortran 90 規格の入出力操作と BUFFER OUT
を混用すると、入力ストリーム (READ) が混乱したり、データファイル (WRITE) が破壊さ
れます。
•
BACKSPACE 文は BUFFER OUT 文で移行可能なファイルに対しては使用できません。このよう
なファイルは「ピュアデータ」( 非ブロック化 ) ファイルと呼ばれます。
例
BUFFER IN の例については、283 ページの「BUFFER IN ( 拡張 )」の項を参照してください。
第 10 章
285
HP Fortran 文
BUFFER OUT ( 拡張 )
関連文
BUFFER IN
286
第 10 章
HP Fortran 文
BYTE ( 拡張 )
BYTE ( 拡張 )
整数型の言語要素を宣言します。
構文
BYTE [[, attrib-list] ::] entity-list
attrib-list
コンマで区切られた次の 1 つ以上の属性の並びです。
表 10-3 BYTE 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
PRIVATE
DIMENSION
OPTIONAL
PUBLIC
EXTERNAL
PARAMETER
SAVE
INTENT
POINTER
TARGET
attrib-list が存在する場合、2 重コロンを後ろに付けなければなりません。
各属性については、本章の対応する文を参照してください。
entity-list
コンマで区切られた言語要素の並びです。各言語要素は、次の形式です。
name [( array-spec )] [= initialization-expr]
name
変数または関数の名前です。
array-spec
コンマで区切られた次元の上下限値並びです。
initialization-expr
整定数式です。initialization-expr が存在する場合、前に 2 重コロンを付
けなければなりません。
説明
BYTE 文は、言語要素の型を宣言するための HP 拡張機能です。言語要素は、1 バイトで表現で
きるすべての値をとることができます。この文は、INTEGER(KIND=1) 文と等価です。
第 10 章
287
HP Fortran 文
BYTE ( 拡張 )
BYTE 文は、すべての実行文より前にあるという要件も含めて、すべての型宣言文に対する規則
によって、制限されています。ただし、BYTE 文は、種別パラメータを持たないことに注意して
ください。
例
次は、有効な宣言です。
BYTE i, j
BYTE :: k
BYTE, PARAMETER :: limit=120
! use an array constructor to initialize an array
BYTE, DIMENSION(4) :: bvec=(/1,2,3,4/)
! use slashes as initialization delimiters, an HP extension
BYTE b/12/, bb/27/ ! note, no double colon
関連文
INTEGER
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
107 ページの「暗黙の型宣言」の項
•
54 ページの「配列宣言」の項
•
70 ページの「配列構成子」の項
•
78 ページの「式」の項
288
第 10 章
HP Fortran 文
CALL
CALL
サブルーチンを呼び出します。
構文
CALL subr-name[([ subr-act-arg-spec-list ])]
subr-name
呼び出すサブルーチンの名前です。
actual-argument-list
コンマで区切られた次のような形式の言語要素の並びです。
[keyword =]actual-argument
actual-argument
次のいずれかです。
•
expression
•
variable
•
procedure-name
•
*label または &label
keyword
呼び出されるサブルーチンの仮引き数名の 1 つです。
「引き数キーワード」が
指定された場合、そのサブルーチン引用仕様は、明示的でなくてはなりませ
ん。
説明
CALL 文は、サブルーチンを呼び出し、もしあれば実引き数を指定するために使用されます。サ
ブルーチンの実行は、最初の実行文から始まります。CALL 文を実行するときの、イベントの順
序は、次のとおりになります。
1. 式になっている実引き数が、評価されます。
2. 実引き数が、対応する仮引き数と結合されます。
3. 呼び出されたサブルーチンに制御が渡されて、サブルーチンが実行されます。
第 10 章
289
HP Fortran 文
CALL
4. 通常は、CALL 文に続く文に、または選択戻り引き数 (*label または &label) によって指示さ
れる文番号に、サブルーチンから制御が渡されます (& label 形式は、互換性拡張機能とし
て提供され、固定形式でのみ使用できます )。
サブルーチンは、直接的または間接的に自分自身を呼び出せます。この場合、サブルーチン定義
の SUBROUTINE 文で、キーワード RECURSIVE を指定する必要があります。
HP 拡張機能として、%VAL 組み込み関数および %REF 組み込み関数が提供されています。これら
の関数は、他の言語で書かれたルーチンを呼び出す引き数渡し規則を変更するために使用しま
す。
Fortran 90 でのサブルーチン呼び出しの方法には、CALL 文を使用する以外にもう 1 つ、
「利用者
定義代入」を使用する方法があります。そこでは、サブルーチンを使用して定義された利用者定
義型代入演算子を使用します。
例
! Interface for subroutine draw
INTERFACE
SUBROUTINE draw (x_start, y_start, x_end, y_end, form, scale)
REAL x_start, y_start, x_end, y_end
CHARACTER (LEN = 6), OPTIONAL :: form
REAL, OPTIONAL :: scale
END SUBROUTINE draw
END INTERFACE
! References to draw
! arguments given by position; optional argument scale omitted
CALL draw (5., -4., 2., .6, ”DASHED”)
! arguments given by keyword; optional argument form omitted
CALL draw (scale=.4, x_end=0., y_end=0., x_start=.5, y_start=.3)
関連文
INTERFACE および SUBROUTINE
関連概念
関連情報については、次を参照してください。
•
161 ページの「再帰的引用」の項
•
159 ページの「サブルーチンを引用する」の項
•
168 ページの「引き数」の項
290
第 10 章
HP Fortran 文
CALL
•
175 ページの「%VAL および %REF 組み込み関数」の項
•
184 ページの「利用者定義代入」の項
第 10 章
291
HP Fortran 文
CASE
CASE
CASE 構文で文ブロックの開始位置を示します。
構文
CASE ( case-selector ) [ construct-name ]
case-selector SELECT CASE 文で指定された場合指標に一致する候補となる値の範囲をコン
マで区切った並びです。並びの各項目は、次のいずれかの形式を取ることがで
きます。
•
case-value
•
low:
•
:high
•
low:high
•
DEFAULT
case-value, low, および high
整数型、文字型、論理型のスカラ初期値式です。
DEFAULT
CASE 構文中の、他の CASE 文が一致しない場合に、実行する文ブロックを示
します。
construct-name CASE 構文に与えられる名前です。
説明
CASE 文は、CASE 構文中で使用され、文ブロックの開始位置を示します。CASE 構文は、複数の
ブロックで構成できます。最高その 1 つが選択され、実行されます。選択は、SELECT CASE 文
によって作られる場合指標を、各 CASE 文の case-selector と比較することによって決定され
ます。一致するものが見つかれば、一致する case-selector の文ブロックを実行します。場合
指標 (c) と case-selector の一致は、次のように case-selector の各形式に対して決定され
ます。
case-value
整数型と文字型については、c .EQ. case-value の場合、一致します。
論理型については、c .EQV. case-value の場合、一致します。
292
第 10 章
HP Fortran 文
CASE
low:
整数型と文字型については、c .GE. low の場合、一致します。
:high
整数型と文字型については、c .LE. high の場合、一致します。
low : high
整数型と文字型については、c .GE. low .AND. c .LE. high の場合、一致しま
す。
DEFAULT
整数型、文字型、論理型について、他のすべての case-selector と一致する
ものがなく、また、DEFAULT が case-selector として指定されている場合
に、一致します。
CASE DEFAULT が存在せず、他の CASE 文と一致しているものがない場合、CASE 構文中の文ブ
ロックは実行されず、END SELECT 文に続く最初の実行文に実行が移されます。
最大 1 つの DEFAULT 選択子を CASE 構文に書けます。
各 CASE 文は、1 つの CASE 構文中で、一意な値または一意な値の範囲を指定しなければなりま
せん。その内の 1 つだけに一致でき、1 つの文ブロックだけを実行できます。
1 つの CASE 構文内のすべての case-selector と場合指標は、同じ整数型、文字型、論理型の
いずれかでなければなりません。しかし、文字型の長さは異なっていてもかまいません。
コロン形式 (low:, :high または、low:high) は論理型では許されません。
CASE 文を範囲の順序で書けばわかりやすくなりますが、CASE 構文を正しく実行させたり、最適
化したりするために必ずしも必要なことではありません。特に、DEFAULT は、CASE 文のどこに
でも書くことができ、最後に記述する必要はありません。
名前付き CASE 構文中の CASE 文は、construct-name を指定する必要はありませんが、指定す
る場合、その名前は SELECT CASE の名前と一致しなければなりません。
CASE 文は、空の文ブロックを持つことができます。
例
次の例は、個人の債権と債務を検討し、結果残高が債務超過、空、過小、十分であるかを示す
メッセージを出力します。
INTEGER :: credits, debits
SELECT CASE (credits - debits)
CASE (:-1)
PRINT *, 'OVERDRAWN'
CALL TRANSFERFUNDS
CASE (0)
PRINT *, 'NO MONEY LEFT'
CASE (1:50)
第 10 章
293
HP Fortran 文
CASE
PRINT *, 'BALANCE LOW'
CASE (51:)
PRINT *, 'BALANCE OKAY'
END SELECT
関連文
SELECT CASE および END ( 構文 )
関連概念
CASE 構文については、134 ページの「CASE 構文」の項で説明します。
294
第 10 章
HP Fortran 文
CHARACTER
CHARACTER
文字型の言語要素を宣言します。
構文
CHARACTER [char-selector] [[, attrib-list] ::] entity-list
char-selector 文字変数の長さと種別を指定します。次のいずれかの形式を取ります。
•
([LEN=]len-spec[, KIND=kind-param])
•
(len-spec, [KIND=]kind-param)
•
(KIND=kind-param[, LEN=len-spec])
•
*len-const [,]
•
*(len-spec[) ,]
ここで kind-param ( 指定する場合 ) は、デフォルトの 1 でなければなりませ
ん。len-spec は、アスタリスク (*) か、宣言式のどちらかであり、
len-const は、整数型の定数です。最後の形式の len-param は、かっこで囲
み、型宣言文で 2 重コロンが現れないときのみ省略可能なコンマを書くことが
できます。len-spec が負の値と評価された場合、長さゼロの文字型の言語要
素が宣言されます。len-spec を指定しない場合、デフォルトは 1 です。
attrib-list
コンマで区切られた次の 1 つ以上の属性の並びです。
表 10-4 CHARACTER 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
PRIVATE
DIMENSION
OPTIONAL
PUBLIC
EXTERNAL
PARAMETER
SAVE
INTENT
POINTER
TARGET
attrib-list が存在する場合、2 重コロンを後に付けなければなりません。
各属性については、本章の対応する文を参照してください。
entity-list
言語要素をコンマで区切った並びです。各言語要素は次の形式を取ります。
name[(array-spec)][*len-spec][= initialization-expr]
第 10 章
295
HP Fortran 文
CHARACTER
ここで name は、変数や関数の名前、array-spec はコンマで区切られた次元
の上下限の並び、len-spec はアスタリスク (*) または宣言式、
initialization-expr は文字定数式です。initialization-expr が存在す
る場合、entity-list の前に 2 重コロンを付けなければなりません。
説明
CHARACTER 文を使用して、文字データの長さと特性を宣言します。CHARACTER 文は、すべての
実行文に先行する要件を含め、すべての型宣言文に対する規則に従います。
文字長が変化することを示すには、len-spec にアスタリスク (*) を指定することによって文字
長引き継ぎパラメータを使用します。アスタリスクは次の場合に使用できます。
•
関数の型宣言。関数は内部関数やモジュール関数であってならず、配列値を持つ関数、ポイ
ンター値を持つ関数、再帰的な関数であってもいけません。
•
手続きの仮引き数の宣言。
•
名前付き定数の宣言 (PARAMETER 文を参照 )。
例
次は有効な宣言です。
CHARACTER c1, c2
CHARACTER(LEN=80) :: text(0:25)
CHARACTER(2, 1), PARAMETER :: limit='ZZ'
! initialize an array, using an array constructor
CHARACTER(4) :: response(3) = (/"Yes.", "No!!", "Huh?"/)
! use slashes as initialization delimiters, an HP extension
CHARACTER*10 c1/'Tom'/,c2/'Jones'/ ! note, no double colon
次の文字長引き継ぎパラメータの使用は有効です。
CHARACTER(*) dummy_arg_name
CHARACTER(*), PARAMETER :: hello=”Hi Sam”
CHARACTER(LEN=*), PARAMETER :: hello=”Hi Sam”
次の c は通常の変数であって、手続きへの仮引き数ではないと仮定すると、次の文字長引き継ぎ
パラメータの使用は不正です。
CHARACTER*(*) c
! illegal
関連概念
関連情報については、次を参照してください。
296
第 10 章
HP Fortran 文
CHARACTER
•
102 ページの「組み込み型の型宣言」の項
•
107 ページの「暗黙の型宣言」の項
•
115 ページの「自動割り付けデータオブジェクトとしての文字列」の項
•
54 ページの「配列宣言」の項
•
70 ページの「配列構成子」の項
•
78 ページの「式」の項
•
586 ページの「LEN(STRING)」の項
第 10 章
297
HP Fortran 文
CLOSE
CLOSE
ファイル接続を終了させます。
構文
CLOSE ( io-specifier-list )
io-specifier-list
コンマで区切った次の I/O 指定子の並びです。
[UNIT=]unit
外部ファイルに接続された装置を指定します。unit は、正の整数値を持つ式
でなければなりません。省略可能なキーワード UNIT= を省略すると、unit
は、io-specifier-list の最初の項目でなければなりません。
ERR=stmt-label
文の実行中にエラーが発生すると、制御が渡される実行文の番号を指定しま
す。IOSTAT= も ERR= も指定せずにエラーが発生すると、プログラムの実行は
中止され、システムエラー メッセージが発行されます。stmt-label は、ERR
指定子のある CLOSE 文と同じ有効域内になければなりません。
IOSTAT=integer-variable
文の実行後の入出力の状態を返します。文の実行に成功すると、
integer-variable はゼロに設定されます。エラーが発生すると、発生した
エラーを示す正の整数に設定されます。IOSTAT= も ERR= も指定せずにエラー
が発生すると、プログラムの実行は中止され、システムエラー メッセージが
発行されます。
STATUS=character-expression
閉じた後のファイルの状態を指定します。character-expression は、次の
値にできます。
'KEEP'
閉じた後もファイルを維持します ( デフォルト )。
'DELETE'
閉じた後にファイルを維持しません。
STATUS 指定子は、ファイルがスクラッチファイルとして開かれている場合に
は無視されます。OPEN 文については、411 ページの「OPEN」の項を参照し
てください。
298
第 10 章
HP Fortran 文
CLOSE
説明
CLOSE 文は、OPEN 文から得られた装置番号のファイルを閉じます。CLOSE 文には、装置番号を
指定しなければならず、他の I/O 指定子は、それぞれ最高 1 つだけ指定することができます。
CLOSE 文は、指定された装置にファイルを接続した OPEN 文があるプログラム単位と同じプログ
ラム単位内にある必要はありません。CLOSE 文で存在しない装置を指定したり、それに接続され
たファイルがない場合は、何も起こりません。
例
次の例では、CLOSE 文の様々な使用方法を示しています。最初の例では、CLOSE 文は、装置番号
10 の装置に接続されているファイルを閉じます。閉じた後も、STATUS='SCRATCH' 指定子で開
いたものでない限り、存在し続けます。
CLOSE (10)
次の例では、装置番号 6 の装置に接続されているファイルを閉じた後、ファイルは存在しなくな
ります。
CLOSE(UNIT=6,STATUS='DELETE')
次のコードでは、前の例と同じ結果となります。
CHARACTER(LEN=6) cstat
cstat='delete'
CLOSE(UNIT=6,STATUS=cstat)
次の例では、装置番号 5 の装置に接続されているファイルを閉じます。エラーが発生すると、制
御は文番号 100 の実行文に移り、エラーコードは変数 ios に格納されます。
CLOSE(5,IOSTAT=ios,ERR=100)
関連文
OPEN
関連概念
入出力の概念については、199 ページの第 8 章 「入出力およびファイル処理」を参照してくだ
さい。そこでは、入出力を使用するプログラムの例を示しています。
第 10 章
299
HP Fortran 文
COMMON
COMMON
共通ブロックを指定します。
構文
COMMON [/[[common-block-name]]/] object-list
[,]/[common-block-name]/ object-list]...
common-block-name
名前付き共通ブロックの名前です。
object-list
コンマで区切られた、スカラの変数、配列、記録、構造体の並びです。配列を
指定すると、その後に明示上下限式を記述できます。
説明
COMMON 文は、異なるプログラム単位で共有する 1 つ以上の記憶領域を定義します。さらに、こ
れらの領域に記憶するオブジェクト、すなわち、変数、配列、記録、構造体を識別します。異な
るプログラム単位で共有する共通のオブジェクトは、記憶列結合によって参照可能になります。
共通ブロック名に続く各オブジェクトは、その共通ブロック内にあると宣言されます。
/common-block-name/ を省略すると、対応する object-list 内のすべてのオブジェクトは、無
名共通ブロック内にあると指定されます。common-block-name のない 2 つのスラッシュを指定
することによって無名共通ブロック内の変数を宣言することも可能です。次の例を検討します。
!Declare variables a, b, c in blank common.
COMMON a, b, c
! Declare pay and time in blank common,
! and red in the named common block color.
COMMON pay, time, /color/red
! Variables a1 and a2 are in common block a; array x and variable
! are in blank common; and variable d is in common block c
COMMON/a/a1,a2,//x(10),y,/c/d
300
第 10 章
HP Fortran 文
COMMON
同じプログラム単位内で、共通ブロック名または無名ブロックによる指定は、複数の COMMON 文
内で、複数回書くことができます。同じ共通ブロック名が後で現れる共通ブロックの変数リスト
は、その共通ブロック名のリストが続いているものとして扱われます。たとえば、次の COMMON
文です。
COMMON a,b,c /x/y,x,d //w,r
COMMON /cap/hat,visor, //tax, /x/o,t
これは、次と等価です。
COMMON a,b,c,w,r,tax
COMMON /x/y,x,d,o,t
COMMON /cap/hat,visor
名前付き共通ブロックと異なり、無名共通ブロックは異なる有効域で大きさが異なってもかまい
ません。しかし、無名共通ブロックは初期化できません。
拡張として、HP Fortran は、すべての共通ブロックを静的メモリーに保存します。
次の制限条項は、共通ブロックの使用に適用されます。
•
共通ブロック名はすべて、副プログラム名と異なる名前でなければなりません。
•
名前付き共通ブロックの大きさは、宣言されるすべてのプログラム単位内で同じでなければ
なりません。しかし、無名共通ブロックの大きさは同じである必要がないことに注意してく
ださい。
•
次の項目は、COMMON 文に書いてはいけません。
— 副プログラム内の仮引き数
— 関数、サブルーチン、組み込み関数
— クレイ形式のポインターによって宣言される指示先
— 参照結合によって参照できる変数
— 自動割り付け文字変数を含む自動割り付けオブジェクト
— 割り付け配列
•
構造型オブジェクトは、SEQUENCE 属性で定義されると、共通ブロックに書くことができま
す。
•
変数は、1 つのプログラム単位内の 1 つの COMMON 文の中にだけ書くことができます。
•
大きさゼロの共通ブロックは許されています。同じ名前の大きさゼロの共通ブロックは、記
憶列結合しています。
•
COMMON 文内の配列の上下限は、定数指定の式でなければなりません。
第 10 章
301
HP Fortran 文
COMMON
•
共通ブロックにはポインターを書くことができます。この場合、その共通ブロックの分身す
べてにおいて、同じ型、同じ型パラメータ、同じ次元数を持たなければなりません。
共通ブロックの初期化
規格の拡張として、HP Fortran では、たとえばサブルーチン内のような、初期値設定プログラ
ム単位の外部で共通ブロックを初期化できます。しかし、与えられた共通ブロックに対するすべ
てのデータの初期化は、同じコンパイル単位内で行われなければなりません。
HP Fortran では、無名共通ブロックも初期化できます。
共通ブロックの大きさ
共通ブロックの大きさは、含んでいる変数の数と型によって決定されます。次の例では、共通ブ
ロック my_block は、20 バイトの記憶列をとり、b は 8 バイト ( 要素ごとに 2 バイト ) を使用
し、arr は、12 バイト ( 要素ごとに 4 バイト ) を使用します。
INTEGER(2) b(4)
INTEGER(4) arr(3)
COMMON /cb/b, arr
この例で示す配列 b と arr に対する共通領域内のデータ空間は、次のように割り付けられます。
表 10-5 COMMON 文 : 共通ブロックの割り付け例
バイト
共通ブロックの変数
0, 1, 2, 3
b(1), b(2)
4, 5, 6, 7
b(3), b(4)
8, 9, 10, 11
arr(1)
12, 13, 14, 15
arr(2)
16, 17, 18, 19
arr(3)
共通ブロック記憶列の割り付け
共通ブロック記憶列は、リンク時に割り付けられます。これはどのプログラム単位に対しても局
所的ではありません。
共通ブロックを使用するプログラム単位は、( 名前が指定されていれば ) ブロック名を含む
COMMON 文を含まなければなりません。プログラム単位によって共通ブロックに割り当てられた
変数は、名前、型、要素の数を他のプログラム単位の変数と対応させる必要はありません。唯一
考慮する点は、異なったプログラム単位が参照する共通ブロックの大きさです。同じ共通ブロッ
クの異なる分身内のオブジェクト間での対応は、記憶列結合によって確立されます。
302
第 10 章
HP Fortran 文
COMMON
HP Fortran では次のことに注意してください。異なるデータの割り付け境界制限のある型が 1
つの共通ブロック内で混在している場合は、コンパイラは必要に応じてパディングしたバイトを
挿入することがあります。
例
次の例では、異なる変数ではあるが大きさが同じ変数を持った異なるプログラム単位における、
同じ共通ブロックの宣言方法を示します。
! common declaration for program unit 1
INTEGER i, j, k
COMMON /my_block/ i, j, k
! common declaration for program unit 2
INTEGER n(3)
COMMON /my_block/ n(3)
プログラム単位 1 内の変数 i, j, k は、プログラム単位 2 の配列 n と同じ記憶領域を共有します。
プログラム単位 1 の i は、プログラム単位 2 の n(1), j は n(2), k は n(3) と一致します。
関連文
EQUIVALENCE
関連概念
割り付け境界についての詳細は、表 5-1 および 121 ページの「構造型オブジェクトのデータの割
り付け境界」の項を参照してください。
第 10 章
303
HP Fortran 文
COMPLEX
COMPLEX
複素数型の言語要素を宣言します。
構文
COMPLEX [kind-spec] [[, attrib-list] ::] entity-list
kind-spec
entity-list 内の言語要素の指数範囲と有効桁数を指定する種別型パラメー
タです。kind-spec は、次の形式を取ります。
([KIND=]kind-param)
ここで kind-param は、複素数の実部と虚部の両方の種別を表現します。これ
は整数値 4 または 8 を持つ名前付き定数、または定数式にできます。基本種
別複素数型の大きさは 4 です。
拡張として、kind-spec は次の形式を取ることができます。
*len-param
ここで len-param は、整数値の 8 または 16 です ( 基本の大きさ =8)。これ
は、複素数の言語要素全体の大きさを表現します。
attrib-list
コンマで区切られた次の 1 つ以上の属性の並びです。
表 10-6 COMPLEX 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
PRIVATE
DIMENSION
OPTIONAL
PUBLIC
EXTERNAL
PARAMETER
SAVE
INTENT
POINTER
TARGET
attrib-list が存在する場合、2 重コロンを後に付けなければなりません。
各属性についての詳細は、本章の対応する文を参照してください。
entity-list
コンマで区切られた言語要素の並びです。各言語要素は次の形式を取ります。
name [( array-spec )] [= initialization-expr]
304
第 10 章
HP Fortran 文
COMPLEX
ここで name は、変数または関数の名前、array-spec は、コンマで区切られ
た次元の上下限の並び、initialization-expr は、複素定数式です。
initialization-expr が存在する場合、entity-list の前に 2 重コロンを
付けなければなりません。
説明
COMPLEX 文を使用して、数学的な複素数の近似値であるデータの長さと特性を宣言します。複素
数は、実部と虚部で構成されます。種別型パラメータ ( 指定されている場合 ) は、表現方法を示
します。
COMPLEX 文は、すべての実行文に先行する条件も含め、型宣言文の規則によって制限を受けま
す。
移植性のための拡張として、HP Fortran では、言語要素の長さ指定に次の構文を使用できます。
name [*len] [ ( array-spec )] [= initialization-expr]
array-spec を指定した場合、*len を、array-spec の前か後ろのどちらかに書くことができま
す。name を、*len を付けて指定した場合、kind-spec が指定する長さを無効にします。
例
次の宣言は、有効な宣言です。
COMPLEX x, y
COMPLEX(KIND=8) :: z
COMPLEX,PARAMETER :: t1(2)=(/(3.2, 0), (.04, -1.1)/)
! initialize an array, using an array constructor
COMPLEX, DIMENSION(2) :: &
cvec=(/(2.294, 6.288E-2), (-1.0096E7, 0)/)
! use slashes as initialization delimiters, an HP extension
COMPLEX cx/(2.294, 6.288E-2)/
! note, no double colon
! the following declarations are equivalent; the second uses the
! HP length specification extension
COMPLEX(KIND = 8) x
COMPLEX(8) x*16
関連文
DOUBLE COMPLEX
関連概念
関連情報については、次を参照してください。
第 10 章
305
HP Fortran 文
COMPLEX
•
102 ページの「組み込み型の型宣言」の項
•
107 ページの「暗黙の型宣言」の項
•
54 ページの「配列宣言」の項
•
70 ページの「配列構成子」の項
•
78 ページの「式」の項
•
583 ページの「KIND(X)」の項
306
第 10 章
HP Fortran 文
CONTAINS
CONTAINS
内部手続きやモジュール手続きを導入します。
構文
CONTAINS
説明
CONTAINS 文は、その文を含むプログラム単位から切り離して、内部手続きまたはモジュール手
続きを導入します。この文は次の中で使用します。
•
主プログラム、外部副プログラム、モジュール副プログラム。どの場合も、1 つ以上の内部
手続きに先行します。
•
モジュール。ここでは、すべてのモジュール手続きに先行します。
CONTAINS 文が存在する場合、その後に少なくとも 1 つの副プログラムが続かなければなりませ
ん。
例
最初の例では、内部関数を導入する CONTAINS を示します。さらに、内部関数の機構がいかにし
て、FORTRAN 77 の文関数の機構を提供できるかを示します。
PRINT *, double_real(6.6)
CONTAINS
FUNCTION double_real (x); REAL x
double_real = 2.0 * x
END FUNCTION
END
次の例では、内部手続きを含む主プログラムを示します。
PROGRAM electric
! Program header
REAL current
! Specification part
current = 100.5
! Execution part begins
CALL compute_resistance( voltage, current, resistance )
CONTAINS
! Internal procedure part
SUBROUTINE compute_resistance( v, i, r )
REAL i
第 10 章
307
HP Fortran 文
CONTAINS
r = v / i
END SUBROUTINE
END PROGRAM electric
3 番目の例では、モジュール副プログラムを含み、さらにそれが内部副プログラムを含むモ
ジュールの例を示します。
MODULE one
CONTAINS
SUBROUTINE two(x)
! Module subprogram
CONTAINS
LOGICAL FUNCTION three(y)
!Internal subprogram
END FUNCTION three
END SUBROUTINE two
END MODULE one
関連文
SUBROUTINE および FUNCTION
関連概念
関連情報については、次を参照してください。
•
152 ページの「プログラム単位」の項
•
164 ページの「内部手続き」の項
•
188 ページの「モジュールプログラム単位」の項
308
第 10 章
HP Fortran 文
CONTINUE
CONTINUE
プログラム単位内の参照位置を確立します。
構文
CONTINUE
説明
CONTINUE 文は、プログラムの実行に影響を与えません。制御は次の実行文へ移行します。
CONTINUE 文は一般的に、文番号の場所に印を付けるために使用され、特に、FORTRAN 77 形
式の DO ループの端末文として使用します。
例
count = 0
DO 20 i = 1, 10
count = count + i
20 CONTINUE
PRINT *, count
関連文
DO
関連概念
関連情報については、次を参照してください。
•
136 ページの「DO 構文」の項
•
142 ページの「フロー制御文」の項
第 10 章
309
HP Fortran 文
CYCLE
CYCLE
DO ループの現在の繰り返し処理を中断します。
構文
CYCLE [ do-construct-name ]
do-construct-name
DO 構文の名前であり、その構文はこの CYCLE 文を含まなければなりません。
説明
CYCLE 文を使用して、DO ループの実行を制御します。これが実行されると、現在実行中のルー
プの繰り返し処理を中断し、制御を次の繰り返し処理に移し、ループインデックスを適切に調整
します。これは、DO 構文または FORTRAN 77 形式の DO ループのどちらでも使用できます。
CYCLE 文は、1 つの DO ループに属します。do-construct-name が与えられていなければ、
CYCLE 文は、直接囲んでいる DO ループを再開します。do-construct-name が与えられていれ
ば、CYCLE 文は、同じ名前が付けられた DO ループを再開します。
例
次の例は、CYCLE 文を使用してバブルソートを制御します。
LOGICAL :: swap
INTEGER :: i, j
outer: DO i = 1, n-1
swap = .FALSE.
inner: DO j = n, i+1, -1
IF (a(j) >= a(j-1)) CYCLE inner
swap = .TRUE.
atmp = a(j)
a(j) = a(j-1)
a(j-1) = atmp
END DO inner
IF (.NOT. swap) EXIT outer
END DO outer
310
第 10 章
HP Fortran 文
CYCLE
関連文
DO および EXIT
関連概念
関連情報については、次を参照してください。
•
136 ページの「DO 構文」の項
•
142 ページの「フロー制御文」の項
第 10 章
311
HP Fortran 文
DATA
DATA
プログラムの変数を初期化します。
構文
DATA var-list1 / val-list1 / [[,]var-list2 / val-list2 /]...
var-list
コンマで区切られた次の言語要素の並びです。
•
変数名
•
配列名
•
配列の添え字三つ組の部分配列。たとえば、次のとおりです。
points(1:10:2)
•
配列要素。たとえば、次のとおりです。
scores(0)
•
部分列。たとえば、次のとおりです。
name(1:10)
•
初期化 DO 形反復。たとえば、次のとおりです。
((matrix(i,j),i=0,5),j=5,10)
•
構造型のオブジェクト
•
構造型オブジェクトの成分
次のものは、var-list に書けません。
312
•
ポインターに基づいた変数
•
記録および記録欄の引用。しかし、記録の欄は記録の構造体定義で初期化
できます。451 ページの「RECORD ( 拡張 )」の項を参照してください。
•
自動割り付け文字変数を含む自動割り付けオブジェクト
•
仮引き数
•
割り付け配列。すなわち、次元数は指定されているが、各次元の上下限は
指定されずに宣言されている配列。
第 10 章
HP Fortran 文
DATA
val-list
•
関数の結果変数
•
参照結合または親子結合によって使用できるようになるオブジェクト
•
手続き名
コンマで区切られた定数値の並びです。並び中の各定数は、var-list 内の対
応する変数に代入される値を表現します。反復数を定数の前に付けて、定数の
値を繰り返すこともできます。定数の反復の構文は次のとおりです。
r*val
ここで r は、正の整数で、定数値 val を繰り返す回数を指定します。
説明
DATA 文は、プログラム単位の実行前に、プログラム単位に対して局所的な変数を初期化します。
初期化は次のように行われます。
var-list はスカラ変数の並びを形成するために展開され、value-list はスカラ定数の並びを
形成するために展開されます。展開された各並びの項目数は同じでなければならず、展開された
2 つの並び内の項目間には 1 対 1 の対応がなければなりません。展開された var-list 内の変数
は、その対応に基づいて初期化されます。
var-list が配列名を含む場合、展開された定数の並びは、その配列内のすべての要素に対する
定数を含まなければなりません。
var-list 内の大きさがゼロの配列や反復数がゼロの初期化 DO 形反復では、どの変数も展開さ
れた変数の並びにはなりません。ただし、長さがゼロの文字変数は展開された変数の並びになり
ます。
定数が数値型または論理型である場合、対応する変数はどんな数値型でもかまいません。オブ
ジェクトが構造型である場合、対応する定数は同じ型でなければなりません。定数の型と変数の
型が一致しない場合、表 4-5 で説明する規則によって、型変換が実行されます。
変数は、2 進数、8 進数、16 進数で初期化できます。
変数や配列要素は、1 つの DATA 文内で複数回書くことができません。2 つの変数が
EQUIVALENCE 文によって同じ記憶空間を共有する場合は、DATA 文には 1 つだけを記述できま
す。文字変数の部分列や別の配列要素を DATA 文に書くと、どの DATA 文にも、重複した部分列
( 変数全体または配列要素全体を含む ) を書けません。
文字定数の長さとそれが対応する文字変数に宣言された長さは、同じである必要はありません。
定数が変数より短い場合は、足りない場所に空白文字が置かれます。定数が変数より長い場合
は、変数と同じ長さになるように右端が切り捨てられます。
第 10 章
313
HP Fortran 文
DATA
var-list に添え字の付いた配列要素を指定する場合は、添え字は初期値でなければなりませ
ん。
DATA 文は、実行文の間に分散して書くことができます。しかし、実行する前に初期化するため、
実行代入文としては使用できません。
Fortran 90 拡張機能
整数以外の型の変数も、2 進数、8 進数、16 進数の定数で初期化できます。定数のデータ型は、
対応する変数の型から決定されます。変数の大きさ ( バイト数 ) は、8 進数または 16 進数の定数
に何桁使用されるかを決定します。定数に十分な桁数がなければ、左側からゼロが埋められま
す。定数の桁数が多すぎる場合は、左側から切り捨てられます。
整数、2 進数、8 進数、16 進数の定数は、定数の値が 0 ~ 255 までの範囲であれば、長さが 1
の文字変数を初期化できます。
例
次の DATA 文は、整数型、論理型、文字型の変数を初期化します。
INTEGER i
LOGICAL done
CHARACTER(LEN=5) prompt
DATA i, done, prompt/10, .FALSE., 'Next?'/
次の DATA 文は、配列 i の 3 つのすべての要素に、反復数 3 で、値 2 を代入するように指定しま
す。
INTEGER, DIMENSION(3) :: i
DATA i/3*2/
次の DATA 文は、2 つの入れ子の初期化 DO 形反復を使用して、定数値 X を、50 個の要素を持つ
配列 k(10,5) の各要素に代入します。
CHARACTER, DIMENSION(10,5) :: k
DATA ((k(i,j),i=1,10),j=1,5)/50*'X'/
関連文
BYTE, CHARACTER, COMPLEX, DOUBLE COMPLEX, DOUBLE PRECISION, INTEGER, LOGICAL, および
REAL
関連概念
関連情報については、次を参照してください。
•
314
86 ページの「初期値式」の項
第 10 章
HP Fortran 文
DATA
•
90 ページの「代入文」の項
•
220 ページの「入出力 DO 形反復」の項
第 10 章
315
HP Fortran 文
DEALLOCATE
DEALLOCATE
割り付け配列およびポインター指示先を解放します。
構文
DEALLOCATE (alloc-obj-list[, STAT=scalar-int-var])
alloc-obj-list
コンマで区切られたポインターまたは割り付け配列の並びです。
STAT=scalar-int-var
文を実行した後、エラーの状態を返します。これが書かれていると、エラーを
検出すると正の値に設定され、エラーがないときはゼロに設定されます。状態
変数がなければ、エラーが発生するとプログラムは終了します。
説明
DEALLOCATE 文は、割り付け配列とポインター指示先を解放し、メモリーを再使用できるように
します。指定された割り付け配列は、( 組み込み関数 ALLOCATED で報告されるように ) 割り付け
られていない状態になります。また、指定されたポインターは、( 組み込み関数 ASSOCIATED で
報告されるように ) 結合していない状態になります。
現在割り付けられていない割り付け配列や結合していないポインターを解放しようとすると、エ
ラーが発生します。DEALLOCATE 操作でのエラーは、省略可能な STAT 指定子によって報告され
るようにできます。
DEALLOCATE 文に配列の名前を指定し、割り付け配列を解放できます。割り付けられていなかっ
たオブジェクトに対するポインターは解放できません。
ALLOCATE 文によってポインターに結合されている指示先のすべてまたは一部は、別のポイン
ターと結合できます。しかし、割り付けられた指示先オブジェクト全体に現在結合していないポ
インターの解放は許されていません。
ポインター指示先を解放すると、その指示先のすべてまたは一部に結合している他のポインター
の結合状態は不定となります。ポインターが解放されていると、結合状態は NULLIFY を実行し
たかのように、空状態となります。
316
第 10 章
HP Fortran 文
DEALLOCATE
例
次の例は、POINTER 属性を持つ複素数型配列を宣言します。ALLOCATE 文は、実行時に指示先の
空間を配列に割り当てます。その量は、READ 文で入力する値によって決定されます。このプロ
グラムの後半で、DEALLOCATE 文が、その空間を解放します。
COMPLEX, POINTER :: hermitian (:, :)
...
READ *, m, n
ALLOCATE (hermitian (m, n))
...
DEALLOCATE (hermitian, STAT = ierr)
関連文
ALLOCATABLE, ALLOCATE, NULLIFY, および POINTER
関連概念
関連情報については、次を参照してください。
•
125 ページの「ポインター」の項
•
59 ページの「割り付け配列」の項
•
ALLOCATED 組み込み関数および ASSOCIATED 組み込み関数については、509 ページの第 11 章
「組み込み手続き」で説明します。
第 10 章
317
HP Fortran 文
DECODE ( 拡張 )
DECODE ( 拡張 )
内部記憶領域からの書式付きデータを入力します。
構文
DECODE (count, format, unit, io-specifier-list) [in-list]
count
文字形式から内部形式 (2 進 ) に変換する文字数 ( バイト ) を指定する整数式で
す。count は、format に先行しなければなりません。
format
データを編集する書式仕様を指定します。format は、次のいずれかです。
•
書式仕様を含む FORMAT 文の文番号。
•
FORMAT 文の文番号が代入された整数型の変数。
•
文字式の書式仕様。
format は、count の直後、かっこ内の 2 番目の項目でなければなりません。
キーワード FMT= は使用しないように注意してください。
unit
内部記憶領域特定子です。これはスカラ変数または配列名でなければなりませ
ん。形状引き継ぎ配列や整合配列は許されていません。unit は、装置番号で
はないので、キーワード UNIT= を使用しないように注意してください。
unit は、format の直後、かっこ内の 3 番目の項目でなければなりません。
io-specifier-list
コンマで区切られた I/O 指定子の並びです。装置指定子と書式指定子が必要で
ないことに注意してください。他の指定子は省略可能です。
io-specifier-list には次の I/O 指定子を指定できます。
ERR=stmt-label
文の実行中にエラーが発生した場合、制御を移す実行文の文番号を指定しま
す。
318
第 10 章
HP Fortran 文
DECODE ( 拡張 )
IOSTAT=integer-variable
文の実行後、入出力の状態を返します。文の実行に成功した場合、
integer-variable は、ゼロに設定されます。エラーなしでファイル終了記
録に遭遇すると、負の整数に設定されます。エラーが発生すると、
integer-variable は、エラーの内容を示す正の値に設定されます。
in-list
コンマで区切られた入力項目の並びです。入力項目は式と入出力 DO 形反復で
す。
説明
DECODE 文は、規格に定められていない HP の拡張機能であり、他のバージョンの FORTRAN と
の互換性を維持するために提供されています。標準の READ 文の内部ファイルの入出力機能は類
似の機能を提供するので、移植性を維持するためにはそちらを使用すべきです。
DECODE 文は、書式付けた文字データを 2 進 ( 内部 ) 表現に変換します。
例
次のプログラム例で、DECODE 文の例を示します。
PROGRAM decode_example
CHARACTER(LEN=20) :: buf
INTEGER i, j, k
buf = 'XX1234 45 -12XXXXXX'
DECODE (15,'(2X,3I4,1X)', buf) i, j, k
! The equivalent READ statement is:
! READ (buf, '(2X,3I4,1X)') i, j, k
PRINT *, i, j, k
END PROGRAM decode_example
コンパイルして実行すると、このプログラムは次の内容を出力します。
1234 45 -12
関連文
ENCODE および READ
関連概念
関連情報については、次を参照してください。
第 10 章
319
HP Fortran 文
DECODE ( 拡張 )
•
201 ページの「内部ファイル」の項
•
204 ページの「内部ファイルに対して入出力を実行する」の項
•
220 ページの「入出力 DO 形反復」の項
•
262 ページの「文字式の書式仕様」の項
320
第 10 章
HP Fortran 文
DIMENSION ( 文および属性 )
DIMENSION ( 文および属性 )
変数を配列として宣言します。
構文
DIMENSION 属性を使用した型宣言文は、次のとおりです。
type, DIMENSION ( array-spec ) [[, attrib-list ]::] entity-list
type
有効な型指定 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE(type-name) など )
です。
array-spec
次のいずれかです。
•
explicit-shape-spec-list
•
assumed-shape-spec-list
•
deferred-shape-spec-list
•
assumed-size-spec
explicit-shape-spec
次のとおりです。
[lower-bound :] upper-bound
lower-bound, upper-bound
宣言式です。
assumed-shape-spec
次のとおりです。
[lower-bound] :
deferred-shape-spec
次のとおりです。
:
第 10 章
321
HP Fortran 文
DIMENSION ( 文および属性 )
assumed-size-spec
次のとおりです。
[explicit-shape-spec-list ,] [lower-bound :] *
つまり、assumed-size-spec は、最後の上限が * で与えられた
explicit-shape-spec-list です。
attrib-list
DIMENSION および DIMENSION と互換性がある次の省略可能な属性を含む、コ
ンマで区切られた属性並びです。
表 10-7 DIMENSION 文 : 利用可能な属性
ALLOCATABLE
PARAMETER
PUBLIC
INTENT
POINTER
SAVE
OPTIONAL
PRIVATE
TARGET
entity-list
次のとおりです。
object-name[(array-spec)]
(array-spec) があると、attrib-list のキーワード DIMENSION によって与
えられる (array-spec) を無効にします。後述の例を参照してください。
DIMENSION 文の構文は次のとおりです。
DIMENSION [::] array-name (array-spec)
[, array-name (array-spec) ]...
説明
配列は、同じ型と同じ型パラメータの配列要素と呼ぶオブジェクトの集合で構成され、配列要素
は、列または行、平面、さらに高い次元の構成のパターンに配置されています。配列要素の型は
組み込み型または利用者定義型です。HP Fortran では、配列は最大 7 つまでの次元を持つこと
ができます。次元の数は配列の次元数と呼び、配列宣言時に固定となります。各次元には次元の
大きさ ( 上限から下限を引き 1 を加える ) である寸法があります。配列の大きさは、寸法の積で
す。配列の形状は、各次元の寸法によるベクトルです。同じ形状の 2 つの配列は、形状適合して
いると呼びます。
322
第 10 章
HP Fortran 文
DIMENSION ( 文および属性 )
変数に DIMENSION 属性を与えるための宣言にキーワード DIMENSION は、必須ではありません。
この属性は、次元数、配列の寸法、配列の上下限と同様に、次の文の言語要素の宣言で指定でき
ます。
•
型宣言
•
DIMENSION
•
ALLOCATABLE
•
COMMON
•
POINTER
•
TARGET
array-spec ( 前述の「構文」を参照 ) は、宣言する配列の分類を決定します。次のような分類
についての詳細は、54 ページの「配列宣言」の項で説明します。
•
形状明示配列
•
形状引き継ぎ配列
•
大きさ引き継ぎ配列
•
形状無指定配列
例
! These 2 declaration statements are equivalent.
REAL a (20,2), b (20,2), c (20,2)
REAL, DIMENSION (20,2) :: a, b, c
DIMENSION x(100), y(100)
! x and y are 1-dimensional
! lower bounds specified for jj (if not given, they default to 1)
INTEGER jj (0:100, -1:1)
! l is a 4-dimensional, allocatable, deferred shape logical array
LOGICAL l
ALLOCATABLE l(:,:,:,:)
COMPLEX s
! s has explicit shape and
TARGET :: s(10,2) !
the target attribute
DOUBLE PRECISION d
第 10 章
323
HP Fortran 文
DIMENSION ( 文および属性 )
! d has 5 dimensions and is declared in common
COMMON /stuff/ d(2,3,5,9,8)
! arr1 is an adjustable array, arr2 an automatic array
SUBROUTINE calc(arr1, ib1, ib2)
REAL, DIMENSION (ib1, ib2) :: arr1, arr2
! arr3 is a deferred-shape array with the pointer attribute
REAL, POINTER, DIMENSION(:,:) :: arr3
! all three arrays have explicit shape; array specifier (10,10)
! overrides specifier (10,20) for tb declaration only
LOGICAL, DIMENSION(10,20) :: ta, tb(10,10), tc
関連文
ALLOCATABLE, COMMON, POINTER, TARGET, TYPE, および型宣言文
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
509 ページの第 11 章 「組み込み手続き」
•
次の配列問い合わせ組み込み関数については、第 11 章で説明しています。
— LBOUND
— RESHAPE
— SHAPE
— SIZE
— UBOUND
324
第 10 章
HP Fortran 文
DO
DO
DO ループの実行を制御します。
構文
[ construct-name :] DO [ label ] [ loop-control ]
construct-name DO 構文に与えられる名前です。construct-name を指定すると、DO 構文の最
後の文は、END DO 文でなければならず、同じ construct-name を持たなけれ
ばなりません。
label
DO ループの端末となる実行文の文番号です。label を指定すると、END DO 文
または実行文を DO ループの端末文とすることができます。端末文には、
label がなければなりません。label を指定しないと、DO ループの端末文は
END DO 文でなければなりません。
loop-control
ループを制御するために DO が使用する情報です。これは次のいずれかの形式
を取ることができます。
•
index = init, limit [, step]
•
WHILE (logical-expression)
•
loop-control を省略。
最初の形式で、index は整数型または実数型のスカラ変数です。init, limit,
step は、整数型または実数型のスカラ式です。2 番目の形式で、
logical-expression は、スカラ論理式です。3 番目の形式で、
loop-control は省略されます。2 番目または 3 番目の形式を使用する場合、
DO ループは END DO 文で終了しなければなりません。
説明
DO 文の構文によって、次の形の DO ループが可能です。
•
制御カウンターループ : 終了するまでのブロックの実行回数を制御するループカウントが計
算されます。ループ変数は実行する度に、増加または減少します。
•
While ループ : ブロックの実行前に、条件 (logical-expression) がテストされ、偽であれ
ば実行を止めます。随時、終了させることができます。
第 10 章
325
HP Fortran 文
DO
•
無限ループ : loop-control はありません。ブロックの繰り返し実行は、ループから抜けると
きにのみ終了します。
DO 文に label があれば、それは DO ループの端末文の文番号を示します。次の文は端末文には
できません。
•
GO TO ( 単純 )
•
GO TO ( 割り当て形 )
•
IF ( 算術 )
•
IF ( ブロック )
•
ELSE または ELSE IF
•
END, END IF, END SELECT, または END WHERE
•
RETURN
•
STOP
•
DO
•
実行文以外の文
しかし、IF ( 論理 ) または END DO 文は端末文にできることに注意してください。
Fortran の旧版との互換性を維持するために、+onetrip コンパイル行オプションを使用して、
プログラム中のすべての制御カウンター DO ループが少なくとも 1 回は実行されるようにするこ
とができます。
拡張範囲 DO ループ
拡張範囲 DO ループ、つまり互換性のための拡張によって、プログラムは制御を DO ループの範
囲外に移すことができ、DO ループに戻ってくることができます。拡張範囲 DO ループは次のよう
に動作します。DO ループ内部の制御文が、制御を DO ループの外部に移した場合、その後にある
文で DO ループ本体に制御を戻すことができます。
たとえば、次のコードで、DO ループの範囲は、文 GOTO 20 を含むように拡張できます。この結
果、制御は、DO ループ本体に戻ります。
DO 50 i = 1, 10
n = n + 1
IF (n > 10) GOTO 60
50 CONTINUE
! normally, the range ends here
60 n = n + 100 ! this is the extended range,
GOTO 20
! which extends down to this line
20
326
第 10 章
HP Fortran 文
DO
例
次の DO 構文は、1 ~ 10 の整数を表示します。
DO i = 1, 10
WRITE (*, *) i
END DO
次の例は、FORTRAN 77 形式の DO ループで、前の例と同じ動作となります。
DO 50 i = 1, 10
WRITE (*, *) i
50 CONTINUE
次の DO 構文は 5 回繰り返し、ループのインデックスを 10 から 2 に減らします。
DO i = 10, 1, -2
END DO
次は、DO WHILE ループの例です。
DO WHILE (sum < 100.0)
sum = sum + get_num(unit)
END DO
次の例は、入れ子の DO ループから抜けるための EXIT 文の使用例を示します。どのループを終
了させるかを制御するために、ループには名前が付いています。内側と外側のループの両方とも
loop-control がないので、EXIT 文の実行によってのみ終了できることに注意してください。
outer:DO
READ *, val
new_val = 0
inner:DO
new_val = new_val + proc_val(val)
IF (new_val >= max_val) EXIT inner
IF (new_val == 0) EXIT outer
END DO inner
END DO outer
次の DO 構文は、実行されません。
DO i = 10, 1
END DO
関連文
CONTINUE, CYCLE, END ( 構文 ), および EXIT
第 10 章
327
HP Fortran 文
DO
関連概念
関連情報については、次を参照してください。
•
136 ページの「DO 構文」の項
•
144 ページの「EXIT 文」の項
328
第 10 章
HP Fortran 文
DOUBLE COMPLEX ( 拡張 )
DOUBLE COMPLEX ( 拡張 )
倍精度複素数型の言語要素を宣言します。
構文
DOUBLE COMPLEX [ [, attrib-list ] ::] entity-list
attrib-list
コンマで区切られた次の 1 つ以上の属性の並びです。
表 10-8 DOUBLE COMPLEX 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
PRIVATE
DIMENSION
OPTIONAL
PUBLIC
EXTERNAL
PARAMETER
SAVE
INTENT
POINTER
TARGET
attrib-list が存在する場合、2 重コロンを後に付けなければなりません。
各属性については、本章の対応する文を参照してください。
entity-list
コンマで区切られた言語要素の並びです。各言語要素は次の形式をとります。
name [( array-spec )] [= initialization-expr]
name
変数または関数の名前です。
array-spec
コンマで区切られた次元の上下限の並びです。
initialization-expr
複素定数式です。initialization-expr が存在する場合、entity-list の
前に 2 重コロンを付けなければなりません。
説明
DOUBLE COMPLEX 文は、基本種別複素数型より高い精度の複素数型データを宣言する HP
Fortran の拡張です。倍精度複素数値の 2 つの部分は、それぞれ倍精度です。
第 10 章
329
HP Fortran 文
DOUBLE COMPLEX ( 拡張 )
DOUBLE COMPLEX 文は、すべての実行文に先行する条件も含め、型宣言文の規則によって制限を
受けます。ただし、DOUBLE COMPLEX 文には、種別パラメータがないことに注意してください。
例
次の宣言は有効な宣言です。
DOUBLE COMPLEX x, y
DOUBLE COMPLEX, PARAMETER :: t1(2)=(/(1.2, 0), (-1.01, 0.0009)/)
! use an array constructor to initialize a double complex array
DOUBLE COMPLEX, DIMENSION(2) :: dc_vec = &
(/(2.294D-8, 6.288D-4), (-4.817D4, 0)/)
! use slashes as initialization delimiters, an HP extension
DOUBLE COMPLEX dcx/(2.294D-8, 6.288D-4)/ ! note, no double colon
関連文
COMPLEX
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
107 ページの「暗黙の型宣言」の項
•
54 ページの「配列宣言」の項
•
70 ページの「配列構成子」の項
•
78 ページの「式」の項
330
第 10 章
HP Fortran 文
DOUBLE PRECISION
DOUBLE PRECISION
倍精度実数型の言語要素を宣言します。
構文
DOUBLE PRECISION [ [, attrib-list] ::] entity-list
attrib-list
コンマで区切られた次の 1 つ以上の属性の並びです。
表 10-9 DOUBLE PRECISION 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
PRIVATE
DIMENSION
OPTIONAL
PUBLIC
EXTERNAL
PARAMETER
SAVE
INTENT
POINTER
TARGET
attrib-list が存在する場合、2 重コロンを後に付けなければなりません。
各属性については、本章の対応する文を参照してください。
entity-list
コンマで区切られた言語要素の並びです。各言語要素は次の形式をとります。
name [( array-spec )] [= initialization-expr]
name
変数または関数の名前です。
array-spec
コンマで区切られた次元の上下限の並びです。
initialization-expr
コンパイル時に評価される実定数式です。initialization-expr が存在する
場合、entity-list の前に 2 重コロンが付きます。
第 10 章
331
HP Fortran 文
DOUBLE PRECISION
説明
DOUBLE PRECISION 文は、基本種別実数型より高い精度の実数型データの特性を宣言します。デ
フォルトでは、DOUBLE PRECISION 文は、REAL(KIND=8) 文と等価です。
DOUBLE PRECISION 文は、すべての実行文に先行するという条件も含め、型宣言文の規則によっ
て制限を受けます。ただし、DOUBLE PRECISION 文には、種別パラメータがないことに注意して
ください。
例
次の宣言は有効な宣言です。
DOUBLE PRECISION x, y
DOUBLE PRECISION, PARAMETER :: pi=3.1415927D0
! use an array constructor to initialize a double precision array
DOUBLE PRECISION, DIMENSION(4) :: dp_vec= &
(/4.7D0, 5.2D0, 3.3D0, 2.9D0/)
! use slashes as initialization delimiters, an HP extension
DOUBLE PRECISION dp1/5.28D0/, dp2/72.3D0/ ! note, no double colon
関連文
REAL
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
107 ページの「暗黙の型宣言」の項
•
54 ページの「配列宣言」の項
•
70 ページの「配列構成子」の項
•
78 ページの「式」の項
332
第 10 章
HP Fortran 文
ELSE
ELSE
IF 構文のデフォルトの実行パスを提供します。
構文
ELSE [ construct-name ]
construct-name IF 構文に与えられる名前です。construct-name を指定すると、IF 文と END
IF 文にも同じ名前を指定しなければなりません。
説明
ELSE 文は、IF 構文内で使用し、IF 構文内の IF 文と ELSE IF 文の論理式がどれも真であると評
価されない場合に実行する文ブロックを提供します。
IF 構文は、( 最高で ) 1 つの ELSE 文を含むことができます。存在する場合、IF 構文内のすべて
の ELSE IF 文の後になければなりません。
例
IF (a > b) THEN
max = a
ELSE IF (b > max) THEN
max = b
ELSE
PRINT *, 'The two numbers are equal.'
STOP 'Done'
END IF
関連文
ELSE IF, END IF, および IF ( 構文 )
関連概念
140 ページの「IF 構文」の項を参照してください。
第 10 章
333
HP Fortran 文
ELSE IF
ELSE IF
IF 構文の条件実行パスを提供します。
構文
ELSE IF (logical-expression) THEN [construct-name]
logical-expression
スカラの論理式です。
construct-name
IF 構文に与えられる名前です。construct-name を指定すると、IF 文と END
IF 文にも同じ名前を指定しなければなりません。
説明
ELSE IF 文は、次の条件が満足された場合、すぐ次の文ブロックを実行します。
•
IF 文および前にあるすべての ELSE IF 文内のどの論理式も真であると評価されていない。
•
logical-expression が、真であると評価された。
ELSE IF 文への飛び込みは不正です。
例
INTEGER temperature
INTEGER, PARAMETER :: hot=1, cold=2
IF (temperature == hot) THEN
PRINT *, 'Turn down your thermostat.'
ELSE IF (temperature == cold) THEN
PRINT *, 'Turn up your thermostat.'
ELSE
PRINT *, 'Your thermostat is working OK.'
END IF
関連文
ELSE, END IF, および IF ( 構文 )
334
第 10 章
HP Fortran 文
ELSE IF
関連概念
140 ページの「IF 構文」の項を参照してください。
第 10 章
335
HP Fortran 文
ELSEWHERE
ELSEWHERE
WHERE 構文内で省略可能な ELSEWHERE ブロックを導入します。
構文
ELSEWHERE
説明
ELSEWHERE 文は、ELSEWHERE ブロックを導入します。これは、WHERE 構文の省略可能な部分で
す。ELSEWHERE 文は、WHERE 条件の片方で実行されます。詳細は、499 ページの「WHERE ( 文
および構文 )」の項を参照してください。
例
WHERE( b .GE. 0.0 )
! Assign to sqrt_b only where logical array b is 0 or positive
sqrt_b = SQRT(b)
ELSEWHERE
sqrt_b = 0.0
! Assign sqrt_b where b is negative
END WHERE
関連文
WHERE および END ( 構文 )
関連概念
WHERE 構文についての詳細は、94 ページの「配列選別代入」の項を参照してください。
336
第 10 章
HP Fortran 文
ENCODE ( 拡張 )
ENCODE ( 拡張 )
内部記憶領域への書式付きデータを出力します。
構文
ENCODE (count, format, unit, io-specifier-list) [out-list]
count
内部形式 (2 進 ) から文字形式に変換する文字数 ( バイト ) を指定する整数式で
す。count は、format に先行して書かなければなりません。
format
データを編集する書式仕様を指定します。format は、次のいずれかです。
•
書式仕様を含む FORMAT 文の文番号。
•
FORMAT 文の文番号を代入した整数型の変数。
•
文字式の書式仕様。文字式の書式仕様についての詳細は、262 ページの
「文字式の書式仕様」の項を参照してください。
format は、count の直後のかっこ内の 2 番目の項目でなければなりません。
キーワード FMT= は使用しないように注意してください。
unit
内部記憶領域特定子です。これはスカラ変数または配列名でなければなりませ
ん。形状引き継ぎ配列や整合配列は許されていません。unit は装置番号でな
いので、キーワード UNIT= を使用しないように注意してください。
unit は、format の直後で、かっこ内の 3 番目の項目でなければなりません。
io-specifier-list
コンマで区切られた I/O 指定子の並びです。装置指定子と書式指定子が必要で
ないことに注意してください。他の指定子は省略可能です。
io-specifier-list には次の I/O 指定子を記述できます。
ERR=stmt-label
文の実行中にエラーが発生した場合、制御を移す実行文の文番号を指定しま
す。
第 10 章
337
HP Fortran 文
ENCODE ( 拡張 )
IOSTAT=integer-variable
文の実行後、入出力の状態を返します。文の実行に成功した場合、
integer-variable は、ゼロに設定されます。エラーなしでファイル終了記
録に遭遇すると、負の整数に設定されます。エラーが発生すると、
integer-variable は、どのエラーが発生したかを示す正の値に設定されま
す。
out-list
コンマで区切られた出力項目の並びです。出力項目には式と入出力 DO 形反復
(220 ページの「入出力 DO 形反復」の項を参照 ) があります。
説明
ENCODE 文は、規格で定められていない HP Fortran の機能であり、他のバージョンの Fortran
との互換性を維持するために提供されます。標準の WRITE 文の内部ファイルの入出力機能は類
似の機能を提供しますので、移植性を維持するためにはそちらを使用すべきです。
ENCODE 文は、2 進 ( 内部 ) 表現を書式付けた文字データに変換します。
例
次のプログラム例は ENCODE 文を使用して内部ファイルに書き込みます。
PROGRAM encode_example
CHARACTER(LEN=20) :: buf
ENCODE (LEN(buf), '(2X, 3I4, 1X)', buf)
PRINT *, buf
END PROGRAM encode_example
1234, 45, -12
コンパイルして実行すると、このプログラムは次の内容を出力します ( ここで b は、空白文字を
表します )。
bb1234bb45b-12bbbbb
関連文
DECODE および WRITE
関連概念
関連情報については、次を参照してください。
•
338
201 ページの「内部ファイル」の項
第 10 章
HP Fortran 文
ENCODE ( 拡張 )
•
204 ページの「内部ファイルに対して入出力を実行する」の項
•
220 ページの「入出力 DO 形反復」の項
•
262 ページの「文字式の書式仕様」の項
第 10 章
339
HP Fortran 文
END
END
プログラム単位または手続きの終わりを示します。
構文
END [keyword [name]]
keyword
キーワード BLOCK DATA, FUNCTION, MODULE, PROGRAM, または SUBROUTINE の
いずれかです。END 文を内部手続きまたはモジュール手続きに対して使用する
ときは、FUNCTION キーワードまたは SUBROUTINE キーワードが必要です。
name
プログラム単位に与えられる名前です。name を指定すると、keyword も指定
しなければなりません。
説明
END 文は、プログラム単位 ( つまり、主プログラム、関数副プログラム、サブルーチン副プログ
ラム、モジュール副プログラムまたは初期値設定副プログラム単位 )、内部手続きまたはモ
ジュール手続きの最後の文です。プログラム単位内で唯一必要な文です。
例
次の例は、END を使用して主プログラムの終わりを示している例です。主プログラム単位に名前
が与えられていても、END PROGRAM 文には名前が必要ないことに注意してください。
PROGRAM main_prog
...
END PROGRAM
次の例では、END が、内部関数の終わりを示しており、キーワード FUNCTION を指定しなければ
なりません。ここで名前 get_args を指定していますが、必須ではありません。
FUNCTION get_args (arg1, arg2)
...
END FUNCTION get_args
次の例では、END 文を使用して、初期値設定副プログラム単位の終わりを示しています。END 文
がプログラム単位の名前を指定しているので、キーワード BLOCK DATA も指定しなければなりま
せん。
340
第 10 章
HP Fortran 文
END
BLOCK DATA main_data
...
END BLOCK DATA main_data
関連文
BLOCK DATA, FUNCTION, MODULE, PROGRAM, および SUBROUTINE
関連概念
プログラム単位については、152 ページの「プログラム単位」の項を参照してください。
第 10 章
341
HP Fortran 文
END ( 構文 )
END ( 構文 )
CASE 構文、DO 構文、IF 構文、WHERE 構文を終了させます。
構文
END construct-keyword [construct-name]
construct-keyword
キーワード DO、IF、SELECT、CASE、WHERE のいずれかです。
construct-name
この文によって終了する構文に与えられる名前です。
説明
END 文 ( 構文 ) は、CASE、DO、IF、WHERE 構文を終了させます。構文を導入する文に
construct-name を記述すると、END 文にも同じ名前を記述しなければなりません。導入する文
に construct-name が与えられなければ、END 文にも書いてはいけません。
例
各 END 文 ( 構文 ) の例については、本章の DO 文、IF 文、SELECT 文、CASE 文、WHERE 文の説明
を参照してください。
関連文
DO, IF, SELECT CASE, および WHERE
関連概念
関連情報については、次を参照してください。
•
94 ページの「配列選別代入」の項
•
134 ページの「制御構文およびブロック」の項
342
第 10 章
HP Fortran 文
END ( 構造体定義、拡張 )
END ( 構造体定義、拡張 )
構造体や共用体の定義を終了させます。
構文
END record-keyword
record-keyword キーワード MAP, STRUCTURE, または UNION のいずれかです。
説明
END 文 ( 記録定義 ) は、HP Fortran の拡張であり、構造体の定義の区切り (END STRUCTURE) や
構造体内の共用体定義の区切り (END UNION と END MAP) に使用します。詳細は、469 ページの
「STRUCTURE ( 拡張 )」の項を参照してください。
関連文
INTERFACE, STRUCTURE, および UNION
第 10 章
343
HP Fortran 文
END INTERFACE
END INTERFACE
手続き引用仕様宣言を終了させます。
構文
END INTERFACE
説明
Fortran 90 では、外部手続きには、手続き引用仕様宣言による明示的引用を与えることができま
す。そのようなブロックは常に、END INTERFACE 文で終了します。
例
次の例は、関数 r_ave の明示的引用を行い、総称名 g_ave を与えます。
INTERFACE g_ave
FUNCTION r_ave(x)
! get the size of array x from module ave_stuff
USE ave_stuff, ONLY: n
REAL r_ave, x(n)
END FUNCTION r_ave
END INTERFACE
関連文
INTERFACE
関連概念
引用仕様宣言については、179 ページの「引用仕様宣言」の項で説明します。
344
第 10 章
HP Fortran 文
END TYPE
END TYPE
構造型定義を終了させます。
構文
END TYPE [type-name]
type-name
定義する構造型の型名です。type-name は省略可能です。指定した場合、構
造型の定義を導入する TYPE 文内で指定される type-name と同じでなければ
なりません。
説明
END TYPE 文は、構造型の定義を終了させます。
例
次は、2 つの成分、high と low のある構造型の単純な例です。
TYPE temp_range
INTEGER high, low
END TYPE temp_range
関連文
TYPE ( 定義 )
関連概念
構造型については、117 ページの「構造型」の項で説明します。
第 10 章
345
HP Fortran 文
ENDFILE
ENDFILE
ファイルへファイル終了記録を書き込みます。
構文
ENDFILE 文の構文は、次の形式のいずれかです。
•
短い形式 :
ENDFILE integer-expression
•
長い形式 :
ENDFILE (io-specifier-list)
integer-expression
順次ファイルに接続されている装置の番号です。
io-specifier-list
コンマで区切られた次の I/O 指定子の並びです。
[UNIT=]unit
順番探査用に開いたデバイスファイルまたは外部ファイルに接続されている装
置を指定します。unit は、負ではない値に評価される整数式でなければなり
ません。省略可能なキーワード UNIT= を省略すると、unit は、
io-specifier-list の最初の項目でなければなりません。
ERR=stmt-label
文の実行中にエラーが発生した場合、制御を移す実行文の文番号を指定しま
す。
IOSTAT=integer-variable
文の実行後の入出力の状態を返します。文の実行が成功した場合、
integer-variable は、ゼロに設定されます。エラーが発生した場合、エ
ラーの内容を示す正の整数に設定されます。
説明
ENDFILE 文は、指定された装置に接続されているファイルやデバイスの現在の位置に、ファイル
終了記録を書き込み、ファイルをファイル終了記録の後に位置付けます。
346
第 10 章
HP Fortran 文
ENDFILE
ファイル終了記録は、ディスクファイルの最後の記録としてのみ書くことができます。ENDFILE
文の実行後、ファイルはファイル終了記録の後に位置付けられ、現在の位置以降の記録はすべて
失われます。つまり、ファイルが切り捨てられるということです。
デバイスによっては ( たとえば、磁気テープ装置 )、データ記録の間に複数のファイル終了記録
を持つことができます。
ファイル終了記録は、順次ファイルのみに書き込むことができます。
例
次の文は、装置 10 に接続されているファイルに、ファイル終了記録を書き込みます。
ENDFILE 10
次の文は、装置 17 に接続されているファイルに、ファイル終了記録を書き込みます。文の実行
中にエラーが発生した場合は、制御は文番号 99 の実行文に移り、ios にエラーコードが返され
ます。
INTEGER :: ios
...
ENDFILE (17, ERR=99, IOSTAT=ios)
関連文
BACKSPACE, OPEN, および REWIND
関連概念
入出力の概念については、199 ページの第 8 章 「入出力およびファイル処理」を参照してくだ
さい。入出力を実行するプログラム例があります。入出力の書式に付いては、233 ページの第 9
章 「入出力の編集」を参照してください。
第 10 章
347
HP Fortran 文
ENTRY
ENTRY
外部副プログラムまたはモジュール副プログラムの付加的な入口点を提供します。
構文
ENTRY entry-name [([dummy-arg-list])
[RESULT (result-name)]]
entry-name
ENTRY 文で定義される入口点 ( サブルーチンまたは関数 ) の名前。これは、元
のサブルーチン名や関数名と異なっていなければなりません。また、これが書
かれている副プログラムで指定された他の ENTRY 文の entry-name とも異
なっていなければなりません。
dummy-arg-list ENTRY 文で定義したサブルーチンまたは関数用の仮引き数をコンマで区切った
並びです。サブルーチンの仮引き数または関数の仮引き数に対するのと同じ規
則と制限条項が適用されます。
result-name
ENTRY 文で定義される関数用の結果変数。result-name の指定は省略可能で
す。指定しない場合、結果変数は entry-name となります。
RESULT (result-name) 句は、ENTRY 文が関数副プログラムにあるときだけ、
指定することができます。
説明
関数副プログラムに ENTRY 文を指定したとき、効果として副プログラム中に FUNCTION 文を追
加したことになります。entry-name を呼び出したとき ( それを使用することで )、ENTRY 文か
ら実行が始まります。同様に、サブルーチン副プログラムの ENTRY 文は、効果として副プログ
ラム中に SUBROUTINE 文を追加したことになり、entry-name を呼び出したとき、ENTRY 文から
実行が始まります。
ENTRY 文には次の制限条項が適用されます。
•
348
ENTRY 文は、外部副プログラムまたはモジュール副プログラムには書くことができますが、
内部副プログラムには書くことができません。関数副プログラムに ENTRY 文を指定した場
合、これは追加の関数を定義します。これをサブルーチン副プログラムに指定した場合、こ
れは追加のサブルーチンを定義します。こうして定義した入口点は、通常の関数名またはサ
ブルーチン名と同様に、引用することができます。実行は、ENTRY 文で始まり、その後に遭
遇するすべての ENTRY 文を無視しながら、RETURN 文または手続きの終わりに達するまで、
通常通りに継続します。
第 10 章
HP Fortran 文
ENTRY
•
RESULT (result-name) 句は、ENTRY 文が関数副プログラム中にあるときだけ、指定するこ
とができます。result-name を指定した場合、result-name は entry-name と同じであって
はならず、関数副プログラムの有効域の単純宣言文に entry-name を書いてはいけません。
entry-name は、result-name のすべての属性を引き継ぎます。ENTRY 文の RESULT 句の構
文と方式は、FUNCTION 文と同じです。
•
関数の中に ENTRY 文を書いた場合、結果変数は、RESULT 句で指定したものとなります。何も
指定していない場合、結果変数は、entry-name となります。
•
ENTRY 文で指定した結果変数の特性が、FUNCTION 文で指定した結果変数と同じ場合、結果変
数は、名前が異なっていても同じものです。特性が異なる場合、結果変数は次のようになり
ます。
— 組み込み型のポインターでないスカラ。
— 記憶列結合される。
— 文字型が含まれている場合、すべてが文字型で、同じ長さでなければなりません。非文
字型が含まれている場合、すべてが非文字型でなければなりません。
•
結果変数は、COMMON 文、DATA 文または EQUIVALENCE 文に書いてはいけません。また、結果
変数には、ALLOCATABLE 属性、INTENT 属性、OPTIONAL 属性、PARAMETER 属性、または
SAVE 属性を指定できません。
•
関数副プログラムを開始する FUNCTION 文に RECURSIVE を指定し、その副プログラム中の
ENTRY 文に RESULT を指定した場合、ENTRY 文で定義した関数の引用仕様は、関数副プログ
ラム中では明示的となります。このようにして関数を再帰的に呼び出すことができます
( キーワード RECURSIVE は、ENTRY 文では書けず、FUNCTION 文でしか書けません )。
•
サブルーチン副プログラムを開始する SUBROUTINE 文に RECURSIVE を指定した場合、副プロ
グラム中の ENTRY 文で定義したサブルーチンの引用仕様は、その副プログラム中では明示的
となります。このようにして関数を再帰的に呼び出すことができます。
•
ENTRY 文の仮引き数は、実行文の前にある FUNCTION 文、SUBROUTINE 文または ENTRY 文に書
いていない限り、ENTRY 文の前にある実行文には書いてはいけません。
•
実行文中で副プログラムの仮引き数 ( つまり、副プログラムの先頭の FUNCTION 文または
SUBROUTINE 文、または副プログラム中の ENTRY 文で指定した仮引き数 ) を使用する場合、
その文は、その仮引き数が現在の呼び出しで実際に引用される手続き名の仮引き数並びに現
れる場合だけ、実行してもかまいません。配列上下限または文字長を指定するために仮引き
数を使用するときも、同じ制限条項が適用されます。
•
ENTRY 文で定義する手続きは、引用仕様宣言を使用することで、明示的な引用仕様が与えら
れます。引用仕様本体の手続きヘッダーとしては、関数副プログラムの入口には FUNCTION
文、サブルーチン副プログラムの入口には SUBROUTINE 文を書かなければなりません。
第 10 章
349
HP Fortran 文
ENTRY
FORTRAN 77 プログラムでは、ENTRY 文は、仮引き数並びが少し異なるが、計算に必要なデー
タやコードが同じサブルーチンまたは関数の集合として頻繁に使用されていました。Fortran 90
では、このような ENTRY 文の使用は、省略可能な引き数を使用して代用することができます。
例
次の例では、2 つの仮引き数を持つサブルーチン副プログラムを定義します。この副プログラム
には、SUBROUTINE 文で指定した最初の仮引き数だけをとる ENTRY 文も含まれています。
SUBROUTINE Full_Name (first_name, surname)
CHARACTER(20) :: first_name, surname
...
ENTRY Part_Name (first_name)
次の例では、スタックを生成します。データ構造の定義とそれを参照するコードをグループにま
とめるための ENTRY 文の使用を示します。これは、カプセル化と呼ばれる技法です ( この例をモ
ジュールとして代わりにプログラムすることもでき、記憶列結合に依存しないという点で望まし
いものです )。
SUBROUTINE manipulate_stack
IMPLICIT NONE
INTEGER size, top /0/, value
PARAMETER (size = 100)
INTEGER, DIMENSION(size) :: stack
SAVE stack, top
ENTRY push(value)
! Push value onto the stack
IF (top == size) STOP 'Stack Overflow'
top = top + 1
stack(top) = value
RETURN
ENTRY pop(value)
! Pop top of stack and place in value
IF (top == 0) STOP 'Stack Underflow'
value = stack(top)
top = top - 1
RETURN
END SUBROUTINE manipulate_stack
次に、前の例と関連する CALL 文の例を示します。
350
第 10 章
HP Fortran 文
ENTRY
CALL
CALL
CALL
CALL
push(10)
push(15)
pop(I)
pop(J)
関連文
FUNCTION, SUBROUTINE, および CALL
関連概念
外部手続きについては、158 ページの「外部手続き」の項を参照してください。
第 10 章
351
HP Fortran 文
EQUIVALENCE
EQUIVALENCE
異なるオブジェクトを同じ記憶領域に結合します。
構文
EQUIVALENCE (equivalence-list1) [, (equivalence-list2)]...
equivalence-list コンマで区切られた記憶列結合する 2 つ以上のオブジェクトの並びです。
オブジェクトには、単なる変数、配列要素、配列名および文字型の部分列を含
むことができます。
説明
各 equivalance-list のすべてのオブジェクトは、記憶領域を共有します。これらのオブジェ
クトは記憶列結合され、EQUIVALENCE 結合されます。EQUIVALENCE 結合は他のオブジェ
クトの記憶列結合を引き起こします。
次の項目は、equivalance-list に書いてはいけません。
•
長さを非定数で指定した文字変数を含む自動割り付けオブジェクト
•
割り付け配列
•
関数名、結果名または入口名
•
仮引き数
•
記録引用または記録欄引用
•
非連続型の構造型
•
構造型成分
•
ポインターまたはポインターを含む構造型オブジェクト
•
名前付き定数
構造型オブジェクトが SEQUENCE 属性で定義されている場合、構造型オブジェクトは
EQUIVALENCE 文で書かれます。
EQUIVALENCE 文に書くことができるオブジェクトには、次の制限条項が適用されます。
•
352
同じ equivalance-list 中のオブジェクトは、明示的または暗黙的に、同じ有効域に宣言し
なければなりません。
第 10 章
HP Fortran 文
EQUIVALENCE
•
結合するオブジェクトの名前は、参照結合で利用可能にしてはいけません。
Fortran 90 規格では、結合するオブジェクトに次の制限が課せられます。
•
equivalance-list のオブジェクトの 1 つが、基本種別整数型、基本種別実数型、倍精度実
数型、基本種別複素数型、倍精度複素数型、基本種別論理型または数値連続型である場合、
equivalance-list のすべてのオブジェクトは、これらの型のいずれか 1 つでなければなり
ません。
HP Fortran では、この制限を緩め、文字項目と非文字項目を結合できるようにしました。
しかし、こうした拡張を使用することで、移植性が大きな影響を受けることになります。
•
equivalance-list のオブジェクトの 1 つが、数値連続型または文字連続型でない構造型で
ある場合、equivalance-list のすべてのオブジェクトは、同じ型でなければなりません。
•
equivalance-list のオブジェクトの 1 つが、基本種別整数型、基本種別実数型、倍精度実
数型、基本種別複素数型、倍精度複素数型、基本種別論理型または基本種別文字型以外の組
み込み型である場合、equivalance-list のすべてのオブジェクトは、同じ種別型パラメー
タ値を持つ同じ型でなければなりません。
HP Fortran では、この制限は緩められます。
EQUIVALENCE 文は、型変換を引き起こしたり、数学的な等価化を行ったりしません。配列とス
カラが EQUIVALENCE 文を通じて同じ記憶領域を共有する場合、配列はスカラの特性を持たず、
スカラは配列の特性をもちません。これらは、同じ記憶領域を共有するだけです。
異なる大きさのデータ型が同じ記憶領域を共有するとき、EQUIVALENCE 文では、
equivalance-list の各データ項目は同じ先頭の記憶単位を持つと指定しており、注意が必要
です。たとえば、4 バイトの整変数と倍精度実変数を結合する場合、整変数は、8 バイトの倍精
度実変数の最上位 4 バイトと同じ場所を共有します。
データ型の割り付け境界を正しくさせることが、常に要求されます。コンパイラは、
EQUIVALENCE 文を通じて不当な割り付け境界が強制された場合、診断メッセージを発行します。
データの割り付け境界規則についての詳細は、100 ページの「組み込み型」の項を参照してくだ
さい。
結合されたオブジェクトの長さは、同じにする必要はありません。
文字データの EQUIVALENCE 結合
EQUIVALENCE 文では、名前が equivalance-list に指定されている文字型のデータ項目の記憶
列は、同じ先頭の文字記憶単位を持つと指定します。これは、equivalance-list のデータ項目
の結合を引き起こし、同様に他の項目の結合も引き起すことができます。次の例を検討します。
第 10 章
353
HP Fortran 文
EQUIVALENCE
CHARACTER(LEN=4) :: a, b
CHARACTER(LEN=3) :: c(2)
EQUIVALENCE (a, c(1)), (b, c(2))
この EQUIVALENCE 文の結果として、a の 4 番目の文字、b の 1 番目の文字、および c(2) の 1 番
目の文字は、同じ記憶領域を共有します。
同じ長さまたは異なる長さの文字型の結合を、1 番目の要素で始めることも、また、部分列表記
を使用して、次のように別の結合を指定することもできます。
CHARACTER (10) :: s1, s2
EQUIVALENCE (s1(2:2), s2(3:3)
部分列の範囲指定は、整数初期値式でなければならず、部分列の長さはゼロであってはいけませ
ん。
配列の等価化
異なる次元を持つ配列間の EQUIVALENCE 結合を決定するために、HP Fortran は、配列のす
べての要素を一列の順序で表示します。各配列は、1 次元の配列であるかのように格納されま
す。配列要素は、カラムメジャーの昇順に保存されます。メモリーでの配列のレイアウトについ
ての詳細は、52 ページの「配列の基礎」の項を参照してください。
配列要素は、異なる配列の要素またはスカラと EQUIVALENCE 結合することができます。
EQUIVALENCE 結合された配列の上下限を超えたところで、記憶領域の共有は行われません。
EQUIVALENCE 結合された配列が同じ型でない場合、要素ごとに並べられない場合がありま
す。
配列名を添え字なしで EQUIVALENCE 文に書いた場合、1 番目の要素の添え字を持つ配列要素名
を指定したのと同じ効果をもちます。
同じ配列の異なる要素を同じ記憶領域に EQUIVALENCE 結合することは不正です。たとえば、
次は不正です。
INTEGER :: a(2), b
EQUIVALENCE (a(1), b), (a(2), b)
同様に、EQUIVALENCE 文を使用して、次の例のように、連続する配列要素を非連続にすること
は不正です。
REAL :: a(2), r(3)
EQUIVALENCE (a(1), r(1)), (a(2), r(3))
配列の添え字は、整数初期値式でなければなりません。
354
第 10 章
HP Fortran 文
EQUIVALENCE
共通ブロックでの EQUIVALENCE 結合
EQUIVALENCE 文では、2 つの共通ブロックを結合するようにしてはいけません。ただし、
EQUIVALENCE 文を使用して、複数のオブジェクトをすでに共通ブロックにあるオブジェクトに
EQUIVALENCE 結合することで、共通ブロックに配置できます。配列の 1 つの要素を共通ブ
ロックにあるオブジェクトに EQUIVALENCE 結合する場合、配列全体が、共通ブロックの
データ要素の前後にある記憶単位と EQUIVALENCE 結合されて、共通ブロックに配置されま
す。共通ブロックは、その中の記憶領域を共有する配列に適合する必要があるとき、常に拡張さ
れます。この拡張は、最後の要素の後に可能ですが、最初の要素の前にはできません。
次の例では、配列 i を無名共通ブロックに配置し、配列要素 j(2) を i(3) に EQUIVALENCE
結合します。
INTEGER :: i(6), j(6)
COMMON i
EQUIVALENCE (i(3), j(2))
EQUIVALENCE 文の効果によって、無名共通ブロックは拡張され、要素 j(6) を含むようになりま
す。共通ブロックの後に拡張が行われるため、これは完全に正当です。
しかし、EQUIVALENCE 文を次のように変更したとします。
EQUIVALENCE (i(1), j(2))
! illegal
これは、要素 j(1) を収容するために、この共通ブロックの前に記憶領域を挿入する必要がある
ため、不正な EQUIVALENCE 結合になります。
例
次の例では、変数 a, b, および c は、同じ記憶領域を共有し、配列要素 d(2) および e(5) も同じ
記憶領域を共有し、変数 f, g, および h も、同じ記憶領域を共有します。
INTEGER :: a, b, c, d(20), e(30), f, g, h
EQUIVALENCE (a, b, c), (d(2), e(5)), (f, g, h)
関連文
COMMON
関連概念
データの割り付け境界については、表 5-1 および 121 ページの「構造型オブジェクトのデータの
割り付け境界」の項を参照してください。
第 10 章
355
HP Fortran 文
EXIT
EXIT
DO ループを終了します。
構文
EXIT [do-construct-name]
do-construct-name
DO 構文に与えられる名前。do-construct-name を指定した場合、EXIT 文を
含む DO 構文の名前でなければなりません。
説明
do-construct-name を指定しない場合、EXIT 文は、直接囲んでいる DO ループを終了させま
す。これを指定した場合、EXIT 文は、同じ名前を持つ、この文を含んでいる DO ループを終了さ
せます。
例
DO i = 1, 20
n(i) = 0
READ *, j
IF (j < 0) EXIT
n(i) = j
END DO
関連文
CYCLE および DO
関連概念
関連情報については、次を参照してください。
•
136 ページの「DO 構文」の項
•
142 ページの「フロー制御文」の項
356
第 10 章
HP Fortran 文
EXTERNAL ( 文および属性 )
EXTERNAL ( 文および属性 )
名前を外部として宣言します。
構文
EXTERNAL 属性を使用した型宣言文は、次のとおりです。
type , attrib-list :: function-name-list
type
有効な型指定 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE (name) など ) で
す。
attrib-list
EXTERNAL 属性およびこれと互換性のある省略可能な次の属性を含む、コンマ
で区切られた属性の並びです。
表 10-10 EXTERNAL 文 : 利用可能な属性
OPTIONAL
PRIVATE
PUBLIC
function-name-list
EXTERNAL として指名された関数名をコンマで区切った並びです。
EXTERNAL 文の構文は次のとおりです。
EXTERNAL external-name-list
EXTERNAL 文の構文では、2 重コロンは許可されていないので、注意してください。
説明
EXTERNAL 属性または文は、サブルーチン呼び出しと関数引用で名前を実引き数として使用する
可能性のあることを指定しています。この名前は、外部手続き、仮手続きまたは初期値設定プロ
グラム単位のいずれかです。
EXTERNAL 属性を指定する型宣言文に書かれる名前は、外部手続きまたは手続きである仮引き数
の名前でなければなりません。
次の規則と制限が適用されます。
第 10 章
357
HP Fortran 文
EXTERNAL ( 文および属性 )
•
名前は、EXTERNAL 文、EXTERNAL 属性を持つ宣言文、または引用仕様本体で一度だけ書くこ
とができますが、これらのうちの複数に書くことはできません。
•
EXTERNAL 属性はサブルーチンに対して使用できません。サブルーチンを EXTERNAL として宣
言するには、文形式を使用します。
•
名前が仮引き数の場合、EXTERNAL 文ではそれを仮手続きとして宣言します。
•
利用者定義手続きまたはライブラリルーチンが組み込み手続きと同じ名前を持つ場合、それ
が EXTERNAL 属性を持っているか、または明示的引用仕様を持っているかのどちらかを宣言
しなければなりません。その名前の組み込み手続きは、このようなプログラム単位ではもは
や利用できません。
•
INTRINSIC 属性および EXTERNAL 属性は、お互いに排他的です。
例
SUBROUTINE sub (fourier)
! fourier is a dummy procedure; actual argument corresponding to
! to fourier can be external, intrinsic, or module procedure
REAL fourier
EXTERNAL fourier
! statement form
REAL, EXTERNAL :: SIN, COS, TAN ! attribute form
! SIN, COS, and TAN are no longer intrinsic procedures; functions
! with these names must be defined in the program
...
END SUBROUTINE sub
SUBROUTINE gratx (x, y)
! Specify init_block_a as the block data
! subprogram that initializes common block a
EXTERNAL init_block_a
! Common block available in subroutine gratx
COMMON /a/ temp, pressure
END SUBROUTINE gratx
BLOCK DATA init_block_a
! init_block_a initializes the objects in common block a
COMMON /a/ temp, pressure
DATA temp, pressure/ 98.6, 15.5 /
END BLOCK DATA init_block_a
関連文
INTRINSIC
358
第 10 章
HP Fortran 文
EXTERNAL ( 文および属性 )
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
153 ページの「手続き」の項
•
648 ページの「ライブラリルーチンを EXTERNAL として宣言する」の項
第 10 章
359
HP Fortran 文
FORMAT
FORMAT
入出力データの編集方法を記述します。
構文
label FORMAT (format-list)
label
文の番号。
format-list
書式項目をコンマで区切った並びです。ここでは、並びの各項目は、表 9-1 で
説明した編集記述子の 1 つか、または (format-list) のどちらかが可能です。
(format-list) が並び項目の 1 つである場合、書式反復数をこの前に任意に
指定できます。この書式反復数は、正の整数で、(format-list) を何回繰り返
せるかを指定します。編集記述子の多くも繰り返すことができます。
説明
FORMAT 文は、書式付き入出力のデータを内部 (2 進数 ) 表現と書式付けた (ASCII) 表現の間でど
のように変換するかを示す書式仕様を含みます。この変換によって、データを人間が読むことの
できる形式で表すことができます。
書式仕様はデータ転送文の中に埋め込むことができますが、FORMAT 文を使用する利点は、いく
つものデータ転送文でこれを利用可能にすることです。いくつかのデータ転送文では、label を
引用することで、FORMAT 文に含まれる同じ書式仕様を使用することができます。
FORMAT 文を使用する別の利点は、これが事前コンパイルされており、書式仕様を処理する実行
時のオーバーヘッドを削減し、FMT 指定子のコンパイル時エラー検出を提供してくれることで
す。
例
PROGRAM format_example
WRITE (15,FMT=20) 1234, 45, -12
20 FORMAT (I6, 2I4)
END PROGRAM format_example
このプログラムをコンパイルし実行したとき、次の出力が行われます ( ここで b は、空白文字を
表します )。
bb1234bb45b-12
360
第 10 章
HP Fortran 文
FORMAT
関連文
READ および WRITE
関連概念
入出力の編集については、233 ページの第 9 章 「入出力の編集」を参照してください。
第 10 章
361
HP Fortran 文
FUNCTION
FUNCTION
関数副プログラムを導入します。
構文
[RECURSIVE] [type-spec] FUNCTION
function-name ([dummy-arg-name-list])
[RESULT (result-name)]
RECURSIVE
関数が直接的または間接的に再帰的である場合に、FUNCTION 文で指定しなけ
ればならないキーワードです。RECURSIVE 句は、type-spec の前後どちらか
に、一度だけ書くことができます。非再帰的関数に RECURSIVE を指定しても
誤りではありません。
自分自身を直接呼び出す再帰的関数はまた、RESULT 句を指定しなければなり
ません ( 後述を参照 )。
type-spec
有効な型指定 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE (name) など ) で
す。関数結果の型および型パラメータは、type-spec によって指定するか、
または関数副プログラム中で結果変数を宣言して指定できますが、両方で指定
することはできません。関数の型が明示的に指定されない場合、暗黙の型宣言
の規則が適用されます。
関数結果が配列値またはポインターの場合、結果変数 (function-name また
は指定されている場合 result-name) の適当な属性を関数副プログラム中で指
定しなければなりません。
function-name
定義している関数副プログラムの名前。
dummy-arg-name-list
関数の仮引き数名をコンマで区切った並びです。
362
第 10 章
HP Fortran 文
FUNCTION
result-name
結果変数です。RESULT 句を指定しない場合、function-name が結果変数にな
ります。result-name を書く場合、それは function-name とは違ったもの
でなければならず、function-name を関数副プログラム中で宣言してはいけ
ません。
前述のように、自分自身を直接呼び出す再帰的関数では、RESULT 句を指定し
なければなりません。他の関数については、RESULT 句を省略可能です。
説明
FUNCTION 文は、外部関数副プログラム、モジュール関数副プログラムまたは内部関数副プログ
ラムを導入します。
例
PROGRAM main
...
CONTAINS
! f is an internal function
FUNCTION f(x)
f = 2*x + 3
END FUNCTION f
! recursive function, which must specify RESULT clause
RECURSIVE INTEGER FUNCTION factorial (n) &
RESULT (factorial_value)
IMPLICIT INTEGER (a-z)
IF (n <= 0) THEN
factorial_value = 1
ELSE
factorial_value = n * factorial (n-1)
END IF
END FUNCTION factorial
END PROGRAM main
関連文
CONTAINS, END, INTENT, INTERFACE, OPTIONAL, および型宣言文
関連概念
関連情報については、次を参照してください。
第 10 章
363
HP Fortran 文
FUNCTION
•
102 ページの「組み込み型の型宣言」の項
•
158 ページの「外部手続き」の項
•
168 ページの「引き数」の項
•
182 ページの「利用者定義演算子」の項
364
第 10 章
HP Fortran 文
GO TO ( 割り当て形 )
GO TO ( 割り当て形 )
変数に割り当てられた文番号に制御を移行します。
構文
GO TO integer-variable [[,] (label-list)]
integer-variable 基本種別整数型のスカラ変数。
label-list
文番号をコンマで区切った並びです。
説明
割り当て形 GO TO 文は、ASSIGN 文で最も最近変数に割り当てた文番号の文に制御を移行しま
す。
integer-variable には、GO TO 文の実行の前に、ASSIGN 文によって実行文の文番号を与えな
ければなりません。割り当て形 GO TO 文を実行すると、interger-variable の文番号に一致す
る文番号の文に制御が移行します。
label-list は、integer-variable に含まれているべき文番号の並びです。
integer-variable は、配列要素または構造体の整数型成分であってはいけません。
この文を使用すると、コンパイラがこの文が書かれているプログラムを最適化できない可能性が
あります。
例
ASSIGN 10 TO out
GO TO out
関連文
ASSIGN、計算形 GO TO、および単純 GO TO
関連概念
フロー制御文についての詳細は、142 ページの「フロー制御文」の項を参照してください。
第 10 章
365
HP Fortran 文
GO TO ( 計算形 )
GO TO ( 計算形 )
いくつかの文番号の 1 つに制御を移行します。
構文
GO TO ( label-list ) [,] arithmetic-expression
label-list
文番号をコンマで区切った並びです。
arithmetic-expression
スカラ整数式です。HP Fortran では拡張され、実数型または倍精度実数型が
算術式に使用できます。
説明
計算形 GO TO 文は、arithmetic-expression の値に従い、いくつかの文番号付き文の 1 つに
制御を移行します。arithmetic-expression を評価した後 ( 必要に応じて整数値に切り捨て
し )、arithmetic-expression の切り捨てられた値に対応する label-list の位置にある文番
号に制御を移行します。
arithmetic-expression の値が 1 より小さいか、または label-list 中の文番号の総数より大
きい場合、計算形 GO TO 文の直後の実行文に制御が移行します。
例
index = 3
! Branch made to the statement labeled 30.
GO TO (10, 20, 30, 40) index
関連文
SELECT CASE、割り当て形 GO TO および単純 GO TO
関連概念
フロー制御文についての詳細は、142 ページの「フロー制御文」の項を参照してください。
366
第 10 章
HP Fortran 文
GO TO ( 単純 )
GO TO ( 単純 )
指定された文番号に制御を移行します。
構文
GO TO label
label
実行文の文番号です。
説明
単純 GO TO 文は、指定された文番号の文に直接制御を移行します。label を持つ実行文を、こ
の GO TO 文の前または後に書くことができますが、同じ有効域の中になくてはなりません。
例
GO TO 30
30 CONTINUE
関連文
割り当て形 GO TO および計算形 GO TO
関連概念
フロー制御文についての詳細は、142 ページの「フロー制御文」の項を参照してください。
第 10 章
367
HP Fortran 文
IF ( 算術 )
IF ( 算術 )
3 つの文番号の 1 つに制御を移行します。
構文
IF (arithmetic-expression) labelN, labelZ, labelP
arithmetic-expression
複素数型および倍精度複素数型を除く任意の数値型の算術式です。
label
実行文の文番号です。
説明
算術 IF 文は、arithmetic-expression によって決定される文番号の文に制御を移行します。
arithmetic-expression の評価が負の値の場合、制御は labelN に移行します。評価がゼロの
場合、制御は labelZ に移行し、評価が正の値の場合、制御は labelP に移行します。
同じ文番号を、同じ算術 IF 文に 2 回以上書くことができます。
各文番号は、算術 IF と同じ有効域の実行文の文番号でなければなりません。
例
i = -1
! Branch to statement labeled 10
IF (i) 10, 20, 30
関連文
IF 構文および論理 IF
関連概念
フロー制御文についての詳細は、142 ページの「フロー制御文」の項を参照してください。
368
第 10 章
HP Fortran 文
IF THEN
IF THEN
IF 構文を開始します。
構文
[construct-name :] IF (logical-expression) THEN
construct-name
IF 構文に与えられた名前です。construct-name を指定した場合、同じ名前
を END IF 文にも書かなければなりません。
logical-expression
スカラの論理式です。
説明
IF 文は、logical-expression の値が真になる場合、その直後に続く文ブロックを実行します。
IF 文で始まる IF 構文には、ELSE IF 文および ELSE 文を指定することができ、条件実行用の文
ブロックを提供します。
IF 文に続くブロックを空にすることもできます。
HP Fortran では、拡張されて、構文の外側から IF 構文に制御の移行をすることができます。
例
IF (x <= 0.0 .AND. y > 1.0) THEN
CALL fix_coord(x, y)
END IF
関連文
ELSE、ELSE IF、IF ( 算術 )、IF ( 論理 ) および END ( 構文 )
関連概念
IF 構文についての詳細は、140 ページの「IF 構文」の項を参照してください。
第 10 章
369
HP Fortran 文
IF ( 論理 )
IF ( 論理 )
条件により文を実行します。
構文
IF (logical-expression) statement
logical-expression
論理式です。
statement
次のものを除く実行文です。
•
構文を始めるために使用する文
•
すべての END 文
•
すべての IF 文
説明
論理 IF 文は、2 方向の決定を行います。logical-expression の値が真になる場合、「文」が
実行され、制御が次の文に移ります。logical-expression の値が偽になる場合、statement
は実行されずに、制御はプログラムの次の文に移ります。
例
IF (a .EQ. b) PRINT *, 'They are equal.'
関連文
IF ( 算術 ) および IF ( 構文 )
関連概念
フロー制御文についての詳細は、142 ページの「フロー制御文」の項を参照してください。
370
第 10 章
HP Fortran 文
IMPLICIT
IMPLICIT
暗黙の型宣言の規則を変更するか、廃棄します。
構文
IMPLICIT 文は次の形式のいずれかです。
•
形式 1:
IMPLICIT type (range-list)[, type (range-list) ,]...
•
形式 2:
IMPLICIT NONE
type
range-list 中の対応する英字と対応付けられるデータ型です。
range-list
type と関連付けられる英字または英字の範囲 ( たとえば、A-Z または I-N) を
コンマで区切った並びです。英字の範囲を書くことは、単一の英字を並べて書
くことと同じ効果を持ちます。
説明
IMPLICIT 文を使用して、その文に 2 つの形式のどちらをとらせるかに応じて、暗黙の型宣言の
規則を変更するか、または廃棄できます。
形式 1
この形式の IMPLICIT 文は、range-list 中の英字で始まり、型が明示的に与えられていないす
べての変数、配列、名前付き定数、関数副プログラム、関数副プログラムの ENTRY 名および文
関数に対してデータ型として type を指定します。
プログラム単位の単純宣言文の中で、IMPLICIT 文は、DATA 文および PARAMETER 文を除き、他
のすべての単純宣言文より前に書きます。
有効域の IMPLICIT 文で、同じ英字を 2 回以上単一の英字として書いたり、英字範囲の中に入れ
てはいけません。
IMPLICIT 文と PARAMETER 文の対応の仕方については、422 ページの「PARAMETER ( 文およ
び属性 )」の項を参照してください。
形式 2
第 10 章
371
HP Fortran 文
IMPLICIT
IMPLICIT NONE 文は、すべての変数、配列、名前付き定数、関数副プログラム、ENTRY 名およ
び文関数 ( 組み込み関数を除く ) に対して暗黙の型宣言規則を使用不能にします。これらのオブ
ジェクトはすべて明示的に型宣言しなければなりません。IMPLICIT NONE 文は、有効域で唯一
の IMPLICIT 文でなければならず、すべての PARAMETER 文より前に書かなければなりません。
組み込み関数の型は影響を受けません。
+implicit_none コンパイル行オプションを使用して、暗黙の型宣言規則を廃棄することもでき
ます。このオプションでコンパイルしたプログラムには、IMPLICIT 文が挿入され、コンパイラ
はその IMPLICIT 文を有効なものとします。
例
次の文では、I, J, または K で始まるすべての変数と関数を複素数型にし、A, B, または C で始ま
るすべてのデータ項目を整数型にします。
IMPLICIT COMPLEX (I, J, K), INTEGER (A-C)
関連概念
関連情報については、次を参照してください。
•
372
107 ページの「暗黙の型宣言」の項
第 10 章
HP Fortran 文
INCLUDE
INCLUDE
指定されたファイルからテキストを取り入れます。
構文
INCLUDE character-literal-constant
character-literal-constant
取り込むファイルの名前です。
説明
キーワード INCLUDE および character-litteral-constant で INCLUDE 行を形成し、この行
を使用してコンパイルの前にプログラムにテキストを挿入します。INCLUDE 行が挿入されたテキ
ストに置き換わります。このため、プログラムのテキストを挿入したい場所に INCLUDE 行を書
かなければなりません。取り込まれたファイルの終わりに達したとき、コンパイラは INCLUDE
行の次の行の処理を続けます。
character-litteral-constant には、ファイル名か、または装置名のいずれかを書きます。
これは、名前付き定数である種別パラメータを持つことはできません。
INCLUDE 行は、後続の注釈を除き、他のテキストを持たず、1 行に書かなければなりません。こ
れには文番号を付けてはいけません。このため、これに飛び込むことはできません。また、
Fortran 90 の IF 文の一部である実行文にはなれません。“;” 演算子を使用して 2 番目の
INCLUDE 行を追加することも、“&” を使用してこの行を他の行に続けることもできません。
コンパイラは、次の順でディレクトリから名前付き INCLUDE ファイルを検索します。
1. 現在のソースディレクトリ
2. 指定された順序で、-I コンパイル行オプションで指定されたディレクトリ
3. 現在作業中のディレクトリ
4. ディレクトリ /usr/include
INCLUDE 行は、最高 10 レベルまで入れ子にできます。しかし、非再帰的に入れ子にしなければ
なりません。つまり、挿入されたテキストは、入れ子の早期のレベルで遭遇した INCLUDE 行を
指定してはいけません。
取り込んだファイルのリスト中の行番号付けは、1 から始まります。取り込んだファイルのリス
トが終わったとき、取り込みレベルは適切に下げられ、前の行番号付けが再開されます。
第 10 章
373
HP Fortran 文
INCLUDE
例
INCLUDE 'my_common_blocks'
INCLUDE ”/my_stuff/declarations.h”
関連概念
関連情報については、次を参照してください。
•
374
50 ページの「INCLUDE 行」の項
第 10 章
HP Fortran 文
INQUIRE
INQUIRE
ファイルの特性についての情報を返します。
構文
INQUIRE 文の構文には、次の 2 つの形式があります。
•
出力並びによる問い合わせ
INQUIRE ( IOLENGTH= integer-variable) output-list
•
装置またはファイルによる問い合わせ
INQUIRE (io-specifier-list)
integer-variable
output-list を直接探査ファイルに書いた結果の書式なし記録の長さです。
integer-variable に返された値を、OPEN 文中の RECL 指定子に使用して、
output-list 中のデータを保持する書式なし直接探査ファイルの各記録の長
さを指定できます。
output-list
WRITE 文または PRINT 文に含まれているものと同様な、出力項目をコンマで
区切った並びです。出力項目には、変数および入出力 DO 形反復が含まれます
(220 ページの「入出力 DO 形反復」の項を参照 )。
io-specifier-list
I/O 指定子をコンマで区切った並びです。次に説明するように、ほとんどの指
定子は、指定した装置またはファイルに関する情報を返します。
io-specifier-list は、UNIT 指定子または FILE 指定子のどちらかを含まな
ければなりませんが、両方を含んではいけません。次の節では、
io-specifier-list に書くことができるすべての I/O 指定子について説明し
ます。
[UNIT=]unit
外部ファイルに接続された装置を指定します。unit は整数式で、その値は正
の値でなければなりません。省略可能なキーワード UNIT= を省略した場合、
unit は io-specifier-list の最初の項目でなければなりません。unit を
io-specifier-list に書いた場合、FILE 指定子を使用してはいけません。
第 10 章
375
HP Fortran 文
INQUIRE
ACCESS=character
次の値を返し、探査方法を示します。
表 10-11 INQUIRE 文 : ACCESS= の値
'SEQUENTIAL'
ファイルは、順番探査用に接続さ
れています。
'DIRECT'
ファイルは、直接探査用に接続さ
れています。
'UNDEFINED'
ファイルは接続されていません。
ACTION=character-variable
次の値を返し、転送方向を示します。
表 10-12 INQUIRE 文 : ACTION= の値
'READ'
ファイルは読み込み専用に接続さ
れています。
'WRITE'
ファイルは書き込み専用に接続さ
れています。
'READWRITE'
ファイルは読み書き両用に接続さ
れています。
'UNDEFINED'
ファイルは接続されていません。
BLANK=character-variable
有効な空白制御の種類を返します。空白制御については、OPEN 文の BLANK 指
定子を参照してください。BLANK 指定子から返される値は、次のとおりです。
表 10-13 INQUIRE 文 : BLANK= の値
'NULL'
空白無視制御が有効です。
'ZERO'
空白ゼロ制御が有効です。
'UNDEFINED'
ファイルは、書式付き入出力用に
接続されていません。
376
第 10 章
HP Fortran 文
INQUIRE
DELIM=character-variable
次の値を返し、並び入出力および変数群入出力の編集において文字の値を囲む
ために使用する文字 ( 存在する場合 ) を示します。
表 10-14 INQUIRE 文 : DELIM= の値
'APOSTROPHE'
囲み記号として、アポストロフィ
を使用します。
'QUOTE'
囲み記号として、二重引用符を使
用します。
'NONE'
囲み文字はありません。
'UNDEFINED'
ファイルは書式付き入出力用に接
続されていません。
DIRECT=character-variable
次の値を返し、ファイルが直接探査用に接続されているかどうかを示します。
表 10-15 INQUIRE 文 : DIRECT= の値
'YES'
ファイルは直接探査用に接続され
ています。
'NO'
ファイルは直接探査用に接続され
ていません。
'UNKNOWN'
ファイルが直接探査用に接続され
ているかどうか判別できません。
ERR=stmt-label
文の実行中にエラーが起こった場合に制御を渡す、実行文の文番号を指定しま
す。
EXIST=logical-variable
次の値を返し、ファイルまたは装置が存在するかどうかを示します。
表 10-16 INQUIRE 文 : EXIST= の値
'TRUE'
第 10 章
ファイルが存在するか、または装
置が接続されています。
377
HP Fortran 文
INQUIRE
表 10-16 INQUIRE 文 : EXIST= の値 ( 続き )
ファイルが存在しないか、または
装置が接続されていません。
'FALSE'
FILE=character-expression
問い合わせ用のファイル名を指定します。ファイルは接続されている必要も、
存在する必要もありません。FILE 指定子を io-specofier-list に書いた場
合、UNIT 指定子を使用してはいけません。
FORM=character-variable
次の値を返し、ファイルが書式付き入出力または書式なし入出力用に接続され
ているかを示します。
表 10-17 INQUIRE 文 : FORM= の値
'FORMATTED'
ファイルは書式付き入出力用に接
続されています。
'UNFORMATTED'
ファイルは書式なし入出力用に接
続されています。
'UNDEFINED'
ファイルは接続されていません。
FORMATTED=character-variable
次の値を返し、ファイルが書式付き入出力用に接続されているかどうかを示し
ます。
表 10-18 INQUIRE 文 : FORMATTED= の値
'YES'
ファイルは書式付き入出力用に接
続されています。
'NO'
ファイルは書式付き入出力用に接
続されていません。
'UNKNOWN'
ファイルが書式付き入出力用に接
続されているかどうか判別できま
せん。
378
第 10 章
HP Fortran 文
INQUIRE
IOSTAT=integer-variable
文を実行した後の入出力状態を返します。文の実行が成功した場合、
integer-variable はゼロに設定されます。エラーが起こった場合、正の整
数に設定され、エラーの内容を示します。
NAME=character-variable
指定した装置に接続されているファイル名を返します。ファイル名がないか、
またはファイルが接続されていない場合、NAME= は文字列 UNDEFINED を返し
ます。
NAMED=logical-variable
次の値を返し、ファイルが名前を持つかどうかを示します。
表 10-19 INQUIRE 文 : NAMED= の値
'TRUE'
ファイルが名前を持っています。
'FALSE'
ファイルが名前を持っていませ
ん。
NEXTREC=integer-variable
直接探査用に接続されているファイルに読み込まれるか、または書き込まれる
次の記録番号を返します。この値は、直前に読み込まれた、または書き込まれ
た記録番号 +1 となります。値が 1 の場合、記録が何も処理されていないこと
を示します。ファイルが接続されていないか、ファイルが装置ファイルか、ま
たはその状態が判別できない場合、整変数は不定となります。
NUMBER=integer-variable
指定したファイルに接続されている装置番号を返します。指名されたファイル
に装置が接続されていない場合、integer-variable は不定となります。
OPENED=logical-variable
次の値を返し、ファイルを開いているかどうか ( つまり、接続されているかど
うか ) を示します。
表 10-20 INQUIRE 文 : OPENED= の値
'TRUE'
ファイルは接続されています。
'FALSE'
ファイルは接続されていません。
第 10 章
379
HP Fortran 文
INQUIRE
PAD=character-variable
入力記録が空白補いされるかどうかを示す値を返します。空白補いについての
詳細は、OPEN 文の PAD 指定子を参照してください。戻り値は次のとおりで
す。
表 10-21 INQUIRE 文 : PAD= の値
'YES'
ファイルまたは装置は、OPEN 文
の PAD='YES' で接続されていま
す。
'NO'
ファイルまたは装置は、OPEN 文
の PAD='NO' で接続されていま
す。
POSITION=character-variable
次の値を返し、ファイルの位置付けを示します。
表 10-22 INQUIRE 文 : POSITION= の値
'REWIND'
ファイルは、最初の記録に位置付
けられて接続されています。
'APPEND'
ファイルは、ファイル終了記録の
直前に位置付けられて接続されて
います。
'ASIS'
ファイルは、その位置を変えずに
接続されています。
'UNDEFINED'
ファイルは接続されていないか、
または直接探査用に接続されてい
ます。
READ=character-variable
次の値を返し、ファイルに対して読み込みの実行が許されるかどうかを示しま
す。
表 10-23 INQUIRE 文 : READ= の値
'YES'
380
ファイルに対して読み込みが許さ
れています。
第 10 章
HP Fortran 文
INQUIRE
表 10-23 INQUIRE 文 : READ= の値 ( 続き )
'NO'
ファイルに対して読み込みが許さ
れていません。
'UNKNOWN'
ファイルに対して読み込みが許さ
れているかどうか判別できませ
ん。
READWRITE=character-variable
次の値を返し、ファイルに対して読み込み / 書き込みの実行が許されるかどう
かを示します。
表 10-24 INQUIRE 文 : READWRITE= の値
'YES'
ファイルに対して読み込みと書き
込みの両方とも許されています。
'NO'
ファイルに対して読み込みと書き
込みの両方は許されていません。
'UNKNOWN'
ファイルに対して読み込みと書き
込みが両方とも許されているかど
うか、判別できません。
RECL=integer-variable
指定した装置またはファイルの記録長をバイトで返します。ファイルは、直接
探査ファイルでなくてはなりません。ファイルが直接探査ファイルでないか、
または存在しない場合、integer-variable は不定となります。
SEQUENTIAL=character-variable
次の値を返し、ファイルが順番探査用に接続されているかどうかを示します。
表 10-25 INQUIRE 文 : SEQUENTIAL= の値
'YES'
ファイルは順番探査用に接続され
ています。
'NO'
ファイルは順番探査用に接続され
ていません。
第 10 章
381
HP Fortran 文
INQUIRE
表 10-25 INQUIRE 文 : SEQUENTIAL= の値 ( 続き )
ファイルが順番探査用に接続され
ているかどうか、判別できませ
ん。
'UNKNOWN'
UNFORMATTED=character-variable
次の値を返し、ファイルが書式なし入出力用に接続されているかどうかを示し
ます。
表 10-26 INQUIRE 文 : UNFORMATTED= の値
'YES'
ファイルは、書式なし入出力用に
接続されています。
'NO'
ファイルは、書式なし入出力用に
接続されていません。
'UNKNOWN'
ファイルが書式なし入出力用に接
続されているかどうか、判別でき
ません。
WRITE=character-variable
次の値を返し、ファイルに対して書き込みの実行が許されているかどうかを示
します。
表 10-27 INQUIRE 文 : WRITE= の値
'YES'
ファイルに対して書き込みが許さ
れています。
'NO'
ファイルに対して書き込みが許さ
れていません。
'UNKNOWN'
ファイルに対して書き込みが許さ
れているかどうか、判別できませ
ん。
382
第 10 章
HP Fortran 文
INQUIRE
説明
INQUIRE 文は、指定したファイル、または装置番号の選択した特性を返します (UNIT 指定子お
よび FILE 指定子の両方を、同じ INQUIRE 文中に指定することはできません )。装置番号による
問い合わせは、接続されたファイル上で行う必要があります。ファイル名による問い合わせは、
通常接続されたファイル上で行われます。
さらに、INQUIRE 文を使用して、新しいまたは既存のファイルの記録長を判別することができま
す。つまり、INQUIRE を使用して、ファイルを生成する前に記録長を取得し、戻り値を OPEN 文
の RECL 指定子の引き数として指定することができます。
例
次の例では、INQUIRE 文の異なる使用方法を説明します。
ファイルによる問い合わせ
この例の INQUIRE 文は、my_file という名前のファイルに関する次の情報を返します。
•
ファイルが接続されているかどうかを EXIST 指定子は判別します。
•
ファイルが直接探査用に接続されているかどうかを DIRECT 指定子は判別します。
•
ファイルの読み込みおよび書き込みができるかどうかを READWRITE 指定子は判別します
LOGICAL :: exist
CHARACTER(LEN=9) :: dir_acc, rw_sts
INQUIRE (FILE='my_file', EXIST=exist, &
DIRECT=dir_acc, READWRITE=rw_sts)
装置による問い合わせ
次の INQUIRE 文は、u_num の装置に接続されているファイルに関する次の情報を返します。
•
ファイルが u_num に接続されているかどうかを OPENED 指定子は判別します。
•
名前付きファイルか、またはスクラッチファイルかどうかを NAMED 指定子は判別します。
•
NAME 指定子は名前を返します。
LOGICAL :: opened, named
INTEGER :: u_num
CHARACTER(LEN=80) :: fname
...
INQUIRE (UNIT=u_num, NAMED=named,
第 10 章
OPENED=opened, NAME=fname)
383
HP Fortran 文
INQUIRE
出力並びによる問い合わせ
直接探査ファイルを生成するために OPEN 文を使用するとき、RECL 指定子でファイルの記録長
を指定しなければなりません。Fortran 90 以前では、移植可能でない方式によって記録長を判別
しなければなりませんでした。Fortran 90 の INQUIRE 文は、移植可能な解決策を提供します。
INQUIRE 文を使用し、出力並びで問い合わせを行い、INQUIRE 文からの戻り値を OPEN 文の引き
数として指定します。次に例を示します。
INTEGER :: rec_len, ios
INQUIRE (IOLENGTH=rec_len) x, y, i, j
OPEN (UNIT=32, FILE='new_file', IOSTAT=ios, &
ACCESS='DIRECT', RECL=rec_len)
関連文
OPEN
関連概念
入出力概念については、199 ページの第 8 章 「入出力およびファイル処理」を参照してくださ
い。
384
第 10 章
HP Fortran 文
INTEGER
INTEGER
整数型の言語要素を宣言します。
構文
INTEGER [kind-spec] [[, attrib-list] ::] entity-list
entity-list 中の言語要素の範囲を指定する種別型パラメータです。
kind-spec は次の形式をとります。
kind-spec
([KIND=] kind-param)
ここで kind-param は、整数値 1, 2, 4, または 8 を持つ名前付き定数または定
数式であってもかまいません。基本種別の大きさは、4 です。
拡張形として、kind-spec は次の形式をとることができます。
*len-param
ここで len-param は、整数 1, 2, 4, または 8 ( 省略 =4) です。
attrib-list
表 10-28
1 つ以上の次の属性をコンマで区切った並びです。
INTEGER 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
PRIVATE
DIMENSION
OPTIONAL
PUBLIC
EXTERNAL
PARAMETER
SAVE
INTENT
POINTER
TARGET
attrib-list が存在する場合、2 重コロンを後に付けなければなりません。
各属性については、本章の対応する文を参照してください。
entity-list
言語要素をコンマで区切った並びです。各言語要素は、次の形式をとります。
name [(array-spec)] [= initialization-expr]
name
変数または関数の名前です。
第 10 章
385
HP Fortran 文
INTEGER
array-spec
コンマで区切られた次元の上下限の並びです。
initialization-expr
整定数式です。initialization-expr が存在する場合、entity-list の前
に 2 重コロンが付きます。
説明
INTEGER 文は、整数のデータ長およびデータ属性を宣言するために使用されます。種別パラメー
タ ( 存在する場合 ) は、表現方法を示します。
INTEGER 文は、すべての実行文の前に置くという要件を含めて、型宣言文の規則に従います。
移植性のための拡張として、言語要素の長さを指定するために、HP Fortran では次の構文が許
されます。
name [*len] [(array-spec)] [= initialization-expr]
(array-spec) を指定した場合、*len は (array-spec) のどちら側にでも書くことができます。
name を *len とともに指定した場合、この名前は INTEGER*size によって指定した長さを無効
にします。
例
次の宣言は有効です。
INTEGER i, j
INTEGER(KIND=2) :: k
INTEGER(2), PARAMETER :: limit=420
! initialize an array, using an array constructor
INTEGER, DIMENSION(4) :: ivec = (/1, 2, 3, 4 /)
! use the slash notation (an HP extension) to initialize
INTEGER i/-1/, j/-2/, k/-7/ ! note, no double colon
! the following declarations are equivalent; the second uses the
! HP length specification extension
INTEGER (KIND = 8) int1
INTEGER*4 int1*8
関連文
BYTE
386
第 10 章
HP Fortran 文
INTEGER
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
107 ページの「暗黙の型宣言」の項
•
54 ページの「配列宣言」の項
•
70 ページの「配列構成子」の項
•
78 ページの「式」の項
•
583 ページの「KIND(X)」の項
第 10 章
387
HP Fortran 文
INTENT ( 文および属性 )
INTENT ( 文および属性 )
仮引き数の意図した使用方法を指定します。
構文
INTENT 属性を使用した型宣言文の構文は、次のとおりです。
type , attrib-list :: dummy-arg-name-list
type
有効な型指定 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE (name) など ) で
す。
attrib-list
INTENT (intent-spec) およびこれと互換性のある次のような省略可能な属
性を含む、属性をコンマで区切った並びです。
表 10-29 INTENT 文 : 利用可能な属性
DIMENSION
OPTIONAL
TARGET
intent-spec
IN, OUT, または INOUT のうちの 1 つ ( 形式 IN OUT も有効 ) です。
dummy-arg-name-list
intent-spec が適用される副プログラム仮引き数をコンマで区切った並びで
す。
INTENT 文の構文は、次のとおりです。
INTENT (intent-spec) [::] dummy-arg-name-list
説明
INTENT 属性は、仮引き数が値を渡すか、値を受け取るか、またはその両方を行うことを宣言し
ます。INTENT 属性は、意図した使用方法と矛盾する引き数の使用方法を検出する支援を行い、
またコンパイラがより効率的なコードを生成するよう手助けをします。
仮引き数が授受特性 IN を持つ場合、手続きはこれを変更したり、不定にしてはいけません。実
引き数が定義されている場合、この値は仮引き数の値として渡されます。
388
第 10 章
HP Fortran 文
INTENT ( 文および属性 )
仮引き数が授受特性 OUT を持つ場合、対応する実引き数は確定可能でなければなりません。つま
り、定数であってはいけません。手続きの実行が始まるとき、仮引き数は不定です。そのため、
引用する前に値を与えなければなりません。仮引き数に呼び出し側で値を与えなくてもかまいま
せん。
仮引き数が授受特性 INOUT を持つ場合、対応する実引き数は確定可能でなければなりません。
実引き数が定義されている場合、この値は仮引き数の値として渡されます。仮引き数は、手続き
で値を与えなくてもかまいません。
次の点についても、注意が必要です。
•
授受特性指定は、仮引き数にだけ適用され、副プログラムまたは引用仕様本体の宣言部にだ
け書くことができます。
•
副プログラムの引き数に授受特性を指定していない場合、仮引き数は実引き数によって制限
を受けます。たとえば、実引き数が変数でない式の場合、仮引き数はこの値を再確定しては
いけません。
•
ポインターの仮引き数に授受特性を指定してはいけません。
例
! x, y, and z are dummy arguments
SUBROUTINE electric (x, y, z)
REAL, INTENT (IN) :: x, y
! x and y are used only for input
! z is used for input and output
COMPLEX, INTENT (INOUT), TARGET :: z(1000)
...
SUBROUTINE pressure (true, tape, a, b)
USE a_module
TYPE(ace), INTENT(IN) :: a, b
! a and b are only for input
INTENT (OUT) true, tape
! true and tape are for output
...
SUBROUTINE lab_ten (degrees, x, y, z)
COMPLEX, INTENT(INOUT) :: degrees
REAL, INTENT(IN), OPTIONAL :: x, y
INTENT(IN) z
...
PROGRAM pxx
CALL electric (a+1, h*c, d)
! First subroutine defined above
CALL lab_ten (dg, e, f, g+1.0)
END PROGRAM pxx
第 10 章
389
HP Fortran 文
INTENT ( 文および属性 )
関連文
FUNCTION および SUBROUTINE
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
175 ページの「INTENT 属性」の項
390
第 10 章
HP Fortran 文
INTERFACE
INTERFACE
引用仕様宣言を導入します。
構文
INTERFACE [generic-spec]
generic-spec
generic-name
次のいずれかです。
•
generic-name
•
OPERATOR(defined-operator)
•
ASSIGNMENT(=)
総称手続きの名前です。
defined-operator 次のいずれかです。
•
組み込み演算子
•
.operator.、ここで operator は利用者定義名
説明
INTERFACE 文は、引用仕様宣言の最初の文です。引用仕様宣言は、外部手続きに明示的な引用
仕様を与える機構を構成し、次に示すような追加機能も提供します。
INTERFACE generic-name 形式は、引用仕様宣言の手続きの総称引用仕様を定義します。
INTERFACE OPERATOR (defined-operator) 形式は、新しい演算子を定義するか、または既存
の演算子の意味を拡張するために使用します。
INTERFACE ASSIGNMENT (=) 形式は、代入演算子の拡張のために使用することによって、( たと
えば ) 構造型オブジェクトに対して使用できます。
例
次の例では、引用仕様宣言のさまざまな形式を説明します。
! make explicit the interfaces of external function spline
! and external subroutine sp2
INTERFACE
REAL FUNCTION spline(x,y,z)
END FUNCTION spline
第 10 章
391
HP Fortran 文
INTERFACE
SUBROUTINE sp2(x,z)
END SUBROUTINE sp2
END INTERFACE
! Make the interface of function r_ave explicit and give
! it the generic name g_ave
INTERFACE g_ave
FUNCTION r_ave(x)
! Get the size of x from the module ave_stuff
USE ave_stuff, ONLY: n
REAL r_ave, x(n)
END FUNCTION r_ave
END INTERFACE
! Make the interface of external function b_or
! it to extend the + operator
INTERFACE OPERATOR ( + )
FUNCTION b_or(p, q)
LOGICAL b_or, p, q
INTENT (IN) p, q
END FUNCTION b_or
END INTERFACE
explicit, and use
関連文
END INTERFACE, FUNCTION, および SUBROUTINE
関連概念
関連情報については、次を参照してください。
•
117 ページの「構造型」の項
•
179 ページの「引用仕様宣言」の項
392
第 10 章
HP Fortran 文
INTRINSIC ( 文および属性 )
INTRINSIC ( 文および属性 )
組み込み手続きを識別します。
構文
INTRINSIC 属性を持つ型宣言文の構文は、次のとおりです。
type , attrib-list :: intrinsic-function-name-list
type
有効な型指定 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE(name) など ) です。
attrib-list
INTRINSIC およびこれと互換性のある次の省略可能な属性を含む属性をコン
マで区切った並びです。
表 10-30 INTRINSIC 文 : 利用可能な属性
PRIVATE
PUBLIC
intrinsic-function-name-list
intrinsic-function-names をコンマで区切った並び ( サブルーチン名は型
宣言文には書けないので、組み込みサブルーチン名は、次に説明するように、
INTRINSIC 文を使用して識別されることに注意してください )。
INTRINSIC 文の構文は、次のとおりです。
INTRINSIC intrinsic-procedure-name-list
ここで intrinsic-procedure-name-list は、手続き名をコンマで区切った並びです。
EXTERNAL 文と同様、INTRINSIC 文は省略可能な 2 重コロンを指定できないので注意してくださ
い。
説明
INTRINSIC 文とその属性は、組み込み手続き名として個別名または総称名を識別し、それを実
引き数として使用できるようにします ( 実引き数として個別関数名、または個別名と同じ総称名
だけを使用することができます。170 ページの「手続き仮引き数」の項を参照 )。INTRINSIC 文
は、名前が組み込みであり、変数の名前でないことをコンパイラに知らせるために必要です。組
第 10 章
393
HP Fortran 文
INTRINSIC ( 文および属性 )
み込み名が実引き数として渡され、同じ有効域にそれが手続きであると分かるようなその名前の
使われ方がされていない場合、必ず呼び出したプログラムの INTRINSIC 文または INTRINSIC 属
性を含む型宣言文 ( 関数名の場合 ) でこれを指定しなければなりません。
各名前は、INTRINSIC 文中でただ一度だけ、そして同じ有効域内の多くて 1 つの INTRINSIC 文
中に書くことができます。また、同じ有効域内で EXTERNAL 文と INTRINSIC 文の両方に同じ名
前を書くことはできません。
例
SUBROUTINE subr ! caller
DOUBLE PRECISION :: dsin,x,y,func
INTRINSIC dsin
...
y = func(dsin,x)
...
END SUBROUTINE subr
DOUBLE PRECISION FUNCTION func(proc,y)
DOUBLE PRECISION :: y, proc
...
func = proc(y)
...
END FUNCTION func
! callee
関連文
EXTERNAL
関連概念
引き数としての利用者定義手続き渡しおよび組み込み手続き渡しについては、170 ページの「手
続き仮引き数」の項を参照してください。組み込み手続きについては、521 ページの「組み込み
手続きの仕様」の項で説明しています。
394
第 10 章
HP Fortran 文
LOGICAL
LOGICAL
論理型の言語要素を宣言します。
構文
LOGICAL [kind-spec] [[, attrib-list] ::] entity-list
kind-spec
論理型言語要素の大きさをバイトで指定します。kind-spec は、次の形式を
とります。
([KIND=] kind-param)
ここで kind-param は、整数値 1, 2, 4, または 8 を持つ名前付き定数または定
数式であってもかまいません。基本種別の大きさは、4 です。
拡張形として、kind-spec は、次の形式をとります。
*len-param
ここで len-param は、整数値 1, 2, 4, または 8 です ( 省略 =4)。
attrib-list
1 つ以上の次の属性をコンマで区切った並びです。
表 10-31 LOGICAL 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
PRIVATE
DIMENSION
OPTIONAL
PUBLIC
EXTERNAL
PARAMETER
SAVE
INTENT
POINTER
TARGET
attrib-list が存在する場合、2 重コロンを後に付けなければなりません。
各属性については、本章の対応する文を参照してください。
entity-list
言語要素をコンマで区切った並びです。各言語要素は次の形式をとります。
name [(array-spec)] [= initialization-expr]
name
変数または関数の名前です。
第 10 章
395
HP Fortran 文
LOGICAL
array-spec
コンマで区切られた次元の上下限の並びです。
initialization-expr
論理定数式です。initialization-expr が存在する場合、entity-list の
前に 2 重コロンが付きます。
説明
LOGICAL 文は、すべての実行文の前に置くという要件を含めて、型宣言文の規則に従います。
移植性のための拡張として、言語要素の長さを指定するために、HP Fortran では次の構文が許
されます。
name [*len] [( array-spec )] [= initialization-expr]
(array-spec) を指定した場合、*len は (array-spec) のどちら側にでも書くことができます。
name を *len とともに指定した場合、この名前は LOGICAL*size によって指定した長さを無効
にします。
例
次の宣言は有効です。
LOGICAL log1, log2
LOGICAL(KIND=2) :: log3
LOGICAL(2), PARAMETER :: test=.TRUE.
! initialize an array, using an array constructor
LOGICAL, DIMENSION(2) :: lvec=(/.TRUE.,.FALSE./)
! use the slash notation (an HP extension) to initialize
LOGICAL log1/.TRUE./, log2/.FALSE./ ! note, no double colon
! the following declarations are equivalent; the second uses the
! HP length specification extension
LOGICAL (KIND = 8) log8
LOGICAL*4 log8*8
関連文
INTEGER
関連概念
関連情報については、次を参照してください。
396
第 10 章
HP Fortran 文
LOGICAL
•
102 ページの「組み込み型の型宣言」の項
•
107 ページの「暗黙の型宣言」の項
•
54 ページの「配列宣言」の項
•
70 ページの「配列構成子」の項
•
78 ページの「式」の項
•
583 ページの「KIND(X)」の項
第 10 章
397
HP Fortran 文
MAP ( 拡張 )
MAP ( 拡張 )
構造体中の共用体を定義します。
構文
MAP
field-def
...
END MAP
field-def
次のいずれかです。
•
型宣言文
•
別の構造体の入れ子
•
記録の入れ子
•
共用体定義
説明
MAP 文は、HP Fortran 90 の拡張であり、UNION 文とともに使用されて、構造体中の共用体を定
義します。MAP 文および UNION 文についての詳細は、469 ページの「STRUCTURE ( 拡張 )」の
項を参照してください。
398
第 10 章
HP Fortran 文
MODULE
MODULE
モジュールを導入します。
構文
MODULE module-name
module-name
一意なモジュール名。
説明
モジュールは、実行不可能なプログラム単位で、型定義、オブジェクト宣言、手続き定義 ( モ
ジュール手続き )、外部手続き引用仕様、利用者定義総称名、利用者定義演算子および利用者定
義代入を含むことができます。モジュールのこれらの定義に対して非公開であると指定していな
ければ、その定義はすべて、USE 文でモジュールを指定しているプログラム単位で利用できま
す。モジュールは、データ、型、手続きおよび手続き引用仕様に対して便利な共有とカプセル化
機構を提供します。
例
! Make data objects and a data type sharable via a module
MODULE shared
COMPLEX gtx (100, 6)
REAL, ALLOCATABLE :: y(:), z(:,:)
TYPE peak_item
REAL peak_val, energy
TYPE(peak_item), POINTER :: next
END TYPE peak_item
END MODULE shared
! Define a data abstraction for rational arithmetic via a module
MODULE rational_arithmetic
TYPE rational
PRIVATE
INTEGER numerator, denominator
END TYPE rational
! Generic extension of =
INTERFACE ASSIGNMENT (=)
MODULE PROCEDURE eqrr, eqri, eqir
END INTERFACE
INTERFACE OPERATOR (+)
! Generic extension of +
第 10 章
399
HP Fortran 文
MODULE
MODULE PROCEDURE addrr, addri, addir
END INTERFACE
...
CONTAINS
FUNCTION eqrr (. . .)
! A specific definition of =
...
FUNCTION addrr (. . .)
! A specific definition of +
...
END MODULE rational_arithmetic
関連文
CONTAINS, END, PRIVATE, PUBLIC, および USE
関連概念
モジュールについては、188 ページの「モジュール」の項を参照してください。
400
第 10 章
HP Fortran 文
MODULE PROCEDURE
MODULE PROCEDURE
総称引用仕様中でモジュール手続きを指定します。
構文
MODULE PROCEDURE module-procedure-name-list
module-procedure-name-list
module-procedure-name をコンマで区切った並びです。
説明
MODULE PROCEDURE 文は、引用仕様宣言中に現われます。これは、この指定が総称で、個別手続
きを外部手続きでなくモジュール中で定義するときに使用されます。MODULE PROCEDURE 文は、
副プログラムだけを指名します。これには、引用仕様の定義は含まれません。名前付き副プログ
ラムは、現在のモジュールか、または参照結合が参照可能な別のモジュールの中で定義しなけれ
ばなりません。
例
MODULE path
! module data environment; module procedures contained in this
! module have access to this data environment
REAL x, y, z
! Generic name substance for procedures air and water
INTERFACE substance
MODULE PROCEDURE air, water
END INTERFACE
INTERFACE OPERATOR (*)
MODULE PROCEDURE rational_multiply
END INTERFACE
...
! Module procedures are preceded by CONTAINS
CONTAINS
SUBROUTINE air (contents)
...
END SUBROUTINE air
SUBROUTINE water (x, a, z)
! x is a dummy argument, y is from the module data
!
environment
第 10 章
401
HP Fortran 文
MODULE PROCEDURE
a = x + y
...
END SUBROUTINE water
FUNCTION rational_multiply (x, y)
TYPE (rational) :: rational_multiply
TYPE (rational), INTENT (IN) :: x, y
rational_multiply = ...
...
END FUNCTION rational_multiply
END MODULE path
関連文
FUNCTION, SUBROUTINE, および INTERFACE
関連概念
モジュールについては、188 ページの「モジュール」の項を参照してください。
402
第 10 章
HP Fortran 文
NAMELIST
NAMELIST
入出力処理用の変数群に名前を付けます。
構文
NAMELIST /group-name/var-list [ [ ,]/group-name/var-list ]...
group-name
一意な変数群名です。
var-list
スカラおよび配列変数名をコンマで区切った並びです。
説明
NAMELIST 文は、変数群として var-list を宣言し、変数群を group-name と関係付けます。
var-list 中の変数は、構造型のオブジェクト、その成分のオブジェクト、保存変数、局所ス
タック上の変数および仮引き数も含めどんな型でもかまいません。しかし、次のものは許されま
せん。
•
記録または合成参照
•
ポインターまたはその指示先
•
自動割り付けオブジェクト
•
割り付け配列
•
部分列
•
大きさ引き継ぎ配列
•
大きさ整合配列
•
長さ引き継ぎ文字型
•
構造型オブジェクトの個々の成分
var-list は、変数群による入出力文でどの項目を読み込みまたは書き込みできるかを、明示的
に定義します。var-list 中のすべての項目を変数群による入力で定義する必要はありません
が、すべての入力項目は、変数群に属さなければなりません。var-list 中の項目の順番は、変
数群による出力で書き出される値の順番を決めます。
同じ group-name を持つ 2 つ以上の NAMELIST 文を、同じ有効域の中に書くことができます。同
じ group-name を持つ複数の NAMELIST 文中の連続した各 var-list は、group-name に対する
並びの続きとして処理されます。
第 10 章
403
HP Fortran 文
NAMELIST
同じ有効域中の異なる NAMELIST 文で、同じ変数名を書くことができます。
例
PROGRAM
INTEGER i, j(10)
CHARACTER*10 c
NAMELIST /n1/ i, j, c
! Define the namelist group n1
READ (UNIT=5,NML=n1)
WRITE (6, n1)
END
このプログラムを次の入力記録によってコンパイルし、実行する場合、
&n1
j(8) = 6, 7, 8
i = 5
c = 'xxxxxxxxx'
j = 5*0, -1, 2
c(2:6) = 'abcde'
/
出力は次のようになります。
&n1
I
J
C
/
= 5
= 0 0 0 0 0 -1 2 6 7 8
='xabcdexxx'
関連文
ACCEPT, OPEN, INQUIRE, PRINT, READ, および WRITE
関連概念
変数群による入出力については、210 ページの「変数群入出力」の項を参照してください。
404
第 10 章
HP Fortran 文
NULLIFY
NULLIFY
指示先のポインターを空状態にします。
構文
NULLIFY (pointer-object-list)
pointer-object-list
変数名および構造体成分をコンマで区切った並びです。
説明
NULLIFY 文は、すべての指示先のポインターを空状態にします。NULLIFY 文を使用して、ポイ
ンターの状態を不定から空状態に変えることもできます。
例
次の例では、ポインター属性を持つ変数の宣言と使用方法を示します。
REAL, TARGET :: value
REAL, POINTER :: pt
pt.pt => value
NULLIFY (pt)
!
!
!
!
value can be target
for the pointer
Associate pt with value
Disassociate pt
! ASSOCIATED intrinsic is valid in next statement if (and only
! if) pt has been previously allocated, assigned (as above), or
! nullified (as above)
IF (.NOT.ASSOCIATED(pt)) pt => x
次の例は、リスト処理アプリケーションでの構造体の使用方法を示します。
TYPE list_node
INTEGER value
TYPE (list_node), POINTER :: next
END TYPE list_node
TYPE (list_node), POINTER :: list
ALLOCATE (list)
! Create new list node
list % value = 28
! Initialize data field
NULLIFY (list % next) ! Nullify pointer to the next node
第 10 章
405
HP Fortran 文
NULLIFY
関連文
ALLOCATE, DEALLOCATE, POINTER, および TARGET
関連概念
ポインターについては、125 ページの「ポインター」の項を参照してください。
406
第 10 章
HP Fortran 文
ON ( 拡張 )
ON ( 拡張 )
プログラムの実行が割り込みを受けた場合に取る動作を指定します。
構文
ON interrupt-condition action
interrupt-condition
算術エラーやキーボードからの割り込みなどの処理対象となる割り込みです。
action
次のいずれかです。
•
CALL trap-routine
•
ABORT
•
IGNORE
trap-routine
外部サブルーチン名です。
説明
この ON 文は HP 拡張機能です。ON 文は、プログラムの実行に割り込みをかける例外発生後に取
る動作を指定する実行文です
各 interrupt-condition に対して、次の動作のいずれか 1 つを指定できます。
•
CALL: 呼び出す対象のサブルーチンを指定します。
•
ABORT: プログラムを中断させます。
•
IGNORE: 割り込みを無視します。
表 10-32 では、interrupt-condition の値の範囲をリストしています。第 1 列は、トラップの
種類を示します。第 2 列は、ON 文で ON の直後に指定するキーワードです。第 3 列は、第 2 列の
キーワードの代わりに指定できる等価なキーワードです。たとえば、次の ON 文によって、プロ
グラムは、8 バイトの浮動小数点の演算対象に対してゼロで除算しようとする試みをトラップ
し、div_zero_trap と呼ばれる利用者記述トラップハンドラーに制御を渡します。
ON REAL(8) DIV 0 CALL trap_div_by_zero
第 10 章
407
HP Fortran 文
ON ( 拡張 )
次の ON 文は同じではありませんが、表の第 3 列から等価なキーワードを指定します。
ON DOUBLE PRECISION DIV 0 CALL trap_div_by_zero
表 10-32 ON 文によって処理される例外
例外
ゼロによる除算
オーバーフロー
アンダーフロー
無効な ( 不正な ) 演算
不正確な結果
Control-C
408
例外キーワード
代替キーワード
REAL(4) DIV 0
REAL DIV 0
REAL(8) DIV 0
DOUBLE PRECISION DIV 0
REAL(16) DIV 0
( なし )
INTEGER(2) DIV 0
INTEGER*2 DIV 0
INTEGER(4) DIV 0
INTEGER DIV 0
REAL(4) OVERFLOW
REAL OVERFLOW
REAL(8) OVERFLOW
DOUBLE PRECISION OVERFLOW
REAL(16) OVERFLOW
( なし )
INTEGER(2) OVERFLOW
INTEGER*2 OVERFLOW
INTEGER(4) OVERFLOW
INTEGER OVERFLOW
REAL(4) UNDERFLOW
REAL UNDERFLOW
REAL(8) UNDERFLOW
DOUBLE PRECISION UNDERFLOW
REAL(16) UNDERFLOW
( なし )
REAL(4) ILLEGAL
REAL ILLEGAL
REAL(8) ILLEGAL
DOUBLE PRECISION ILLEGAL
REAL(16) ILLEGAL
( なし )
REAL(16) INEXACT
( なし )
REAL(4) INEXACT
REAL INEXACT
REAL(8) INEXACT
DOUBLE PRECISION INEXACT
CONTROLC
( なし )
第 10 章
HP Fortran 文
ON ( 拡張 )
ON 文を使用して整数オーバーフローをトラップするには、$HP$ CHECK_OVERFLOW 指令も取り込
まなければなりません。これについては、『HP Fortran プログラマーガイド』に記載されていま
す。
ON 文の最適化レベル 2 以上での使用は、制限されています。最適化レベル 2 以上でコンパイル
すると、オプティマイザーは、プログラムに関して ON 文で呼び出される手続きの動作を考慮し
ないことを仮定します。したがって、このような手続きは、適切に動作する必要があり、特に次
の基準を満たさなければなりません。
•
ON 手続きは、割り込み手続きのいかなる変数または呼び出し側のいかなる変数も、現在値を
持っているとみなしてはいけません ( オプティマイザーは、割り込み手続きに対する呼び出
しが完了するまで、レジスタに変数を格納しておきます )。
•
ON 手続きの結果がプログラム制御を割り込み位置へ返すことである場合、ON 手続きは、割り
込み手続きのいかなる変数または呼び出し側のいかなる変数の値も変更してはいけません。
注記
レベル 2 以上で最適化したプログラム中で ON 文を書き、そのプログラムが例外
を検出した場合、その実行結果は、最適化を行わなかったプログラム、または ON
文以外は同じプログラムから得られる結果とは違うこともあります。
例
次の例では、関数 do_div に引き数 y の 0 を渡す場合に、ON 文を使用して、
trap_div_by_zero 手続きを呼び出しています。trap_div_by_zero が呼び出されると、エ
ラーメッセージを出力し、結果に 0 を割り当てます。
REAL FUNCTION do_div(x, y)
REAL :: x, y
ON REAL DIV 0 CALL trap
do_div = x/y ! causes an interrupt if y = 0
RETURN
END FUNCTION do_div
SUBROUTINE trap(res)
REAL :: res
PRINT *, "Don’t do that."
res = 0
END SUBROUTINE trap
第 10 章
409
HP Fortran 文
ON ( 拡張 )
関連概念
『HP Fortran プログラマーガイド』では、ON 文を使用した見本プログラムを初めとする、ON 文
の使用方法について説明しています。
410
第 10 章
HP Fortran 文
OPEN
OPEN
ファイルを装置に接続します。
構文
OPEN (io-specifier-list)
io-specifier-list
コンマで区切られた次の I/O 指定子の並びです。
[UNIT=]unit
外部ファイルを接続する装置を指定します。unit は、整数式でその計算結果
が 0 より大きい整数でなければなりません。省略可能なキーワードの UNIT=
が省略されている場合、unit は、io-specifier-list の中の最初の項目で
なければなりません。
ACCESS=character-expression
ファイル探査法を指定します。character-expression は次の引き数のいず
れかです。
表 10-33 OPEN 文 : ACCESS= の値
'DIRECT'
ファイルを直接探査で接続しま
す。
'SEQUENTIAL'
ファイルを順番探査で接続します
( デフォルト )。
' POSITION=
APPEND'
ファイルを追記用に接続する ( す
なわち、ファイルの位置をファイ
ル終了記録の直前に置く ) には、
POSITION=APPEND を使用しま
す。
第 10 章
411
HP Fortran 文
OPEN
ACTION=character-expression
許容データ転送操作を指定します。character-expression は次の引き数の
いずれかです。
表 10-34 OPEN 文 : ACTION= の値
'READ'
WRITE 文および ENDFILE 文はこ
の接続を参照してはいけません。
'WRITE'
READ 文はこの接続を参照しては
いけません。
'READWRITE'
任意のデータ転送文がこの接続を
参照できます ( デフォルト )。
BLANK=character-expression
入力数値データ内の空白の処理を指定します。この指定子は、書式付き入出力
に接続されるファイルに対してだけ許されます。character-expression は、
次の引き数のいずれかです。
表 10-35 OPEN 文 : BLANK= の値
'NULL'
空白を無視します ( デフォルト )。
'ZERO'
空白はゼロとみなされます。
DELIM=character-expression
並び入出力および変数群入出力の編集で ( 存在する場合 ) 文字定数を囲む場合
に使用する区切り記号を指定します。この指定子は書式付き出力に限り適用で
きます。character-expression は、次の引き数のいずれかです。
表 10-36 OPEN 文 : DELIM= の値
'APOSTROPHE'
並び入出力および変数群入出力の編
集で文字定数を囲むのにアポストロ
フィを使用します。
'QUOTE'
並び入出力および変数群入出力の編
集で文字定数を囲むのに二重引用符
を使用します。
412
第 10 章
HP Fortran 文
OPEN
表 10-36 OPEN 文 : DELIM= の値 ( 続き )
並び入出力および変数群入出力の編
集で文字定数を囲むのに区切り記号
を使用しません ( デフォルト )。
'NONE'
ERR=stmt-label
文の実行中にエラーが発生した場合に制御を移行する先の実行文の文番号を指
定します。
FILE=character-expression
unit に接続するファイルの名前を指定します。character-expression は、
ASCII 形式の装置ファイルにすることもできます。この指定子が OPEN 文の中
に記述されない場合、一時スクラッチファイルが作成されます。
FORM=character-expression
ファイルを書式付き入出力として接続するか、または書式なし入出力として接
続するかを指定します。character-expression は、次の引き数のいずれか
です。
表 10-37 OPEN 文 : FORM= の値
'FORMATTED'
ファイルを書式付き入出力として
接続します。ファイルを順番探査
で開く場合、これがデフォルトに
なります。
'UNFORMATTED'
ファイルを書式なし入出力として
接続します。ファイルを直接探査
で開く場合、これがデフォルトに
なります。
IOSTAT=integer-variable
OPEN 文の実行後、入出力状態を返します。文の実行が成功した場合、
integer-variable にはゼロが設定されます。エラーが発生した場合、
integer-variable には正の整数値が設定され、どのエラーが起きたかを示
します。
第 10 章
413
HP Fortran 文
OPEN
PAD=character-expression
入力記録が、書式仕様の要求より少ない文字の場合に入力記録の足りない部分
を空白で埋めるかどうかを指定します。この指定子は書式付き入力として接続
されるファイルに限り適用できます。character-expression は、次の引き
数のいずれかです。
表 10-38 OPEN 文 : PAD= の値
'YES'
入力記録を書式仕様が要求する大
きさまで ( 必要に応じて ) 空白で
埋めます ( デフォルト )。
'NO'
書式仕様の指定記録と同じ大きさ
ではない場合でも入力記録を空白
で埋めません。
POSITION=character-expression
順番探査用にファイルを開いた場合にその位置を指定します。
character-expression は、次の引き数のいずれかです。
表 10-39 OPEN 文 : POSITION= の値
'ASIS'
ファイルの位置は変わりません
( デフォルト )。
'REWIND'
ファイルをその開始位置に位置付
けます。
'APPEND'
ファイルをファイル最終記録の直
前に位置付けます。
開くファイルが存在しなかった場合、この指定子は無視されます。新しいファ
イルの位置は常に、その開始位置に位置付けられます。
RECL=integer-expression
直接探査用に開くファイルの各記録の長さを指定します。記録の長さは文字
( バイト ) 単位で表現されます。この指定子は、ファイルを直接探査用に開く
場合は必ず指定しますが、順番探査用に開く場合は無視されます。
414
第 10 章
HP Fortran 文
OPEN
STATUS=character-expression
ファイルを接続する時の状態を指定します。character-expression は、次
の引き数のいずれかです。
表 10-40 OPEN 文 : STATUS= の値
'OLD'
既存ファイルに接続します。
FILE= も必ず指定しなければな
りません。指定したファイルは存
在しなければなりません。
'NEW'
新しいファイルを作成します。
FILE= も必ず指定し、指定した
ファイルが存在してはいけませ
ん。
'UNKNOWN'
FILE= で名前の指定したファイ
ルが存在する場合、OLD 状態でそ
のファイルを接続します。ファイ
ルが存在しない場合、NEW 状態で
ファイルを作成します ( デフォル
ト )。
'REPLACE'
ファイルが存在しなかった場合、
NEW 状態でファイルに接続しま
す。ファイルが存在する場合、そ
のファイルを消去して NEW 状態
で作成します。
STATUS='REPLACE' を指定する
場合、FILE= も必ず指定しなけ
ればなりません。
'SCRATCH'
スクラッチファイルを作成しま
す。FILE 指定子を指定してはい
けません。スクラッチファイルに
ついての詳細は、201 ページの
「スクラッチファイル」の項を参
照してください。
第 10 章
415
HP Fortran 文
OPEN
説明
OPEN 文は、ファイルを装置に接続し、ファイルに対してデータを読み込み / 書き込みできるよ
うにします。ファイルが一度装置に接続されると、プログラム中の任意のプログラム単位がその
装置を引用できます。
I/O 指定子は、OPEN 文の中で特定の順序で記述する必要はありません。ただし、省略可能なキー
ワードの UNIT= を省略する場合、unit が並び中の最初の項目でなければなりません。
一度にファイルを接続できる装置は 1 つに限られます。すなわち、同じファイルを 2 つの違う装
置に接続することはできません。別の装置に接続されているファイルを開こうとすると、不定の
結果が生じます。
ただし、複数の OPEN を同じ装置に対して実行することができます。すなわち、ある装置が既存
のファイルに接続されている場合、別の OPEN 文をその装置に実行することが許されます。
FILE= で違うファイルを指定すると、前に開いたファイルが、その 2 番目のファイルが装置に接
続される前に自動的に閉じられます。FILE= で同じファイルを指定すると、そのファイルは同じ
位置で装置に接続された状態のままになります。BLANK, DELIM, PAD, ERR, および IOSTAT の各指
定子の値を変更することはできますが、他の指定子の値は変更しようとしても無視されます。
例
次の例は、OPEN 文のいくつかの使用法を示します。
順番探索用にファイルを開く
次の OPEN 文は、既存のファイル inv を装置 10 に接続し、順番探査 ( デフォルト ) で開きます。
READ 文だけが、データ転送を行うことができます。エラーが発生した場合、制御は 100 の文番
号の付いた実行文に移り、エラーコードが ios 変数に置かれます。
OPEN(10, FILE='inv', ERR=100, I0STAT=ios,
ACTION='READ', STATUS='OLD')
&
直接探査用にファイルを開く
次の OPEN 文は、変数 next1 にそのファイル名が格納されているファイルを開き、50 文字の記
録の長さの書式付き直接探査ファイルとして装置 4 に接続します。
OPEN(ACCESS=”DIRECT”, UNIT=4, RECL=50,
FORM=”FORMATTED”, FILE=next1)
&
入出力転送用にデバイスを開く
次の例は、システムデバイスの /dev/console を装置 6 に接続します。装置 6 を指定するすべ
てのデータ転送は、このデバイスに向かいます。
OPEN(6,FILE='/DEV/CONSOLE')
416
第 10 章
HP Fortran 文
OPEN
スクラッチファイルを開く
次の 2 つの OPEN 文は、同じ結果となります。すなわち、装置 19 に接続されているスクラッチ
ファイルを開きます (FILE=name 指定子が最初の文に指定されている場合、名前の指定された
ファイルが代わりに開きます )。
OPEN (UNIT=19)
OPEN (UNIT=19, STATUS=”SCRATCH”)
OPEN 文の I/O 指定子
OPEN 文で使用できる I/O 指定子を特定の順に指定する必要がないため、次の 3 つの OPEN 文は
すべて等価になります。
OPEN(UNIT=3, STATUS='NEW', FILE='OUT.DAT')
OPEN(3, STATUS='NEW', FILE='OUT.DAT')
OPEN(STATUS='NEW', FILE='OUT.DAT', UNIT=3)
ただし、2 番目の OPEN 文で、外部ファイル装置番号 3 が省略可能なキーワードの UNIT= を省略
しているため、先頭に指定しなければなりません。したがって、次の OPEN 文は不正になりま
す。
OPEN(STATUS='NEW', 3, FILE='OUT.DAT') ! illegal
関連文
CLOSE, INQUIRE, READ, および WRITE
関連概念
入出力概念および入出力を実行する見本プログラムについては、199 ページの第 8 章 「入出力
およびファイル処理」を参照してください。書式付き入出力については、233 ページの第 9 章
「入出力の編集」を参照してください。
第 10 章
417
HP Fortran 文
OPTIONAL ( 文および属性 )
OPTIONAL ( 文および属性 )
手続きの省略可能な引き数を指定します。
構文
OPTIONAL 属性を使用した型宣言文の構文は、次のとおりです。
type , attrib-list :: dummy-argument-name-list
type
有効な型指定 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE (name) など ) で
す。
attrib-list
コンマで区切られた属性の並びです。それには、OPTIONAL およびこれと互換
性のある次のような省略可能な属性が含まれます。
表 10-41 OPTIONAL 文 : 利用可能な属性
DIMENSION
INTENT
TARGET
EXTERNAL
POINTER
VOLATILE
dummy-argument-name-list
コンマで区切られた dummy-argument-names の並びです。
OPTIONAL 文の構文は次のとおりです。
OPTIONAL [::] dummy-argument-name-list
説明
仮引き数が OPTIONAL 属性を持つ場合、対応する実引き数を手続き引用の中で指定する必要はあ
りません。一般に各引用で引き数が同じ値を使用する場合、それらの引き数が省略可能であると
指定して、デフォルト値を与えておくと便利です。こうすれば通常の引用で引き数を省略するこ
とができます。省略可能な引き数が手続き中に存在するかどうかは、PRESENT 組み込み関数を使
用して判定できます。
FORTRAN 77 での ENTRY の使用は、ほとんどの場合省略可能な引き数の使用によって置き換え
ることができます。
418
第 10 章
HP Fortran 文
OPTIONAL ( 文および属性 )
次の制限条項は、OPTIONAL 属性の使用に適用されます。
•
OPTIONAL 属性は、仮引き数だけに対して使用できます。OPTIONAL 属性は、副プログラムと
対応する引用仕様本体に書くことができます。
•
OPTIONAL 仮引き数の中で、その実引き数が存在しないものは、引用できず、また定義でき
ません ( 仮手続きの場合、起動できません )。ただし、別の手続きに存在しないとみなされ
る OPTIONAL 引き数として渡すことを除きます。
•
手続き引用の場合に引き数を省略すると、その引き数に続くすべての引き数は引き数キー
ワードを使用しなければなりません。
•
手続きが省略可能な引き数を持つ場合、手続き引用仕様は明示的でなければなりません。
例
次は、OPTIONAL 文の 2 つの例です。最初の例では、サブルーチン trip の呼び出しは、引き数
の path が OPTIONAL 属性をもっているため、規則に従い引き数の path を省略できます。
CALL TRIP ( distance = 17.0 ) ! path is omitted
SUBROUTINE trip ( distance, path )
OPTIONAL distance, path
次の例では、サブルーチン plot は PRESENT 関数を使用して OPTIONAL 属性を持つ引き数の存在
に依存するコードを実行するかどうかを判定しています。
SUBROUTINE plot (pts, o_xaxis, o_yaxis, smooth)
TYPE (point) pts
REAL, OPTIONAL :: o_xaxis, o_yaxis
! Origin - default (0.,0.)
LOGICAL, OPTIONAL :: smooth
REAL ox, oy
IF (PRESENT (o_xaxis)) THEN
ox = o_xaxis
ELSE
ox = 0.
! Note that the o_xaxis dummy argument cannot be referenced if
! the actual argument is not present. The same applies
! to o_yaxis (below).
END IF
IF (PRESENT (o_yaxis)) THEN
oy = o_yaxis
ELSE
oy = 0.
END IF
第 10 章
419
HP Fortran 文
OPTIONAL ( 文および属性 )
IF (PRESENT(smooth)) THEN
IF (smooth) THEN
...
! Smooth algorithm
RETURN
END IF
END IF
...
! Plot points
END SUBROUTINE plot
! Some valid calls to plot.
CALL plot (points)
CALL plot (observed, o_xaxis = 100., o_yaxis = 1000.)
CALL plot (random_pts, smooth = .TRUE.)
関連文
SUBROUTINE および FUNCTION
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
168 ページの「引き数」の項
•
509 ページの第 11 章 「組み込み手続き」の PRESENT 組み込み関数
420
第 10 章
HP Fortran 文
OPTIONS ( 拡張 )
OPTIONS ( 拡張 )
HP Fortran コンパイラによって最適化レベルを下げます。
構文
OPTIONS +On
ここで +On ( または -On) は、コマンド行で指定したレベル以下の最適化レベルを指定します。
説明
OPTIONS 文は HP Fortran の拡張機能で、コマンド行で指定したレベル以下の最適化レベルの指
定に使用されます。OPTIONS 文で指定されたレベルがコマンド行で指定したものよりも高い場
合、この文は無視されます。
OPTIONS 文はプログラム単位の外になければなりません。最適化レベルが変更されると、次のプ
ログラム単位の最初に適用され、後続のすべてのプログラム単位か、または他の OPTIONS 文か
!$HP$ OPTIMIZE 指令に置き換わるまで作用します。
OPTIMIZE 指令は最適化を使用可能 / 使用不能にするが、最適化レベルを変更しないという点に
おいて、OPTIONS 文は OPTIMIZE 指令とは異なります。!$HP$ OPTIMIZE 指令については、
『HP
Fortran プログラマーガイド』で説明しています。
OPTIMIZE 指令は OPTIONS 文に優先します。つまり、OPTIMIZE 指令が最適化を使用不能にする
ために使用されると、その後の指令が最適化を使用可能にするまでいかなる後続の OPTIONS 文
も影響を与えません。
例
次の例では、最初の OPTIONS 文が最適化レベル 3 でサブルーチン go_fast を最適化します。2 番
目の OPTIONS 文は最適化レベルを 2 に下げます。
OPTIONS +O3
SUBROUTINE go_fast
...
END SUBROUTINE go_fast
OPTIONS +O2
SUBROUTINE not_so_fast
...
END SUBROUTINE not_so_fast
第 10 章
421
HP Fortran 文
PARAMETER ( 文および属性 )
PARAMETER ( 文および属性 )
名前付き定数を定義します。
構文
PARAMETER 属性を使用した型宣言文の構文は、次のとおりです。
type, attrib-list :: cname1 = cexpr1[, cname2 = cexpr2]...
type
有効な型指定 (INTEGER、REAL、LOGICAL、CHARACTER、TYPE (name) など )
です。
attrib-list
コンマで区切られた属性の並びです。これには、PARAMETER およびそれと互
換性のある次のような省略可能な属性が含まれます。
表 10-42 PARAMETER 文 : 利用可能な属性
DIMENSION
PUBLIC
PRIVATE
SAVE
SAVE 属性を PARAMETER 文の中で指定しても何の効果もありません。
cname
定数を表す名前です。
cexpr
cname が表す定数に評価される初期値式です。配列定数の場合、cexpr は配列
構成子でなければなりません。構造型定数の場合、cexpr は構造体構成子でな
ければなりません。
PARAMETER 文の構文は次のとおりです。
PARAMETER (cname1 = cexpr1 [, cname2 = cexpr2]...)
説明
この PARAMETER 文は、英字名を定数に結合します。PARAMETER 文の中で定義された英字名は名
前付き定数と呼ばれます。名前付き定数は、プログラム単位中で複数回定義してはいけません。
一度定義されると、名前付き定数は名前付け定数以外には使用できません。すなわち、名前付き
定数には、変数とは違い、値を割り当てることができません。
PARAMETER 属性を使用する場合、名前付き定数の値は、PARAMETER 属性が現れる文の初期化部
分によって設定されなければなりません。
422
第 10 章
HP Fortran 文
PARAMETER ( 文および属性 )
名前付き定数の型は、暗黙の型宣言規則によって決定されます。ただし、PARAMETER 文の中に
最初に現れる前に型宣言文によって指定された場合、または PARAMETER をその属性の 1 つとし
て含む型宣言文によって指定された場合を除きます。PARAMETER 文が名前付き定数を宣言し暗
黙的にその型を指定した場合、その名前付き定数は、以降の型宣言または IMPLICIT 文の中に現
れてもかまいませんが、名前付き定数の型を確認する場合に限られます。
英字名の型と定数の型が一致しなかった場合、名前付き定数の値は、表 4-5 で説明するように、
代入文の型変換規則に従って割り当てられます。
次の規則は、定数と英字名との間の型の一致に適用されます。
•
cname が数値型の場合、cexpr は算術定数式でなければなりません。
•
cname が文字型である場合、対応する cexpr は文字定数式でなければなりません。
•
cname が論理型である場合、対応する cexpr は算術定数式または論理定数式のどちらでもか
まいません。
cexpr の中に現れるすべての定数の英字名は、同一のプログラム単位の中で、同じ PARAMETER
文でも別の PARAMETER 文でも定義済みのものでなければなりません。たとえば、次の 2 番目
の PARAMETER 文の中の式は、1 番目の PARAMETER 文の中の式から作成されているので有効で
す。
PARAMETER (limit = 1000)
PARAMETER (limit_plus_1 = limit + 1)
論理演算子 (.EQ., .NE., .LT., .LE., .GT., および .GE.) と次の組み込み関数は PARAMETER 文の
中に書くことができます。
表 10-43 PARAMETER 文 : 利用可能な組み込み関数
ABS
IAND
IXOR
MAX
CHAR
ICHAR
LEN
MIN
CMPLX
IEOR
LGE
MOD
CONJB
IMAG
LGT
NINT
DIM
IOR
LLE
NOT
DPROD
ISHFT
LLT
前述の組み込み関数を PARAMETER 文で使用する場合、その引き数は定数でなければなりません。
第 10 章
423
HP Fortran 文
PARAMETER ( 文および属性 )
名前付き定数が文字型で、その長さが指定されていない場合、その長さは名前付き定数が最初に
現れる前に型宣言文中で指定するか、または IMPLICIT 中で指定しなければなりません。名前付
き定数の型または長さ、またはその両方を、IMPLICIT 文を含めて以降に続く文によって変更し
てはいけません。型 CHARACTER*(*) の文字名が PARAMETER 文中で定義されている場合、その
長さはその文字名に割り当てられている式の長さになります。
名前付き定数が配列の場合、その上下限は明示的であり、初期値式によって決定されなければな
りません。
そうした英字名が定義されると、その名前は、式または DATA 文の中に定数として、定義してい
るプログラム単位の以降の任意の文の中で使用することができます。
例
! PARAMETER used in a type declaration statement as an attribute
REAL, DIMENSION(4), PARAMETER :: const = &
(/1.2, 1.45, 0.9, 24.3/)
INTEGER year
! PARAMETER used as a statement
PARAMETER year = 1996
! Type declaration statement declaring a derived-type constant
TYPE (postal_info), PARAMETER :: package = &
postal_info (9.5, (/10.0, 5.5, 2.25/) )
関連概念
型宣言については、102 ページの「組み込み型の型宣言」の項を参照してください。
424
第 10 章
HP Fortran 文
PAUSE
PAUSE
プログラムの実行を一時停止します。
構文
PAUSE pause-code
pause-code
スカラ文字定数か最高 5 桁の数字の並びです。
説明
PAUSE 文は、プログラム実行を一時停止し、PAUSE 文に数字または文字が指定されているかどう
か、または何の指定もないかに対応してメッセージを出力します。
•
終了符号が数字の場合、メッセージ “PAUSE digits” が標準エラーに書き込まれます。
•
終了符号がスカラ文字式の場合、メッセージ “PAUSE character-expression” が標準エ
ラーに書き込まれます。
•
PAUSE の後に何の指定もない場合、単語 “PAUSE” が標準エラーに書き込まれます。
該当するメッセージの表示後、PAUSE 文は、プログラムの再開に関する情報を伝える 2 通りの
メッセージの 1 つを標準出力に書き込みます。標準入力デバイスが端末の場合、メッセージは次
のとおりです。
To resume program execution, type GO.
この時点で、プログラムは一時停止しており、オペレータが単語の GO を入力して [Return] キー
を押すまでその状態を続けます。GO 以外を入力すると、プログラムは終了します。
標準入力デバイスが端末以外の場合、メッセージは次のとおりです。
To resume execution, execute a kill -15 pid
&
command
ここで pid は、一時停止しているプログラムの一意のプロセス識別番号です。このコマンドは、
ユーザーがログインしているどの端末からでも実行することができます。
例
! Write ”PAUSE 7777” to standard error
PAUSE 7777
第 10 章
425
HP Fortran 文
PAUSE
! Write ”PAUSE MOUNT TAPE” to standard error
PAUSE 'MOUNT TAPE'
! Write ”PAUSE” to standard error
PAUSE
関連文
STOP
関連概念
フロー制御文についての詳細は、142 ページの「フロー制御文」の項を参照してください。
426
第 10 章
HP Fortran 文
POINTER ( クレイ形式拡張 )
POINTER ( クレイ形式拡張 )
クレイ形式のポインターとそのオブジェクトを宣言します。
構文
POINTER (pointer1, pointee1) [, (pointer2, pointee2)]...
pointer
ポインターです。
pointee
変数名または配列宣言です。
説明
HP Fortran は、Fortran 90 規格の POINTER 文とクレイ形式 POINTER 文の両方をサポートしま
す。クレイ形式 POINTER 文は、旧版の FORTRAN 77 プログラムとの互換性のためにサポート
されています。次の説明は、クレイ形式 POINTER 文だけに対するものです。Fortran 90
POINTER 文については、430 ページの「POINTER ( 文および属性 )」の項で説明します。
次の制限事項は pointer に適用されます。
•
INTEGER(4) 型でなければなりません。そうでない場合でも、コンパイラが他の暗黙的また
は明示的な型宣言に関係なく、ポインターの型を INTEGER(4) として解釈します。
•
他のデータ型には宣言できません。
•
別のポインターがこのポインターを指すことはできません。
•
PARAMETER 文または DATA 文の中では使用できません。
•
構造型オブジェクトの中では使用できません。
+autodbl オプションまたは +autodbl4 オプションによって、pointer の大きさを増加させる
ことができます。
pointee は、配列、構造型、記録、または文字列を始めとし、どの型でもかまいません。
次の制限事項が、pointee に適用されます。
•
仮引き数、関数名、関数値、共通ブロック要素、自動割り付けオブジェクト、総称引用仕様
宣言名、または構造型にはできません。
•
COMMON, DATA, EQUIVALENCE, または NAMELIST の文中では使用できません。
•
次の属性のいずれも取ることができません。ALLOCATABLE, EXTERNAL, INTENT, INTRINSIC,
OPTIONAL, PARAMETER, POINTER, SAVE, および TARGET。
第 10 章
427
HP Fortran 文
POINTER ( クレイ形式拡張 )
•
非定数の上下限を持つ配列の指示先は、サブルーチンや関数の中だけで使用でき、主プログ
ラムの中では使用できません。
•
POINTER 文の中に現れる上下限配列式で使用される変数は、副プログラムの仮引き数か共通
ブロック変数のどちらかでなければなりません。式の値は、副プログラムに入った後では変
更できません。
ポインターとメモリーの結合は、ポインターにオブジェクトのアドレスを割り当てることによっ
て行います。通常、これは、libU77 関数の LOC を使用して行います。LOC 関数はその引き数の
アドレスを返すので、そのアドレスをポインターに割り当てることができます。次の例は、指示
先 i に 0 を割り当てるものです。
INTEGER i, j
POINTER (p, i)
p = LOC(j)
j = 0
MALLOC 組み込み関数を使用してヒープからメモリーを割り付け、その戻り値をポインターに割
り当てることもできます。割り付けメモリーの使用が終わったら、FREE 組み込み関数を使用し
てメモリーを解放し、再使用できるようにしておく必要があります。
固定アドレスに常駐するデバイスを処理するためポインターを使用する場合、整定数または整数
式を使用してその固定アドレスをポインターに割り当てることができます。
場合によって、特にプログラムが最適化されている場合、クレイ形式のポインターが、プログラ
ムの動作を不安定にする原因になることがあります。正しい動作を保証するには、次項を守らな
ければなりません。
•
サブルーチンと関数は、呼び出し間でそれらの引き数のアドレスを保存してはいけません。
•
関数はその引き数のアドレスを返してはいけません。
•
LOC 関数によって明示的に取得されたアドレスの変数だけをポインターを介して参照しなけ
ればなりません。
例
次の例では、MALLOC 組み込み関数は、その割り付けたメモリーブロックのアドレスを返すか、
または MALLOC が十分なメモリーの割り付けができなかった場合は 0 を返します。仮引き数
nelem が配列要素数を格納しているので、その数を 4 倍して MALLOC が割り付けるバイト数を出
します。FREE 組み込み関数は、再使用のためにヒープにメモリーを返します。
SUBROUTINE print_iarr(nelem)
POINTER (p, iarr(nelem))
428
第 10 章
HP Fortran 文
POINTER ( クレイ形式拡張 )
p = MALLOC( 4*nelem )
IF (p.EQ.0) THEN
PRINT *, 'MALLOC failed.'
ELSE
DO i = 1,nelem
iarr(i) = i
END DO
PRINT *, (iarr(i),i=1,nelem)
CALL FREE( p )
ENDIF
RETURN
END SUBROUTINE print_iarr
関連文
POINTER (Fortran 90 規格 )
関連概念
関連情報については、次を参照してください。
•
125 ページの「ポインター」の項
•
表 12-3 の LOC ルーチンの説明
•
509 ページの第 11 章「組み込み手続き」の MALLOC 組み込み関数および FREE 組み込み関数の
説明
第 10 章
429
HP Fortran 文
POINTER ( 文および属性 )
POINTER ( 文および属性 )
POINTER 属性の変数を指定します。
構文
POINTER 属性を使用した型宣言文の構文は次のとおりです。
type, attrib-list :: dummy-argument-name-list
type
有効な型宣言 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE(name) など ) です。
attrib-list
コンマで区切られた属性の並びです。POINTER およびそれと一緒に使用でき
る次の省略可能な属性が含まれます。
表 10-44 POINTER 文 : 利用可能な属性
DIMENSION
PRIVATE
OPTIONAL
PUBLIC
SAVE
dummy-argument-name-list
コンマで区切られた dummy-argument-names の並びです。
POINTER 文の構文は次のとおりです。
POINTER [::] object-name [(deferred-shape-spec-list)]
[,object-name [(deferred-shape-spec-list)]]...
object-name
データオブジェクトまたは関数結果です。
deferred-shape-spec-list
コンマで区切られたコロンの並びです。
430
第 10 章
HP Fortran 文
POINTER ( 文および属性 )
説明
POINTER 属性または文は、ある指示先オブジェクトに対するポインターである名前付き変数を指
定します。ポインターは、動的大きさ配列やリンクリストなどの動的オブジェクトを作成するこ
とを可能にします。ポインター属性付きオブジェクトは最初、その指示先用のスペースを確保し
ません。ポインターには、ALLOCATE 文が実行されたとき、またはポインター代入文を使用して
指示先を指すように代入されたときにその指示先のスペースが割り当てられます。
例
最初の例では、2 つの配列ポインターを宣言し、使用します。
! Extents are not specified; they are determined during execution
REAL, POINTER :: weight (:,:,:)
REAL, POINTER :: w_reg (:,:,:)
READ *, i, j, k
ALLOCATE (weight (i, j, k))
! create weight
! w_reg is an alias for an array section
w_reg => weight (3:i-2, 3:j-2, 3:k-2)
avg_w = sum (w_reg) / ((i-4) * (j-4) * (k-4))
DEALLOCATE (weight)
! weight no longer needed
次は、リスト処理アプリケーションでのポインターの使用例を示します。
TYPE link
REAL value
TYPE (link), POINTER :: next
END TYPE link
TYPE(link), POINTER :: list, save_list
NULLIFY (list)
! Initialize list
DO
READ (*, *, IOSTAT = no_more) value
IF (no_more /= 0) EXIT
save_list => list
ALLOCATE (list)
! Add link to head of list
list % value = value
list % next => save_list
END DO
! Linked list removed when no longer needed
DO
第 10 章
431
HP Fortran 文
POINTER ( 文および属性 )
IF (.NOT.ASSOCIATED (list) ) EXIT
save_list => list % next
DEALLOCATE (list)
list => save_list
END DO
関連文
ALLOCATE, DEALLOCATE, NULLIFY, および TARGET
関連概念
関連情報については、次を参照してください。
•
125 ページの「ポインター」の項
•
92 ページの「ポインター代入」の項
•
509 ページの第 11 章 「組み込み手続き」の ASSOCIATED 組み込み関数の説明
432
第 10 章
HP Fortran 文
PRINT
PRINT
標準出力に書き込みます。
構文
PRINT 文の構文は、次の 2 つの形式のいずれかを取ることができます。
•
書式付き並び構文
PRINT format [, output-list ]
•
変数群構文
PRINT name
format
次のいずれかになります。
•
並び入出力を指定するアスタリスク (*)。
•
書式仕様を含む FORMAT 文の文番号。
•
FORMAT 文の文番号を割り当てられた整変数。
•
文字式の書式仕様。
name
NAMELIST 文によって、すでに定義されている変数群名です。変数群構文を使
用して、PRINT 文は変数群の中のデータを標準出力に送出します。接続ファイ
ルに出力を向けるには、NML 指定子を含んだ WRITE 文を使用しなければなり
ません。
output-list
コンマで区切られた出力する出力項目の並びです。出力項目には、式と入出力
DO 形反復が含まれます。
説明
PRINT 文は、データをメモリーから標準出力に転送します ( 装置 6 は HP-UX 標準出力に事前に
接続されています )。PRINT 文は、書式付き入出力、並び入出力、および変数群入出力の実行に
限り使用できます。
接続ファイルに出力するには、WRITE 文を使用します。
例
この項の例では、PRINT 文のいくつかの使用方法を示します。
第 10 章
433
HP Fortran 文
PRINT
書式付き出力
次の文は、変数の num と des の内容を文番号 10 の FORMAT 文の書式仕様を使用して標準出力に
書き込みます。
PRINT 10, num, des
並び出力
次の文は、並び入出力書式を使用して文字定数 x= と変数 x の値を出力します。
PRINT *, 'x=', x
文字式の書式仕様
次の文は、文字式の書式仕様を使用して、同じように出力します。
PRINT '(A2, F8.2)', 'x=', x
変数群出力
次の文は、変数群書式を使用して変数群 coord 中のすべての変数を出力します。
PRINT coord
関連文
FORMAT および WRITE
関連概念
関連情報については、次を参照してください。
•
207 ページの「並び入出力」の項
•
262 ページの「文字式の書式仕様」の項
•
220 ページの「入出力 DO 形反復」の項
434
第 10 章
HP Fortran 文
PRIVATE ( 文および属性 )
PRIVATE ( 文および属性 )
モジュール要素に対して参照結合による参照を防ぎます。
構文
PRIVATE 属性を使用した型宣言文の構文は、次のとおりです。
type, attrib-list :: access-id-list
type
有効な型宣言 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE( name) など ) で
す。
attrib-list
コンマで区切られた属性の並びです。PRIVATE およびそれと一緒に使用でき
る次の省略可能な属性が含まれます。
表 10-45 PRIVATE 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
SAVE
DIMENSION
PARAMETER
TARGET
EXTERNAL
POINTER
access-id-list 次のコンマで区切られた 1 つ以上の並びです。
•
constant-name
•
variable-name
•
procedure-name
•
defined-type-name
•
namelist-group-name
•
OPERATOR ( operator )
•
ASSIGNMENT ( = )
PRIVATE 文の構文は次のとおりです。
PRIVATE [[::] access-id-list]
第 10 章
435
HP Fortran 文
PRIVATE ( 文および属性 )
説明
PRIVATE 属性は、モジュールの有効域にだけ指定できます。モジュールのデフォルトの参照許可
は PUBLIC ですが、並びのない PRIVATE 文を使用すれば PRIVATE に変えることができます。た
だし、モジュールの有効域には、参照対象並びを省略した PRIVATE 参照許可文はただ 1 つしか
許されていません。
型宣言文または参照許可文の中の PRIVATE 属性は、モジュール変数、型定義、関数、および名
前付き定数などの要素に対する参照許可を制限します。USE 文は、さらに参照許可を制限するこ
とができます。
モジュールの中で定義される構造型は、PRIVATE 属性または内部 PRIVATE 文を持つことができ
ます。型定義中の内部 PRIVATE 文は、型自身が使用可能な場合でも、モジュールの外部ではそ
の成分を使用不可にします。
PRIVATE 文はまた、サブルーチン、総称指定子、および変数群に対する参照を制限するためにも
使用できます。
総称名、利用者定義演算子、または利用者定義代入に対する PRIVATE 指定は、個別名が総称名
と等しくない限り、個別名に対して一切適用されません。
例
MODULE fourier
REAL :: x, y, z ! PUBLIC (default)
COMPLEX, PRIVATE :: fft ! PRIVATE, accessible only in module
TYPE (structure_name), PRIVATE :: structure_a, structure_b
! a, b and c are accessible only within this module
PRIVATE a, b, c
! r, s, and t are accessible outside the module
PUBLIC r, s, t
END MODULE fourier
MODULE place
PRIVATE
! Change default accessibility to PRIVATE
INTERFACE OPERATOR (.st.)
MODULE PROCEDURE xst
END INTERFACE
! make .st. public; everything else is private
PUBLIC OPERATOR (.st.)
LOGICAL, DIMENSION (100) :: lt
436
第 10 章
HP Fortran 文
PRIVATE ( 文および属性 )
CHARACTER(20) :: name
INTEGER ix, iy
END MODULE place
関連文
PUBLIC および USE
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
188 ページの「モジュール」の項
第 10 章
437
HP Fortran 文
PROGRAM
PROGRAM
主プログラムを指定します。
構文
PROGRAM name
name
プログラムの名前です。
説明
PROGRAM 文は省略可能であり、主プログラム単位に名前を割り当てます。name は、主プログラ
ムがあるファイル名と一致する必要はありません。ただし、対応する END PROGRAM で名前を指
定する場合は、その名前はこの name と一致しなければなりません。
例
! A program with a name
PROGRAM main_program
PRINT *, 'This program doesn't do much.'
END PROGRAM main_program
関連文
END
関連概念
主プログラム単位については、155 ページの「主プログラム」の項を参照してください。
438
第 10 章
HP Fortran 文
PUBLIC ( 文および属性 )
PUBLIC ( 文および属性 )
参照結合によるモジュール言語要素の参照を可能にします。
構文
PUBLIC 属性を使用した型宣言文の構文は、次のとおりです。
type, attrib-list :: access-id-list
type
有効な型宣言 (INTEGER, REAL, LOGICAL、CHARACTER, TYPE(name) など ) で
す。
attrib-list
コンマで区切られた属性の並びです。PUBLIC およびそれと一緒に使用できる
次の省略可能な属性が含まれます。
表 10-46 PUBLIC 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
SAVE
DIMENSION
PARAMETER
TARGET
EXTERNAL
POINTER
VOLATILE
access-id-list 次のコンマで区切られた 1 つ以上の並びです。
•
constant-name
•
variable-name
•
procedure-name
•
defined-type-name
•
namelist-group-name
•
OPERATOR ( operator )
•
ASSIGNMENT ( = )
PUBLIC 文の構文は次のとおりです。
PUBLIC [[::] access-id-list]
第 10 章
439
HP Fortran 文
PUBLIC ( 文および属性 )
説明
PUBLIC 属性は、モジュールの有効域にだけ指定できます。モジュールでのデフォルトの参照許
可属性は PUBLIC です。それは、並び指定なしの PUBLIC 文を使用して再確認できます。ただ
し、モジュールの有効域では、PUBLIC 参照許可文は、1 つしか指定できません。
型宣言文または参照許可文の中の PUBLIC 属性は、モジュール変数、型定義、関数、および名前
付き定数などの言語要素に対する参照を許可します。USE 文は、参照許可をさらに制御すること
ができます。
モジュールの有効域に定義されている構造型は、PUBLIC 属性または内部 PUBLIC 文を持つこと
ができます。
PUBLIC 文は、サブルーチン、総称指定子、および変数群に対する参照を許可する場合にも使用
できます。
総称名、利用者定義演算子、利用者定義代入に対する PUBLIC 指定は、個別名が総称名と同じで
ない限り個別名には適用されません。
例
MODULE fourier
PUBLIC
! PUBLIC unless explicitly PRIVATE
COMPLEX, PRIVATE :: fft
! fft accessible only in module
PRIVATE a, b, c
! accessible only in module
PUBLIC
r, s, t
! accessible outside the module
END MODULE fourier
MODULE place
PRIVATE
! Change default accessibility to PRIVATE
INTERFACE OPERATOR (.st.)
MODULE PROCEDURE xst
END INTERFACE
! Make .st. public; everything else is private
PUBLIC OPERATOR (.st.)
LOGICAL, DIMENSION (100) :: lt
CHARACTER(20) :: name
INTEGER ix, iy
END MODULE PLACE
関連文
PRIVATE および USE
440
第 10 章
HP Fortran 文
PUBLIC ( 文および属性 )
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
188 ページの「モジュール」の項
第 10 章
441
HP Fortran 文
READ
READ
外部ファイルおよび内部ファイルからデータを入力します。
構文
READ 文の構文は、次の形式のいずれかです。
•
長い形式 ( 接続されているファイルからの読み込み時に使用 )
READ (io-specifier-list) [input-list]
•
短い形式 ( 標準入力からの読み込み時に使用 )
READ format [, input-list]
•
短い変数群形式 ( 標準入力から変数群への読み込み時に使用 )
READ name
io-specifier-list
コンマで区切られた次の I/O 指定子の並びです。
[UNIT=]unit
入力ファイルを接続する装置を指定します。unit は次のいずれかを指定する
ことができます。
•
内部ファイルを示す基本種別文字変数名。
•
整数式 ( 結果が外部ファイルの接続されている装置番号になる式 )。
•
装置 5 ( 標準入力 ) に事前接続されていることを示すアスタリスク。
省略可能なキーワードの UNIT= を省略する場合は、unit は、
io-specifier-list の中の最初の項目でなければなりません。
[FMT=]format
データの編集に使用される書式仕様を指定します。format は次の中のいずれ
かを指定することができます。
442
•
並び入出力を指定するアスタリスク (*)。
•
書式仕様を持つ FORMAT 文の文番号。
•
FORMAT 文の文番号を割り当てられたスカラ基本種別整変数。
第 10 章
HP Fortran 文
READ
•
書式仕様を与える基本種別文字式。
省略可能なキーワードの FMT= を省略する場合は、format は、
io-specifier-list 中の 2 番目の項目でなければなりません。
注記
NML 指定子および FMT 指定子は、同じ io-specifier-list の中に同時に指定す
ることはできません。
[NML=]name
変数群入力に対する変数群名を指定します。name は、NAMELIST 文で定義済
みでなければなりません。省略可能なキーワード NML= を省略する場合は、
name は並びの中の 2 番目の項目でなければなりません。1 番目の項目は、省
略可能なキーワードの UNIT= の指定のない装置指定子でなければなりません。
NML 指定子および FMT 指定子は、同じ io-specifier-list の中に同時に指
定することはできません。
ADVANCE=character-expression
READ 文に対して前進書式付き入出力を使用するかどうかを指定します。
character-expression は次の引き数のいずれかを指定することができます。
表 10-47 READ 文 : ADVANCE= の値
'YES'
前進書式付き順番探査入出力を使
用します ( デフォルト )。
'NO'
停留書式付き順番探査入出力を使
用します。
ADVANCE 指定子を io-specifier-list で指定する場合は、unit は、書式付
き順番探査入出力用に開かれている外部ファイルに接続されていなければなり
ません。また、ADVANCE='NO' は、EOR 指定子または SIZE 指定子を並びの中
で使用している場合は指定しなければなりません。停留入出力は、並び入出力
および変数群入出力とは一緒に使用できません。
END=stmt-label
ファイル終了記録が検出された場合に、制御が移る先の実行文の文番号を指定
します。この指定子は、順番探査用に開かれているファイルを読む場合に限り
有効です。
第 10 章
443
HP Fortran 文
READ
EOR=stmt-label
記録終了条件が検出された場合に制御が移行する先の実行文の文番号を指定し
ます。この指定子を io-specifier-list 中で指定できるのは、並びの中に
ADVANCE='NO' を使用している場合に限ります。
IOSTAT=integer-variable
READ 文の実行後の入出力状態を返します。文の実行が成功した場合は、
integer-variable にはゼロが設定されます。ファイル終了記録が検出され、
エラーも検出されなかった場合、負の整数が設定されます。エラーが発生した
場合は、integer-variable には、発生したエラーを示す正の整数が設定さ
れます。
REC=integer-expression
直接探査で接続されているファイルから読み出す記録の番号を指定します。こ
の指定子は、io-specifier-list の中で、NML, ADVANCE, SIZE, EOR の各指定
子、および ( 並び入出力に対する ) FMT=* 指定子と一緒に使用することはでき
ません。
SIZE=integer-variable
READ 文によって読み込まれた文字数を返します。この指定子を
io-specifier-list の中で指定できるのは、ADVANCE='NO' も同じ並びの中
で使用している場合に限ります。
input-list
コンマで区切られた入力項目の並びです。入力項目には、変数と入出力 DO 形
反復を含めることができます。
format
次のいずれかです。
444
•
並び入出力を指定するアスタリスク (*)。
•
書式仕様を持つ FORMAT 文の文番号。
•
FORMAT 文の文番号を割り当てられたスカラ基本種別整変数。
•
文字式の書式仕様。
第 10 章
HP Fortran 文
READ
name
NAMELIST 文によってすでに定義されている変数群の名前です。変数群構文を
使用する場合、READ 文は、標準入力から入力します。接続されているファイ
ルから読み込むには、次に説明するように、長い形式で NML 指定子を使用し
なければなりません。
説明
READ 文は、外部ファイルおよび内部ファイルから内部の記憶領域にデータを転送します。外部
ファイルは、順番探査または直接探査用に開くことができます。ファイルが順番探査用に開かれ
ている場合は、READ 文は、次の種類の入出力を行うことができます。
•
書式付き
•
書式なし
•
並び
•
変数群
ファイルが直接探査用に開かれている場合は、READ 文は、書式付き入出力または書式なし入出
力を行います。
内部ファイルで動作する READ 文は、書式付き入出力または並び入出力を行います。
例
次の例では、READ 文のいくつかの使用法を示します。
書式付き順番入出力
次の READ 文は、入出力 DO 形反復を使用してデータを配列の x_array に読み込むことによっ
て、順番探査用に開いたファイルから書式付き記録を 10 個読み込みます。配列を満たす前に
ファイル終了記録が検出された場合は、実行制御は文番号 99 の文に移ります。
READ (41, '(F10.2)', END=99) (x_array(i),i=1,10)
停留入出力
次の READ 文は、順番探査用に開かれ、装置 9 に接続されているファイルから入力します。変数
key に整数を読み込むのに停留入出力を使用します。実行終了前に記録終了条件を READ 文が
検出した場合、制御は文番号 100 の実行文に移ります。文の実行後、読み込まれた文字数は cnt
に格納されます。
INTEGER :: key
READ (UNIT=9, '(I4)', ADVANCE='NO', SIZE=cnt, EOR=100) key
第 10 章
445
HP Fortran 文
READ
内部ファイル
次の文は、内部ファイルの cfile から文字列を入力し、文字式の書式仕様を使用し形式変換を
行った結果を変数の i と x に格納します。
READ (cfile, FMT='(I5, F10.5)') i, x
変数群入出力
次の例の 4 つの READ 文はそれぞれ、まったく同じことを行うために別の構文のスタイルを使用
しています。
NAMELIST /nl/ a, b, c
READ (UNIT=5, NML=nl) ! 5 = standard input
READ (5, nl)
READ (*, NML=nl) ! * = standard input
READ nl ! assume standard input
並び入出力
次の文は、標準入力からデータを入力し、変換された値を int_var に格納します。形式変換は、
int_var の型に基づきます。
READ *, int_var
書式が分かっている場合は、アスタリスクの代わりに次のいずれかを使用できます。
•
次のような書式仕様を持つ FORMAT 文の文番号。
READ 100, int_var
100 FORMAT(I4)
•
次のような文字式の書式仕様。
READ '(I4)', int_var
書式なし直接探査入出力
次の文は、装置 31 に接続されているファイルからデータを入力します。REC 指定子は、ファイ
ルが直接探査用に開かれていること、およびこの文が、変数 rec_num にその番号が格納されて
いる記録を読み込むことを指示します。入出力エラーが文の実行中に発生した場合は、エラー番
号が ios に格納され、実行制御は文番号 99 の実行文に飛び越します。
READ (31, REC=rec_num, ERR=99, IOSTAT=ios) a, b
関連文
CLOSE, OPEN, および WRITE
446
第 10 章
HP Fortran 文
READ
関連概念
ファイルおよび異なる種類の入出力の説明を含め、入出力概念についての詳細は、199 ページの
第 8 章 「入出力およびファイル処理」を参照してください。この章には、入出力を使用するプ
ログラム例もあります。入出力の書式については、233 ページの第 9 章 「入出力の編集」を参
照してください。
第 10 章
447
HP Fortran 文
REAL
REAL
実数型の言語要素を宣言します。
構文
REAL [kind-spec] [[, attrib-list] ::] entity-list
kind-spec
entity-list 中の要素の範囲と有効桁数を指定する種別型パラメータです。
kind-spec は、次の形式を取ります。
([KIND=]kind-param)
ここで kind-param は、整数値の 4, 8, または 16 を持つ名前付き定数か、定
数式です ( 基本種別の大きさは 4 です )。
拡張機能として、kind-spec は次の形式を取ることができます。
* len-param
ここで len-param は、4, 8, または 16 の整数です ( 省略時の大きさは 4
です )。
attrib-list
次のコンマで区切られた 1 つ以上の属性の並びです。
表 10-48 REAL 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
PRIVATE
DIMENSION
OPTIONAL
PUBLIC
EXTERNAL
PARAMETER
SAVE
INTENT
POINTER
TARGET
attrib-list が存在する場合、2 重コロンを後に付けなければなりません。
各属性については、本章の対応する文を参照してください。
entity-list
コンマで区切られた言語要素の並びです。各言語要素は次の形式を取ります。
name [( array-spec )] [ = initialization-expr ]
448
第 10 章
HP Fortran 文
REAL
ここで name は、変数または関数の名前、array-spec はコンマで区切られた
上下限の次元の並び、および initialization-expr は実定数式です。
initialization-expr が存在する場合、entity-list の前に 2 重コロンが
付きます。
説明
REAL 文は、数学上の実数を近似するデータの長さと特性を宣言するために使用します。種別型
パラメータは ( 存在する場合は )、表現方法を指示します。
REAL 文は、すべての実行文より前に宣言するという、型宣言文の規則を適用しています。
移植性に関する拡張として、HP Fortran では、要素の長さを指定するため次の構文を許してい
ます。
name [*len] [( array-spec )] [= initialization-expr]
(array-spec) を指定する場合は、*len は、(array-spec) の前後どちら側にでも使用してか
まいません。name を *len とともに指定すると、長さは、REAL*size で指定した長さを無効に
します。
例
次は、有効な宣言文です。
REAL, TARGET :: x, y
REAL(KIND=16) :: z
REAL(4), PARAMETER :: pi=3.14
! initialize an array, using an array constructor
REAL, DIMENSION(4) :: rvec=(/ 1.1,2.2,3.3,4.4 /)
! use the slash notation (an HP extension) to initialize
REAL x/2.87/, y/93.34/, z/13.99/ ! note, no double colon
! the following declarations are equivalent; the second uses the
! HP length specification extension
REAL (KIND = 8) x
REAL*4 x*8
関連文
DOUBLE PRECISION
関連概念
関連情報については、次を参照してください。
第 10 章
449
HP Fortran 文
REAL
•
102 ページの「組み込み型の型宣言」の項
•
107 ページの「暗黙の型宣言」の項
•
54 ページの「配列宣言」の項
•
70 ページの「配列構成子」の項
•
78 ページの「式」の項
•
583 ページの「KIND(X)」の項
450
第 10 章
HP Fortran 文
RECORD ( 拡張 )
RECORD ( 拡張 )
定義済みの構造体の記録を宣言します。
構文
RECORD /struct-name/rec-name [, rec-name]...
[/struct-name/rec-name [, rec-name ] ]...
struct-name
構造体定義の中ですでに宣言されている構造体の名前です。
rec-name
記録名です。
説明
HP Fortran は、RECORD 文を、互換性を保証する拡張としてサポートします。新しいプログラム
では、Fortran 90 の標準機能の構造型を使用してください。構造型についての詳細は、117 ペー
ジの「構造型」の項および 489 ページの「TYPE ( 定義 )」の項を参照してください。
RECORD 文は、STRUCTURE 文によってすでに定義されている構造体に対する記録変数を宣言しま
す。記録変数は、「欄」と呼ばれる複数のデータ項目から構成されています。STRUCTURE 文につ
いては、469 ページの「STRUCTURE ( 拡張 )」の項で説明しています。
記録欄を参照する
記録中の欄の参照構文は、その欄自身が別の記録 ( 合成参照 ) であるか、そうでないか ( 単純参
照 ) によります。合成参照の構文は次のとおりです。
rec-name [. substruct-fieldname]...
単純参照の構文は次のとおりです。
rec-name [. substruct-fieldname]... simple-fieldname
rec-name
記録の名前です。その中で、合成欄または単純欄が参照されます。
substruct-field-name
場合に応じて、構造体の入れ子の名前または記録欄の入れ子の名前です。
simple-field-name
型宣言文で定義される、一番下位レベルの欄の名前です。構文でも分かるよう
に、欄は構造体の入れ子のまたは記録の入れ子の一部でもかまいません。
第 10 章
451
HP Fortran 文
RECORD ( 拡張 )
次は、構造体定義と記録宣言の例です。
STRUCTURE /abc/
REAL a, b, c(5)
STRUCTURE /xyz/ xyz, xyzs(5)
INTEGER
x, y, z(3)
END STRUCTURE
END STRUCTURE
RECORD /abc/ abc, abcs(100)
RECORD /xyz/ xyz
次は合成参照です。
abc
!composite record references
abcs(1)
xyz
abcs(idx)
abc.xyz !composite field references
abc.xyzs(3)
次は単純参照です。
abc.a
abc.c(1)
xyz.x
xyz.z(1)
abc.xyz.x
abcs(idx).xyz.y(1)
abcs(2).xyzs(3).z(1)
合成参照は、記録全体に対する参照か、構造体または記録自身の記録欄の参照のどちらでもかま
いません。
記録欄の規則
記録の配列は、次のように作成されます。
RECORD /student/ students(1000)
または
RECORD /student/ students
DIMENSION students (1000)
どちらの場合も、構造体 student の students と呼ばれる 1000 の記録配列が宣言されます。
452
第 10 章
HP Fortran 文
RECORD ( 拡張 )
記録は、共通ブロックに置くことができます。次のコードは ( 前に宣言した ) students 配列を、
変数の a, b, および c と一緒に共通ブロックの frosh に置きます。
COMMON /frosh/ a, b, c, students
単純欄参照は、変数を指定できるところであればどこにでも使用できます。次は、構造体
struct の記録 r の欄に値を割り当てています。
STRUCTURE /struct/
INTEGER
i
REAL
a
END STRUCTURE
RECORD /struct/ r
r.i = r.i + 1
r.a = FLOAT(r.i) - 2.7
合成代入は、同じ構造体の、2 つの記録または 2 つの合成欄に対して許されています。すなわ
ち、両記録に対する記録宣言文は、同じ struct-name を指定しなければなりません。たとえば、
次は正しいコードです。
STRUCTURE /string/
BYTE len
CHARACTER*1 str(254)
END STRUCTURE
RECORD /string/ str1, str2
str1 = str2
次の例も正しく、合成代入を使用して、構造体 date の記録 edate の値を、記録 event の中の
同じ構造体 (when) の欄に割り当てています。
STRUCTURE /event/
CHARACTER*20 desc
STRUCTURE /date/ when
BYTE month, day
INTEGER*2 year
END STRUCTURE
END STRUCTURE
RECORD /date/ edate
RECORD /event/ event
edate.month = 1
edate.day
= 6edate.year = 62
event.desc = 'Party for Joanne'
第 10 章
453
HP Fortran 文
RECORD ( 拡張 )
! composite assignment of record to field
!
of record--both have same structure
event.when = edate
次の記録が同じ構造体 ( すなわち両方の構造体の欄が同じ型、大きさ、および書式を持ちます )
であっても、構造体の名前が違うためこのコードは不正となります。
STRUCTURE /intarray/
BYTE
elem_count
INTEGER
arr(100)
END STRUCTURE
STRUCTURE /iarray/
BYTE
elem_count
INTEGER
arr(100)
END STRUCTURE
RECORD /intarray/ iarray1
RECORD /iarray/ iarray2
! The next assignment won't work. The two
!
records are not of the same structure.
iarray1 = iarray2
! Invalid
構造体と記録に対して入出力を実行する場合は、合成記録と欄参照は、書式なし入出力文の中に
限って指定することができます。書式付き、並び、または変数群の各入出力文の中では許されて
いません。ただし、単純欄参照はすべての種類の入出力文の中で指定できます。入出力について
は、233 ページの第 9 章 「入出力の編集」を参照してください。
記録名または合成欄参照は、サブルーチンまたは関数の仮引き数または実引き数のどちらでも指
定することができます。仮引き数と実引き数は、大きさ、数、型、欄の順序が等しくなければな
りません。
サブルーチンと関数に対する合成記録と欄引き数は、他の HP Fortran の引き数とまったく同じ
の参照渡しになります。
整合配列は、仮引き数を宣言する RECORD 文の中では許されています。
次のどれも欄の名前として使用してはいけません。
•
論理定数。.TRUE. および .FALSE.
•
論理演算子。.OR., .AND., .NOT. など。
•
関係演算子。.EQ., .LT., .NEQV. など。
•
定義済み演算子の名前。
454
第 10 章
HP Fortran 文
RECORD ( 拡張 )
関連文
STRUCTURE および TYPE
関連概念
関連情報については、次を参照してください。
•
117 ページの「構造型」の項
•
59 ページの「割り付け配列」の項
•
168 ページの「引き数」の項
•
153 ページの「手続き」の項
第 10 章
455
HP Fortran 文
RETURN
RETURN
副プログラムから制御を返します。
構文
RETURN [scalar-integer-expression]
scalar-integer-expression
RETURN 文が実行されたときに計算される省略可能なスカラ整数式です。どの
選択戻りを使用するかを決定します。
説明
RETURN 文は副プログラムの中だけで使用できます。
スカラ整数式は、選択戻り (1 つ以上のアスタリスク ) が、副プログラムの FUNCTION,
SUBROUTINE, または ENTRY の各文で仮引き数として指定されている場合に限り、RETURN 文で使
用することができます。副プログラムの有効域にある値 i を持つスカラ整数式は、実引き数の並
びの (*label として指定されている ) i 番目のアスタリスク引き数に戻ります。i が 1 ~ n の範
囲にない場合は選択戻りへの制御の移行は生じません。ここで n は、指定された選択戻りの仮引
き数の数です。
例
SUBROUTINE calc (y, z)
! Subroutine calc checks the range of y. If
! it exceeds the permitted range, it calls
! an error handler and stops the program
IF (y > ymax) GO TO 303
RETURN
! It returns to the caller of calc if the
! calculation proceeds to normal completion.
303 CALL err (3, ”OUT OF RANGE”)
STOP 303
END
関連文
SUBROUTINE および FUNCTION
456
第 10 章
HP Fortran 文
RETURN
関連概念
手続き呼び出しからの戻りについては、161 ページの「手続き引用から返す」の項を参照してく
ださい。
第 10 章
457
HP Fortran 文
REWIND
REWIND
ファイルをその開始位置に位置付けます。
構文
REWIND 文の構文は、次の形式のいずれかです。
•
短い形式 :
REWIND integer-expression
•
長い形式 :
REWIND (io-specifier-list)
integer-expression
順番ファイルか順番 ( シーケンシャル ) デバイスに接続されている装置です。
io-specifier-list
コンマで区切られた次の I/O 指定子の並びです。
[UNIT=]unit
順番探査用で外部ファイルが接続されている装置を指定します。unit は、0
より大きい数になるスカラ整数式でなければなりません。省略可能なキーワー
ド UNIT= を省略する場合は、unit は、io-specifier-list の中の最初の項
目でなければなりません。
ERR=stmt-label
文の実行中にエラーが発生した場合に、制御が移行する先の実行文の文番号を
指定します。
IOSTAT=integer-variable
文の実行後に、入出力状態を返します。文の実行が成功した場合は、
integer-variable にはゼロが設定されます。エラーが発生した場合は、ど
のエラーが発生したかを示す正の整数が設定されます。
458
第 10 章
HP Fortran 文
REWIND
説明
REWIND 文は、指定した装置に接続されているファイルの開始位置に位置付けます。ファイルが
すでにその開始位置に位置している場合、またはファイルが装置に接続されていない場合は、
REWIND 文は何もしません。
例
次の例の REWIND 文では、装置 10 に接続されているファイルをその開始位置に戻します。
REWIND 10
次の例では、装置 21 に接続されているファイルをその開始位置に戻します。文の実行中にエ
ラーが発生した場合は、制御は文番号 99 の文に移り、エラーコードが、ios に返されます。
REWIND (21, ERR=99, IOSTAT=ios)
関連文
BACKSPACE, ENDFILE, および OPEN
関連概念
入出力概念については、199 ページの第 8 章 「入出力およびファイル処理」を参照してくださ
い。この章には、入出力を実行するプログラム例があります。
第 10 章
459
HP Fortran 文
SAVE ( 文および属性 )
SAVE ( 文および属性 )
静的メモリーに変数を保存します。
構文
SAVE 属性を使用した型宣言文の構文は、次のとおりです。
type , attrib-list :: save-list
type
有効な型宣言 (INTEGER, REAL、LOGICAL, CHARACTER, TYPE(name) など ) で
す。
attrib-list
コンマで区切られた属性の並びです。SAVE およびそれと一緒に使用できる次
の省略可能な属性が含まれます。
表 10-49 SAVE 文 : 利用可能な属性
ALLOCATABLE
PRIVATE
TARGET
DIMENSION
PUBLIC
VOLATILE
POINTER
STATIC
save-list
コンマで区切られた保存するオブジェクトの名前の並びです。
SAVE 文の構文は次のとおりです。
SAVE [[::] save-list]
説明
SAVE 文および SAVE 属性は、手続きが起動されると必ず、サブルーチンまたは関数の中のオブ
ジェクトを動的割り付けメモリーではなく静的メモリーの中に保存します ( デフォルトの場合 )。
保存されるオブジェクトは、その値と定義、結合、および割り付け状態を、そのオブジェクトが
宣言されているプログラム単位を呼び出しても保持します。
save-list を省略すると、有効域の中の保存可能なものが、すべて保存されます。この場合、
他の明示的な SAVE 属性または SAVE 文の指定は許されていません。
次の項目に対する名前を save-list の中で指定できます。
•
460
スカラ変数
第 10 章
HP Fortran 文
SAVE ( 文および属性 )
•
配列
•
名前付き共通ブロック
•
構造型のオブジェクト
•
記録
save-list の中に共通ブロックの名前を指定する場合は、スラッシュで区切らなければなりま
せん ( たとえば、/my_block/)。名前付き共通ブロック内の変数はすべて保存されます。ある共
通ブロックを 1 つのプログラム単位で保存する場合は、その共通ブロックは、指定しているとこ
ろでは ( 主プログラムを除いて ) すべてのプログラム単位で保存しなければなりません。
HP Fortran は、すべての共通ブロックを保存します。
次の項目は、save-list の中に指定してはいけません。
•
仮引き数名
•
手続き名
•
共通ブロック内の選択された項目
•
AUTOMATIC 文または AUTOMATIC 属性で宣言されている変数
•
関数の結果名
•
自動割り付けデータオブジェクト名 ( 自動割り付け配列、割り付け配列、自動割り付け文字
列、Fortran 90 ポインターなど )
DATA 文または型宣言文の中の変数を初期化すると、その変数は、SAVE 属性を暗黙的に持ちま
す。ただし、初期値設定副プログラムの中の名前付き共通ブロックの中にある変数はそうなりま
せん。
主プログラム単位中の SAVE 文は意味がありません。
例
次の例の SAVE 文は、変数の a, b, および c とともに、共通ブロック dot 中の変数も保存します。
SUBROUTINE matrix
SAVE a, b, c, /dot/
RETURN
次の例の SAVE 文は、サブルーチン fixit 中の変数すべての値を保存します。
SUBROUTINE fixit
SAVE
RETURN
第 10 章
461
HP Fortran 文
SAVE ( 文および属性 )
関連文
AUTOMATIC および STATIC
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
•
161 ページの「再帰的引用」の項
• 『HP Fortran プログラマーガイド』の自動割り付け変数と静的割り付け変数に関する情報
462
第 10 章
HP Fortran 文
SELECT CASE
SELECT CASE
CASE 構文を開始します。
構文
[construct-name :] SELECT CASE (case-expr)
construct-name CASE 構文に与えられた名前です。
case-expr
整数型、文字型、論理型のスカラ式です。
説明
CASE 構文の最初の文である SELECT CASE 文は、case-expr を計算し、場合指標を算出します。
CASE 構文は、場合指標を使用して、ブロックのどれを実行するかを決定します。
construct-name を指定する場合は、END SELECT 文の中にも指定しなければなりません。
例
SELECT CASE 文の例については、292 ページの「CASE」の項を参照してください。
関連文
CASE および END ( 構文 )
関連概念
CASE 構文については、134 ページの「CASE 構文」の項を参照してください。
第 10 章
463
HP Fortran 文
SEQUENCE
SEQUENCE
構造型オブジェクトの成分の記憶列を連続化します。
構文
SEQUENCE
説明
SEQUENCE 文は、任意の構造型定義内に 1 度だけ指定できます。その使用によって、成分の記憶
列が定義順と同じになるように指定されます。定義に SEQUENCE 文を含んだ構造型は、列構造型
となります。列構造型は次のいずれかの目的に使用されます。
•
列構造型のオブジェクトが COMMON 文および EQUIVALENCE 文と結合された記憶領域となるこ
とを可能にします。
•
参照結合または親子結合なしに実引き数と仮引き数の型を同じにします。構造型の対応する
実引き数および仮引き数は、構造体オブジェクトが同じ型定義を参照している場合は同じ構
造型になるか、または次の条件がすべて成立する場合は同じ型になります。
— 同じ名前の違う型定義を参照している。
— 定義中に SEQUENCE 文を持つ。
— 成分が同名、同型で同じ順である。
— どの成分も公開的な型でも、公開的な参照を持つ型でもない。
次の制限条項は、SEQUENCE 文の使用に適用されます。
•
構造型の定義に書かれる SEQUENCE 文は 1 つだけです。
•
構造型定義に SEQUENCE 文が含まれる場合、構造型の各成分にも SEQUENCE 文が含まれなけれ
ばなりません。
例
TYPE weather
! weather is a sequence derived type with two
! character components and two integer components
SEQUENCE
CHARACTER(LEN=32) place
464
第 10 章
HP Fortran 文
SEQUENCE
INTEGER high_temp, low_temp
CHARACTER(LEN=16) conditions
END TYPE weather
関連文
TYPE, COMMON, および EQUIVALENCE
関連概念
列構造型については、119 ページの「列構造型」の項を参照してください。
第 10 章
465
HP Fortran 文
STATIC ( 文、属性、拡張 )
STATIC ( 文、属性、拡張 )
変数および配列に静的記憶領域を与えます。
構文
STATIC 属性を使用した型宣言文の構文は次のとおりです。
type, attribute-list :: entity-list
type
99 ページの第 5 章 「データ型およびデータオブジェクト」の説明のとおり、
有効な型宣言 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE (name) など ) で
す。
attribute-list コンマで区切られた属性の並びです。STATIC およびそれと一緒に使用できる
次の省略可能な属性が含まれます。
表 10-50 STATIC 文 : 利用可能な属性
ALLOCATABLE
PRIVATE
DIMENSION
SAVE
POINTER
TARGET
entity-list
VOLATILE
コンマで区切られた変数と配列の並びです。
STATIC 文の構文は、次のとおりです。
STATIC [::] entity-list
説明
STATIC 文および STATIC 属性は、HP Fortran の拡張です。STATIC 属性を持つ変数は、プログ
ラムの実行中にその記憶領域を保持します。したがって、手続き内で宣言されている STATIC 変
数は、手続きの呼び出しの間でもその値を維持します。
STATIC 文およびその属性は、SAVE 文およびその属性と同じ機能性を持ちます。他社の Fortran
90 との互換性を提供します。
466
第 10 章
HP Fortran 文
STATIC ( 文、属性、拡張 )
例
SUBROUTINE work_out(first_call)
LOGICAL first_call
INTEGER, STATIC :: ncalls
IF (first_call) ncalls = 0
ncalls = ncalls + 1
! record how often work_out is called
...
END SUBROUTINE work_out
関連文
AUTOMATIC および SAVE
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」の項
• 『HP Fortran プログラマーガイド』の自動割り付け変数と静的割り付け変数に関する情報
第 10 章
467
HP Fortran 文
STOP
STOP
プログラムの実行を終了させます。
構文
STOP [stop-code]
stop-code
スカラ文字定数、名前付き定数、または 5 桁までの数字の並びです。
説明
STOP 文は、プログラム実行を終了させ、標準エラーメッセージを出力します。
STOP 文はまた、STOP 文に数字、文字が指定されているかどうか、または、何か指定されている
か否かにより、メッセージを標準エラーに送ります。
•
数字が指定されている場合は、メッセージ “STOP digits” が標準エラーに書き込まれます。
•
スカラ文字式が指定されている場合は、メッセージ “STOP character-expression” が標準
エラーに書き込まれます。
•
STOP の後に何の指定もない場合は、標準エラーには何も書き込まれません。
例
IF (b .LT. c) STOP 'BAD VALUE!'
関連文
PAUSE
関連概念
フロー制御文についての詳細は、142 ページの「フロー制御文」の項を参照してください。
468
第 10 章
HP Fortran 文
STRUCTURE ( 拡張 )
STRUCTURE ( 拡張 )
名前付き構造体を定義します ( 拡張 )。
構文
STRUCTURE /struct-name/
field-def
...
END STRUCTURE
struct-name
スラッシュで囲まれた構造体の名前です。struct-name は後で記録を宣言す
るために使用できます。
field-def
欄の定義です。
説明
HP Fortran は、STRUCTURE 文を互換性の拡張としてサポートします。新規に作成するプログラ
ムは、Fortran 90 の標準機能である構造型を使用すべきです。構造型は名前付き構造体と同じ機
能をサポートします。構造型についての詳細は、117 ページの「構造型」の項および 486 ページ
の「TYPE ( 宣言 )」の項を参照してください。
STRUCTURE 文は、構造体の欄の型、大きさ、レイアウトを定義し、構造体に名前を割り当てま
す。構造体が一度定義されると、その構造体の記録を RECORD 文を使用して宣言でき、その記録
の欄を操作することもできます。
構造体の定義は、それが定義されたプログラム単位にのみ属します。たとえば、主プログラム単
位では構造体を定義できないので、構造体の記録を副プログラム単位で宣言します。その代わ
り、副プログラム単位でその構造体を明示的に再定義しなければなりません。
field-def は、次のいずれかです。
•
型宣言文
•
構造体定義の入れ子
•
記録宣言の入れ子
•
共用体定義
欄定義の各型は、後述の項で説明します。
型宣言としての欄定義
第 10 章
469
HP Fortran 文
STRUCTURE ( 拡張 )
最も単純なレベルでは、field-def は型宣言文とすることができます。このように field-def
は、指定できる唯一の属性が DIMENSION 属性であることを除き、Fortran 90 規格の型宣言文
と同じ構文を持ちます。型宣言文で定義した変数は、欄と呼ばれます。
次のコードは、単純な型宣言文を使用して、date という名前の付いた構造体を定義します。こ
の構造体には 3 つの欄、すなわち BYTE 型の month と day、および INTEGER(KIND=2) 型の
year があります。
STRUCTURE /date/
BYTE :: month, day
INTEGER(KIND=2) :: year
END STRUCTURE
構造体定義の型宣言文は、次の例のような欄に任意に初期値を定義できます。
STRUCTURE /xyz/
REAL :: x = 1.0, y = 2.0, z = 3.0
END STRUCTURE
これ以降は、構造体 xyz のすべての宣言された記録は、その x, y, z 欄がそれぞれ 1.0, 2.0, 3.0 に
初期設定されます。次の例を検討します。
RECORD /xyz/ xyz
PRINT *, xyz.x, xyz.y, xyz.z
xyz の欄に代入文で値を何も代入していなくても、このコードは次のように出力します。
1.0 2.0 3.0
構造体定義では、暗黙の型宣言は認められていません。たとえば、次のコードはコンパイルエ
ラーを引き起こします。
STRUCTURE /dimensions/
x, y, z
! illegal
END STRUCTURE
これを正しくコーディングするには次のようにします。
STRUCTURE /dimensions/
REAL(KIND=8) :: x, y, z
END STRUCTURE
! legal
欄の型宣言文は、次のように配列を定義することもできます。
STRUCTURE /foo_bar/
INTEGER foo(10)
END STRUCTURE
または、Fortran 90 の構文を使用すると次のようになります。
470
第 10 章
HP Fortran 文
STRUCTURE ( 拡張 )
STRUCTURE /foo_bar/
REAL, DIMENSION(30, 50) :: bar
END STRUCTURE
配列の次元は、どんな場合でも型宣言文の中に現れなければなりません。DIMENSION 文 ( ただし
DIMENSION 属性は別 ) は、構造体定義の中に指定することはできません。次のコードは、
string 構造体を定義します。この構造体は型宣言文を使用して、CHARACTER(LEN=1) 型の配列
欄 str を定義し、254 個の要素を持ちます。
STRUCTURE /string/
CHARACTER(LEN=1) :: str(254)! Contains string
INTEGER :: length
! string’s length
END STRUCTURE
すでに述べたように、DIMENSION 文は構造体定義では使用できません。たとえば、次のコード
はコンパイル時エラーが発生します。
STRUCTURE /real_array/
REAL :: rarray
DIMENSION arr(100)
END STRUCTURE
! illegal example
これを正しくコーディングするには次のようにします。
STRUCTURE /real_array/
REAL :: rarray(100)
END STRUCTURE
または、
STRUCTURE /real_array/
REAL, DIMENSION(100) :: arr
END STRUCTURE
大きさ引き継ぎ配列と整合配列も、構造体定義の中に指定することはできません。たとえば、次
の例は誤りです。
STRUCTURE /assumed_size/ ! illegal example
CHARACTER*(*) :: carray
END STRUCTURE
次の例も誤りです。
STRUCTURE /adj_array/
INTEGER :: size
REAL :: iarray(size)
END STRUCTURE
第 10 章
! illegal example
471
HP Fortran 文
STRUCTURE ( 拡張 )
データの割り付け境界合わせのために、HP Fortran は %FILL 欄名を提供します。これによりプ
ログラマーは、記録をパディングして適切なデータの割り付け境界合わせが可能になります。こ
のパディングは名前を持たないので、参照することはできません。たとえば、次の構造体
sixbytes は、6 バイトの構造体を作り出しますが、そのうち 4 バイトは参照できない補ったバ
イトです。
STRUCTURE /sixbytes/
INTEGER(KIND=2) :: twobytes
CHARACTER(LEN=4) :: %FILL
END STRUCTURE
%FILL はどの型でもよく、1 つの構造体の中で 2 度以上書くことができます。
%FILL は通常の使用法では不要です。コンパイラは自動的にパディングを加えて、適切な割り付
け境界合わせをします。
構造体の入れ子
field-def 自身が、構造体の入れ子と呼ばれる構造体定義になることができます。構造体定義
の入れ子の構文は次のとおりです。
STRUCTURE /struct-name/struct-field-list
field-def
...
END STRUCTURE
struct-name
構造体の名前 ( スラッシュで区切られています ) であり、後で記録を宣言する
のに使用できます。
struct-field-list 入れ子の 1 つ以上の構造体欄名のコンマで区切られた並びです。
field-def
注記
次の標準の欄定義 ( 構造体欄の入れ子でないものと同じように定義されます )
を 1 つにすることができます。
•
型宣言文
•
別の構造体の入れ子
•
記録の入れ子
•
共用体定義
構造体定義は複数レベルの入れ子を許していることに注意してください。
構造体定義の入れ子は、2 つの点を除いて、構造体定義の入れ子でないものと同じです。
472
第 10 章
HP Fortran 文
STRUCTURE ( 拡張 )
•
/struct-name/ は、構造体の入れ子では省略可能です。
•
構造体定義の入れ子は、1 つ以上の構造体欄名の並び (struct-field-list) を持たなければ
なりません。
/struct-name/ が構造体定義の入れ子に存在する場合は、構造体 struct-name もその後の記録
宣言に使用できます。たとえば、次のコードは person という名前の構造体を定義し、その構造
体は name という名前の構造体の入れ子を持ちます。構造体の欄名は nm で、3 つの
CHARACTER*10 欄、すなわち last, first, mid を持ちます。
STRUCTURE /person/
INTEGER :: person_id
! Define the nested structure 'name' with the field name 'nm'.
STRUCTURE /name/ nm
CHARACTER(LEN=10) :: last, first, mid
END STRUCTURE
END STRUCTURE
この定義を与えると次のコードが、構造体 person の記録 p と、構造体 name の記録 n を定義し
ます。
RECORD /person/p
RECORD /name/n
/struct-name/ が存在しない場合は、その構造体はこの宣言においてのみ使用できます。たとえ
ば、person 構造体を再定義して、構造体の入れ子が名前を持たないようにします。
STRUCTURE /person/
INTEGER :: person_id
STRUCTURE nm
CHARACTER(LEN=10) :: last, first, mid
END STRUCTURE
END STRUCTURE
構造体の入れ子の別々の記録を宣言することは、それぞれが名前を持っていないのでできませ
ん。しかし、その構造体の入れ子は依然として欄名 nm を持っていることに注意してください。
その欄名は必要です。
構造体の入れ子の配列を宣言するためには、構造体の欄名を持つ次元の宣言子を単純に指定して
ください。たとえば、次の構造体定義は、構造体 phone の欄名 phones を持つ構造体の入れ子の
3 要素の配列を持っています。
STRUCTURE /person/
INTEGER :: person_id
! Define the nested structure 'name' with the field name 'nm'.
STRUCTURE /name/ nm
第 10 章
473
HP Fortran 文
STRUCTURE ( 拡張 )
CHARACTER(LEN=10) :: last, first, mid
END STRUCTURE
! Nested array of structures.
STRUCTURE /phone/ phones(3)
INTEGER(KIND=2) :: area_code
INTEGER :: number
END STRUCTURE
END STRUCTURE
記録の入れ子
field-def は、記録の入れ子と呼ばれる記録宣言にできます ( 記録宣言の説明については、451
ページの「RECORD ( 拡張 )」の項を参照 )。記録の入れ子の宣言は、定義済みの構造体を使用
しなければなりません。次のコードは、最初に構造体 date を定義します。その後、構造体
event を宣言します。この構造体は、構造体 date の記録の入れ子 when を持ちます。
STRUCTURE /date/
BYTE :: month, day
INTEGER :: year
END STRUCTURE
STRUCTURE /event/
CHARACTER :: what, where
RECORD /date/ when
END STRUCTURE
構造体定義は、記録の入れ子の配列を宣言することもできます。たとえば、次のコードは、構造
体 event の記録の 100 要素配列を持つ構造体 calendar を定義します。
STRUCTURE /calendar/
! number of events
INTEGER(KIND=2) :: event_count
RECORD /event/ events(100) ! array of event records
END STRUCTURE
共用体
field-def を、複数のマップブロックがメモリー空間を共有する構造体の入れ子の 1 形式であ
る共用体とすることができます。UNION と MAP 文が一緒になって共用体を定義します。共用体
定義の構文は次のとおりです。
474
第 10 章
HP Fortran 文
STRUCTURE ( 拡張 )
UNION
map-block
map-block
...
END UNION
ここでマップブロックは、MAP 文と 1 つ以上の欄定義により定義されます。囲む UNION 文の中
の全マップブロックは、1 つの記録内で同じメモリー空間を共有します。マップブロックを定義
する構文は、次のとおりです。
MAP
field-def
...
END MAP
ここで field-def は、次のいずれかにすることができます。
•
型宣言文
•
別の構造体の入れ子
•
記録の入れ子
•
共用体定義
構造体定義は複数レベルの入れ子を許していることに注意してください。
C または Pascal に通じているプログラマーにとって HP Fortran の共用体は、C の共用体と
Pascal の変形記録に似ています。HP Fortran の共用体は C の共用体と、構造体定義の内部で定
義しなければならない点が異なります。
次の構造体は、2 つのマップブロックを持つ共用体を持っています。最初のものは整数欄 int
を、2 番目のものは実数欄 float を持っています。
STRUCTURE /var/
INTEGER :: type
! 1=INTEGER, 2=REAL
UNION
MAP
INTEGER :: int
END MAP
MAP
REAL :: float
END MAP
END UNION
END STRUCTURE
v という名前のこの構造体の記録を宣言するには、次の RECORD 文を使用してください。
第 10 章
475
HP Fortran 文
STRUCTURE ( 拡張 )
RECORD /var/ v
記録 v の宣言には、8 バイトの記憶領域が確保されます。4 バイトが type 欄用で、4 バイトが
int と float によって共有されます。int 欄を使用してその 4 バイトを参照する場合、整数と解
釈されます。float 欄を使用する場合は、実数と解釈されます。
共用体内の各欄に適切な値を確実に代入することは、プログラマーの責任です。たとえば、v の
前に宣言を指定すれば、次の代入は意味をなします。
v.type =1 ! set the type to integer
! access the storage shared by 'int' and 'float' as an integer
v.int = 3
対照的に次のコードは、エラーなしにコンパイルできますが、予期しない結果をもたらします。
v.type = 1 ! set the type to integer
! the next statement contradicts the previous statement
v.float = 3.14
マップブロックに値が一度代入されると、すべての他のマップブロックは不定になります。その
理由はすべてのマップブロックが共用体内でメモリー空間を共有するからであり、したがって、
もう 1 つのマップブロックの欄に値を代入すると、マップブロックの値が変更されたことになり
ます。次の struct と呼ばれる構造体の定義と、rec と呼ばれる記録の宣言を検討します。
STRUCTURE /struct/
UNION
MAP
CHARACTER*8 :: s
END MAP
MAP
CHARACTER*1 :: c(8)
END MAP
END UNION
END STRUCTURE
RECORD /struct/ rec
s 欄に次の代入を行います。
rec.s = 'ABCDEFGH'
次に、次の 2 つの PRINT 文を実行します。
PRINT *, rec.s
PRINT *, rec.c
出力内容は次のとおりです。
476
第 10 章
HP Fortran 文
STRUCTURE ( 拡張 )
ABCDEFGH
ABCDEFGH
次に、c 欄に値を設定して、両方の欄を再度表示します。
rec.c(1)
rec.c(8)
PRINT *,
PRINT *,
= '1'
= '8'
rec.s
rec.c
出力内容は次のとおりです。
1BCDEFG8
1BCDEFG8
直接には新しい値が代入されていないにもかかわらず、s 欄がどのように変わったかに注意して
ください。これは s 欄と c 欄が共用体の中で同じ記憶空間を共有した結果です。これは有効な
コーディングであり、コンパイル時または実行時のエラーは引き起こしませんが、予期しない結
果を引き起こすことはあります。
しかし、自分のために共有メモリーマッピングを使用することもできます。マップブロックが共
用体の中で空間を共有することによって、記録の中のデータを結合するのに共用体が役に立つこ
とがあります。たとえば、次の構造体は 4 バイト語で個々のバイトの選択をオフにするのに使用
できます。
STRUCTURE /wordmask/
UNION
MAP
INTEGER(KIND=4) :: word
END MAP
MAP
BYTE :: byte0, byte1, byte2, byte3
END MAP
END UNION
END STRUCTURE RECORD /wordmask/ maskrec
maskrec の word 欄に値を代入する場合、欄 byte0, byte1, byte2, byte3 を見ることによって、
maskrec の全 4 バイトの個々の値を入手できます。その整変数 word が、バイト変数 byte0,
byte1, byte2, byte3 にどのようにマップされているかを見るには、次の文を使用してくださ
い。
maskrec.word = 32767
WRITE(*, fmt=100) 'word
WRITE(*, 200) 'byte 0 =
WRITE(*, 200) 'byte 1 =
WRITE(*, 200) 'byte 2 =
第 10 章
= ', maskrec.word
', maskrec.byte0
', maskrec.byte1
', maskrec.byte2
477
HP Fortran 文
STRUCTURE ( 拡張 )
WRITE(*, 200) “byte 3 = ', maskrec.byte3
100 FORMAT(A, Z8.8)
200 FORMAT(A, Z2.2)
このコードは次の出力を表示します。
word
byte
byte
byte
byte
=
0
1
2
3
00007FFF
= 00
= 00
= 7F
= FF
このコードは、特定の語の大きさに依存しているので、本質的に移植はできません。
関連文
RECORD および TYPE
関連概念
構造型については、117 ページの「構造型」の項を参照してください。
478
第 10 章
HP Fortran 文
SUBROUTINE
SUBROUTINE
SUBROUTINE 文は、サブルーチン副プログラムの定義を開始します。
構文
[RECURSIVE] SUBROUTINE subr-name [([dummy-arg-list])]
subr-name
サブルーチンの名前です。
dummy-arg-list 仮引き数名またはアスタリスク文字 (*) のコンマで区切られたゼロ個以上の並
びです。
構文で示すように、仮引き数を囲むカッコは仮引き数がなければ省略できま
す。
説明
SUBROUTINE 文によりサブルーチン副プログラムは始まります。
サブルーチンは次の規則と制限条項に従う必要があります。
•
サブルーチンは、外部プログラム、モジュール内のプログラム、内部副プログラムのいずれ
かです。
•
サブルーチンが自分自身を直接または間接に呼び出す場合は、キーワード RECURSIVE を
SUBROUTINE 文に指定する必要があります。キーワード RECURSIVE を指定すると、そのサブ
ルーチンの引用仕様はその副プログラム内で明示的になります。
•
サブルーチンが 1 つのモジュールの手続きまたは内部手続きである場合は、キーワード
SUBROUTINE が END 文になければなりません。
•
サブルーチンの仮引き数並びに書かれたアスタリスクは選択戻りを指定します。
•
内部サブルーチンの引用仕様は、その親プログラムの中で明示的です。モジュール内のサブ
ルーチンの引用仕様はそのモジュール内で明示的で、公開している場合はそのモジュールを
使用するすべてのプログラムにおいて明示的です。外部サブルーチンの引用仕様は暗黙的で
すが、引用仕様宣言を使用することで明示的にすることができます。
例
次のサブルーチンを想定します。
第 10 章
479
HP Fortran 文
SUBROUTINE
! A subroutine definition with two arguments.
SUBROUTINE exchange (x, y)
temp = x; x = y; y = temp
END SUBROUTINE exchange
SUBROUTINE altitude (*, long, lat)
! asterisk (*) indicates alternate return
IMPLICIT NONE
INTEGER, OPTIONAL :: long, lat
RETURN 1
END SUBROUTINE altitude
このサブルーチンは次のプログラムの中の CALL 文により参照できます。
PROGRAM reject
CALL exchange (a,t)
! A subroutine reference
! subroutine reference, including an alternate return label,
!
missing optional argument, and an argument keyword
CALL altitude (*90, lat = 49)
END PROGRAM reject
次に、SUBROUTINE 文の別の例を示します。
SUBROUTINE pressure_surface ! No arguments
SUBROUTINE taffy ()
! Also no arguments
RECURSIVE SUBROUTINE fact (n, x)
関連文
CALL, END, ENTRY, FUNCTION, および RETURN
関連概念
関連情報については、次を参照してください。
•
158 ページの「外部手続き」の項
•
168 ページの「引き数」の項
480
第 10 章
HP Fortran 文
TARGET ( 文と属性 )
TARGET ( 文と属性 )
TARGET 文により、変数と配列をポインターの指示先にできます。
構文
TARGET 属性を使用した型宣言文の構文は次のとおりです。
type, attrib-list :: entity-list
type
有効な型宣言 (INTEGER, REAL, LOGICAL, CHARACTER, TYPE (name) など ) で
す。
attrib-list
コンマで区切られた属性の並びであり、TARGET およびそれと整合性のある省
略可能な次の属性が含まれます。
表 10-51 TARGET 文 : 利用可能な属性
ALLOCATABLE
OPTIONAL
DIMENSION
PRIVATE
INTENT
PUBLIC
SAVE
entity-list
コンマで区切られた言語要素の並びです。各言語要素は次の形式になります。
name [(array-spec)]
name
TARGET 属性を指定する名前です。
TARGET 文の構文は次のとおりです。
TARGET
第 10 章
[::] object-name [(array-spec)]
[, object-name [(array-spec)]]...
481
HP Fortran 文
TARGET ( 文と属性 )
array-spec
表 10-52 TARGET 文 : array-spec の構文
explicit-shape-spec は、 [lower-bound :] upper-bound
assumed-shape-spec は、
[lower-bound] :
deferred-shape-spec は、 :
assumed-size-spec は、
[explicit-shape-spec-list ,]
[lower-bound :] *
すなわち、assumed-size-spec とは、最後の上限が * として与えられた
explicit-shape-spec-list です。
説明
TARGET 属性または文は、name がポインターによって指示される指示先であることを指定しま
す。指示先はスカラまたは配列のいずれかです。
TARGET 属性により、コンパイラが効率の良いコードを生成できます。これは、TARGET を指定し
たオブジェクトだけ、すなわち POINTER 属性が動的に別名付けできるからです。
ポインター代入の中の指示先が変数である場合、次のいずれかが真でなければなりません。
•
TARGET 属性を持っている
•
構造型の成分、配列変数の要素、TARGET 属性を持つ文字変数の部分列のいずれかである
•
POINTER 属性を持っている
ポインター代入の指示先が部分配列である場合、その配列は TARGET または POINTER 属性を持
つ必要があります。
例
! p is a pointer array
INTEGER, POINTER, DIMENSION(:,:) :: p
! declare t as an array with the TARGET attribute
INTEGER, TARGET :: t(10, 20, 30)
! make p point to a rank-2 section of t
p => t(10,1:10,2:5)
482
第 10 章
HP Fortran 文
TARGET ( 文と属性 )
REAL, POINTER :: nootka(:), talk(:)
REAL, ALLOCATABLE, TARGET :: x(:)
ALLOCATE (x(1:100), STAT = is)
nootka => x(51:100)
! Pointer assignment statements
talk => x(1:50)
REAL r, p1, p2
TARGET r
POINTER p1, p2
r = 4.7
! make both p1 and p2 aliases of r
p1 => r
p2 => p1
...
ALLOCATE (p1)
p1 = 9.4
関連文
POINTER, ALLOCATE, DEALLOCATE, および NULLIFY
関連概念
関連情報については、次を参照してください。
•
125 ページの「ポインター」の項
•
92 ページの「ポインター代入」の項
•
509 ページの第 11 章 「組み込み手続き」の ASSOCIATED 組み込み関数についての説明
第 10 章
483
HP Fortran 文
TASK COMMON ( 拡張 )
TASK COMMON ( 拡張 )
パラレル実行中にスレッドに対して共通ブロックが局所的であることを宣言します。
注記
TASK COMMON 文を使用するプログラムは、+Oparallel オプションまたは
+parallel オプションを指定してコンパイルしなければなりません。そうしない
と、コンパイラは TASK COMMON 文を COMMON 文として処理します。
注記
HP Fortran バージョン 3.2 以降、Integrity システム上では +Oparallel オプ
ションを使用できませんが、+Oparallel オプションの代わりに +Oautopar オプ
ションを使用できます。
構文
TASK COMMON /cbn/nlist[,/cbn/nlist...]
cbn
TASK COMMON 文で宣言される共通ブロックの英字名です。名前なし共通ブ
ロックは、TASK COMMON 文では許可されていません。
nlist
変数名、配列名、配列宣言子の並びです。これらの変数は、DATA 文では書け
ませんが、共通記憶領域では、別な方法で他の変数のように使用できます。
説明
TASK COMMON 文は Fortran 90 規格の拡張機能であり、クレイの TASK COMMON 機能を使用する
プログラムとの互換性を提供されています。TASK COMMON ブロックは、関数とサブルーチンで
のみ宣言することができます。
TASK COMMON ブロックを含むサブルーチンを呼び出す前に、プログラムは複数のスレッドを実
行している必要があります。
TASK COMMON 文は、複数のスレッドを実行するプログラムで使用されると、共通ブロックのす
べての変数がスレッド ( タスクとも呼ぶ ) に対して局所的であると宣言します。複数のスレッド
が同じ TASK COMMON ブロックを使用するコードを実行する場合、各スレッドはブロックのプラ
イベートコピーを持ちます。
TASK COMMON ブロックのすべての出現は、TASK COMMON 文によって宣言されなければなりませ
ん。共通ブロックは、COMMON 文と TASK COMMON 文の両方では宣言できません。
484
第 10 章
HP Fortran 文
TASK COMMON ( 拡張 )
関連文
COMMON
関連概念
関連情報については、次を参照してください。
•
102 ページの「組み込み型の型宣言」
•
107 ページの「暗黙の型宣言」
•
54 ページの「配列宣言」
•
70 ページの「配列構成子」
•
78 ページの「式」
第 10 章
485
HP Fortran 文
TYPE ( 宣言 )
TYPE ( 宣言 )
TYPE 文により、構造型の変数を宣言します。
構文
TYPE (type-name) [[, attrib-list] ::] entity-list
type-name
あらかじめ定義した構造型の名前です。
attrib-list
コンマで区切られた次の 1 つ以上の属性並びです。
表 10-53 TYPE 文 : 利用可能な属性
ALLOCATABLE
INTRINSIC
PRIVATE
DIMENSION
OPTIONAL
PUBLIC
EXTERNAL
PARAMETER
SAVE
INTENT
POINTER
TARGET
attrib-list が存在する場合、2 重コロンを後に付けなければなりません。
各属性については、本章の対応する文を参照してください。
entity-list
コンマで区切られた言語要素の並びです。各言語要素は次の形式になります。
name [(array-spec)] [= initialization-expr]
name
変数または関数の名前です。
array-spec
コンマで区切られた次元の上下限の並びです。
initialization-expr
構造体構成子です。
initialization-expr
存在します。
entity-list
486
第 10 章
HP Fortran 文
TYPE ( 宣言 )
2 重コロンが前に付かなければなりません。
説明
TYPE 宣言文は、構造型オブジェクトの型と属性を指定するものです。構造型オブジェクトは、
形状無指定 ( ポインターまたは割り付け )、形状引き継ぎ ( 仮引き数 )、または大きさ引き継ぎ (
仮引き数 ) のいずれかの配列になります。
代入は各構造体に対して、組み込み代入として定義されていますが、ユーザーが再定義すること
もできます。構造体に適切な演算子は、適切な引用仕様を使用した手続きにより定義できます。
構造型オブジェクトを手続き引き数として使用する場合、結合している実引き数および仮引き数
の型は同じでなければなりません。連続構造体については、両方の型定義が同一の型名、成分、
成分順序を指定していれば、異なる型定義を実引き数および仮引き数に使用できます。非連続型
については、実引き数および仮引き数の両方に対して親子結合または参照結合によって同じ物理
型定義を使用し、通常は参照しなければなりません。
例
! Weather is a simple derived type with two
!
character components and two integer components.
TYPE Weather
CHARACTER(LEN=32) Place
INTEGER High_temp, Low_temp
CHARACTER(LEN=16) Conditions
END TYPE Weather
TYPE (Weather) July(num_ws, 31)
! A two-dimensional Weather array for July
July(:,:) % Low_temp = -40
! Initialize all low temps in July
TYPE Polar
! Polar is a derived type with two real components that cannot be
! directly accessed in Polar objects outside the module
PRIVATE
REAL rho, theta
END TYPE Polar
! Point is a derived type with three components, one of which is
! itself of derived type
TYPE Point
REAL x, y
TYPE (Polar) p
第 10 章
487
HP Fortran 文
TYPE ( 宣言 )
END TYPE Point
TYPE (Polar) r, q(500)
! Two variables of type Polar
TYPE (Point) a, b, t(100,100)
! Three variables of type Point
b = Point(0.,0.,Polar(0.,0.))
! Use of nested structure constructors.
関連文
INTERFACE, PRIVATE, PUBLIC, SEQUENCE, および TYPE ( 定義 )
関連概念
構造型については、117 ページの「構造型」の項を参照してください。
488
第 10 章
HP Fortran 文
TYPE ( 定義 )
TYPE ( 定義 )
構造型の定義の最初の文。
構文
TYPE [[, access-spec ] ::] derived-type-name
access-spec
キーワード PUBLIC または PRIVATE です。
derived-type-name
Fortran 90 で許される名前です。
説明
この TYPE 文は構造型の定義を導入します。構造型名は、その有効域において組み込み型名また
は別の局所名 ( 成分名と実引き数キーワード名を除く ) と同じでない限り、Fortran 90 で許され
る任意の名前にすることができます。
構造型はモジュール内である場合のみ参照許可指定子 (PUBLIC 属性または PRIVATE 属性 )、また
は内部 PRIVATE 文を持つことができます。
例
! This is a simple example of a derived type
!
with two components, high and low.
TYPE temp_range
INTEGER high, low
END TYPE temp_range
! This type uses the previous definition for one of its
! components
TYPE temp_record
CHARACTER(LEN=40) city
TYPE (temp_range) extremes(1950:2050)
END TYPE temp_record
! This type has a pointer component to provide links to other
! objects of the same type, thus providing linked lists.
TYPE linked_list
REAL value
第 10 章
489
HP Fortran 文
TYPE ( 定義 )
TYPE(linked_list),POINTER :: next
END TYPE linked_list
! This is a public type whose components are private; defined
! operations provide all functionality.
TYPE, PUBLIC :: set; PRIVATE
INTEGER cardinality
INTEGER element ( max_set_size )
END TYPE set
! Declare scalar and array of type set.
TYPE (set) :: baker, fox(1:size(hh))
関連文
INTERFACE, PRIVATE, PUBLIC, SEQUENCE, および TYPE ( 宣言 )
関連概念
構造型については、117 ページの「構造型」の項を参照してください。
490
第 10 章
HP Fortran 文
TYPE ( 入出力 ) ( 拡張 )
TYPE ( 入出力 ) ( 拡張 )
TYPE ( 入出力 ) 文により、標準出力に書き出します。
説明
TYPE 文は、PRINT 文と同義語であり、同じ機能と構文を持っています。Fortran の旧版との互
換性のために、HP の拡張として提供されます。詳細は、433 ページの「PRINT」の項を参照し
てください。
第 10 章
491
HP Fortran 文
UNION ( 拡張 )
UNION ( 拡張 )
UNION 文により、構造体内で共用体を定義します。
構文
UNION
map-block
map-block
...
END UNION
map-block
次のいずれかです。
•
型宣言文
•
別の構造体の入れ子
•
記録の入れ子
•
共用体の定義
説明
UNION 文は HP Fortran の拡張であり、MAP 文とともに使用して、構造体内で共用体を定義しま
す。MAP および UNION 文についての詳細は、469 ページの「STRUCTURE ( 拡張 )」の項を参照
してください。
492
第 10 章
HP Fortran 文
USE
USE
USE 文により、モジュール中の言語要素に対して制御された参照ができるようにします。
構文
USE 文は次の形式のいずれか 1 つを持ちます。
•
USE module-name [, rename-list ]
•
USE module-name, ONLY : access-list
rename-list
コンマで区切られた rename の並びです。
rename
local-name => module-entity-name です。
access-list
コンマで区切られた次の並びです。
•
[local-name =>] module-entity-name
•
OPERATOR (operator)
•
ASSIGNMENT (=)
説明
USE 文により、モジュールの公開指定と定義に対して参照できるようにします。これには、宣言
された変数、名前付き定数、構造型定義、手続き引用仕様、手続き、総称識別子、変数群を含み
ます。この参照方法は、参照結合と呼ばれます。このような参照は ONLY 句を USE 文に指定する
ことにより制限したり、または参照された言語要素を仮称指定することができます。
すべての USE 文は、プログラム単位導入文の後、および他のすべての文の前になければなりませ
ん。複数の USE 文が存在でき、同じモジュールへの複数回の引用ができます。
モジュールには、他のモジュールを引用する USE 文を持つことができますが、その引用は直接的
または間接的に再帰的ではいけません。
仮称指定で局所名は宣言されません。仮称指定しようとしているモジュールの言語要素の属性を
引き継ぎます。
USE 文の最初の 2 つの形式は、USE 文がモジュールの言語要素を仮称指定する場合を除き、参照
結合によりモジュール内で参照できるすべての公開言語要素を使用可能にします。3 番目の形式
は、モジュール言語要素に可能な仮称指定を行うことによって、access-list で指定された言
語要素のみを使用可能にします。
第 10 章
493
HP Fortran 文
USE
USE 文によって参照可能になった言語要素は、引用されたモジュール内で USE 文により引用され
ている他のモジュールからの公開言語要素を含みます。
同じ名前または指定子を、複数の USE 文によって参照できるようにすることができます。このよ
うな言語要素は、個別手続きが多重定義の規則により区別できる場合を除き、USE 文を含む有効
域において引用することはできません。一方の名前への参照を制限するために、または両方を参
照できるように一方の言語要素を仮称指定するために、仮称指定または ONLY 句を使用できま
す。
例
MODULE rat_arith
TYPE rat
INTEGER n, d
END TYPE
! Make all entities public except zero.
TYPE(rat), PRIVATE, PARAMETER :: zero = rat(0,1)
TYPE(rat), PUBLIC, PARAMETER :: one = rat(1,1)
TYPE(rat) r1, r2
NAMELIST /nml_rat/ r1, r2
INTERFACE OPERATOR( + )
MODULE PROCEDURE rat_plus_rat, int_plus_rat
END INTERFACE
CONTAINS
FUNCTION rat_plus_rat(l, r)
END FUNCTION
END MODULE
PROGRAM Mine
! From the module rat_arith, access only the entities rat,
! one, r1, r2, nml_rat but use the name one_rat for the
! rational value one.
USE rat_arith, ONLY: rat, one_rat => one, r1, r2, nml_rat
! The OPERATOR + for rationals and the procedures rat_plus_rat
! and int_plus_rat are not available because of the ONLY clause
READ *, r2; r1 = one_rat
WRITE( *, NML = nml_rat)
END PROGRAM
494
第 10 章
HP Fortran 文
USE
関連文
MODULE
関連概念
モジュールについては、188 ページの「モジュール」の項を参照してください。
第 10 章
495
HP Fortran 文
VIRTUAL ( 拡張 )
VIRTUAL ( 拡張 )
配列を宣言します。
構文
VIRTUAL array-declarator-list
array-declarator-list
コンマで区切られた配列宣言子の並びです。
説明
VIRTUAL 文は、Fortran の旧版との互換性用の HP Fortran の HP 拡張です。これは DIMENSION
文に対する代替です。VIRTUAL は、型宣言文において属性の 1 つとして使用することはできま
せん。
例
VIRTUAL A(10), B(1:5,2:6)
関連文
DIMENSION
関連概念
配列については、51 ページの第 3 章 「配列」で説明しています。
496
第 10 章
HP Fortran 文
VOLATILE ( 拡張 )
VOLATILE ( 拡張 )
非同期プロセス間でのデータ共有を提供します。
構文
VOLATILE [::] object-name-list
object-name-list コンマで区切られた次の並びです。
•
variable-name
•
array-name
•
common-block-name
説明
オブジェクトを VOLATILE として宣言する必要があるのは、その値が独立した非同期プロセスま
たはイベント ( たとえば、シグナルハンドラー ) によって変更できる場合のみです。あらゆる最
適化処理は、VOLATILE 属性を持つオブジェクトに対しては禁止されています。VOLATILE とし
て宣言されたデータオブジェクトは、独立したプロセスによって別の方法でアドレシング可能で
す。
配列または共通ブロックが VOLATILE として宣言されている場合は、すべての配列要素または共
通ブロック変数が VOLATILE になります。同様に、VOLATILE オブジェクトを持つ EQUIVALENCE
を使用すると、結合しているどのオブジェクトも VOLATILE であることを意味します。
例
INTEGER alarm, trem
EXTERNAL wakeup
COMMON/FLAGS/ialarm
VOLATILE ialarm
trem = ALARM(60,wakeup) ! Set an alarm to execute in 60 seconds
wakeup
IALARM = 0
DO
IF (ialarm.NE.0) EXIT
END DO
SUBROUTINE wakeup
COMMON/flags/ialarm
第 10 章
497
HP Fortran 文
VOLATILE ( 拡張 )
VOLATILE ialarm
ialarm=1
END
498
第 10 章
HP Fortran 文
WHERE ( 文および構文 )
WHERE ( 文および構文 )
配列選別代入を実行します。
構文
WHERE (array-logical-expr) [array-assignment-statement]
省略可能な配列代入文が存在する場合、WHERE 文は構文として完全であり、END WHERE 文を必
要としません。
配列代入文が存在しない場合、WHERE 文が WHERE 構文の最初の文となります。WHERE 構文の構
文は次のとおりです。
WHERE (array-logical-expr)
array-assignment-statement
...
[ ELSEWHERE
array-assignment-statement
... ]
END WHERE
array-logical-expr
論理配列式です。
array-assignment-statement
配列代入文です。
説明
WHERE 文または WHERE 構文を使用して配列代入文中のある配列要素を選別して代入することが
できます。array-logical-expr により選別します。
配列代入におけるどのような要素の演算についても、選別によって選ばれた要素のみが処理の対
象になります。要素の演算には、通常の組み込み演算と ABS のような要素の組み込み機能が含ま
れます。配列選別代入は、配列に関わる演算も、一定の要素についてはプログラム異常のために
避けなければならないときに役立ちます。
次の規則と制限が適用されます。
•
array-logical-expr の結果と各 array-assignment-statement の配列の形状は同じでな
ければなりません。すなわち大きさをゼロにすることもできます。
第 10 章
499
HP Fortran 文
WHERE ( 文および構文 )
•
array-assignment-statement は、組み込み配列代入文でなければならず、利用者定義代
入文は許されません。
•
array-assignment-statement における各要素演算は選別式によって選別されます。
•
WHERE 部分 (WHERE キーワードの後の代入 ) で使用される配列の要素は、選別式の真の要素に
対応するものです。ELSEWHERE 部分 (ELSEWHERE キーワードの後と、ENDWHERE キーワード
の前の代入 ) で使用される配列の要素は、選別式の偽の要素に対応するものです。
•
各 array-assignment-statementは、WHERE構文の WHEREおよび ELSEWHERE部分の両方に現
れる順番で実行されます。
•
WHERE 構文では、WHERE 文のみが飛び先文になることができます。
例
REAL, DIMENSION(150) :: a, recip_a
REAL(DOUBLE), DIMENSION(10,20,30) :: b, sqrt_b
! Assign 1.0/a to recip_a only where a is nonzero
WHERE( a /= 0.0 ) recip_a = 1.0 / a
WHERE( b .GE. 0.0 )
! Assign to sqrt_b only where b is nonnegative
sqrt_b = SQRT(b)
ELSEWHERE
! Set sqrt_b to 0.0 where b is -ve.
sqrt_b = 0.0
END WHERE
INTEGER, DIMENSION(no_of_tests, student):: score
CHARACTER, DIMENSION(no_of_tests, student) :: letter_grade
! Assign letter grades for numeric scores
WHERE( score >= 92 )
letter_grade = 'A'
WHERE( score >= 82 .AND. score <= 91 ) letter_grade = 'B'
WHERE( score >= 72 .AND. score <= 81 ) letter_grade = 'C'
WHERE( score >= 62 .AND. score <= 71 ) letter_grade = 'D'
WHERE( score >= 0 .AND. score <= 61 ) letter_grade = 'E'
次の例では、配列 values, delta, count は、すべて同じ形状でなければなりません。
WHERE (ABS(values) .LT. 10.0)
values = ABS(values) + delta
count = count + 1
ELSEWHERE
500
第 10 章
HP Fortran 文
WHERE ( 文および構文 )
values = 0
count = count + 1
ENDWHERE
最初の 2 つの代入文は、その選別の真の要素に対応する要素に対して処理されます。次の 2 つの
代入文は、その選別の偽の要素に対応する要素に対して処理されます。IF 文の ELSE 句と異な
り、WHERE と ELSEWHERE の両部分の代入文が処理されます。
ABS への呼び出しの動作が異なることに注意する必要があります。選別式を評価する際には、
VALUES 配列全体が ABS に渡されて、要素が 10 と比較された結果の配列が作り出されます。し
かし代入文では、ABS は選別の真の要素に対応する VALUES の特定の要素に対して呼び出される
だけです。さらに、代入文の式において配列とスカラを混合して使用することにも注意する必要
があります。
選別式は代入文の配列と同じ形状を持つ必要がありますが、完全に別の配列を必要とすることも
あります。次の例では、すべて形状適合している限り、A, B, C は D と E から独立していることが
できます。
WHERE (a+b .EQ. c) d = SIN(e)
次の例は、依存にとって処理の順序が重要である理由を示します。
REAL a(100)
REAL b(100)
EQUIVALENCE b, a
WHERE(a(1:20:1) .GT. 0) a(20:1:-1) = -1.0
WHERE(a(61:100:2) .LT. 1) b(20:1:-1) = a(1:20:1) * 100.0
最初の WHERE 文において、その代入文で a の要素を変更すると選別式に影響すると考えるかも
しれません。しかし、その選別は代入が処理される前に評価されているので、この文の動作は明
確に定義されています。同じような状況が 2 番目の WHERE 文についても発生します。変数 b の
要素に対する代入値は、式 a * 100.0 の要素を変更します。b へ値を転送する前に、代入式は
選別の真の全要素について評価されるので、その動作は再び明確に定義されます。
重要なのは、WHERE 構文における代入文は順番に処理される、という点に注意することです。次
の例では、2 番目の代入は 1 番目のものが完全に終了するまで処理されません。このことは、2
番目の代入で使用される b の値は最初の文によって変更されることを意味します。
WHERE (SQRT(ABS(a)) .gt. 3.0)
b = SIN(a)
c = SQRT(b)
ENDWHERE
第 10 章
501
HP Fortran 文
WHERE ( 文および構文 )
関連文
END ( 構文 ) および ELSEWHERE
関連概念
関連情報については、次を参照してください。
•
51 ページの第 3 章 「配列」の配列についての説明
•
94 ページの「配列選別代入」の項
502
第 10 章
HP Fortran 文
WRITE
WRITE
外部ファイルおよび内部ファイルにデータを出力します。
構文
WRITE (io-specifier-list) [output-list]
output-list
コンマで区切られた出力用項目の並びです。この出力用項目には、式と入出力
DO 形反復を含むことができます。
io-specifier-list
コンマで区切られた次の I/O 指定子の並びです。
[UNIT=]unit
出力ファイルに接続されている装置を指定します。unit には次のいずれか 1
つを指定できます。
•
内部ファイルを示す文字変数の名前。
•
外部ファイルに接続されている装置を評価する整数式。
•
事前接続された装置 6 ( 標準出力 ) を示すアスタリスク。
省略可能なキーワード UNIT= を省略した場合は、unit が
io-specifier-list の最初の項目でなければなりません。これは
io-specifier-list で必要とされる唯一の指定子です。
[FMT=] format
データを書式付きにするために書式仕様を指定します。format には次のいず
れか 1 つを指定できます。
第 10 章
•
並び入出力を指定するアスタリスク (*)。
•
書式仕様を持つ FORMAT 文の文番号。
•
FORMAT 文の文番号が代入された整変数。
•
文字式の書式仕様。
503
HP Fortran 文
WRITE
省略可能なキーワード FMT= を省略した場合、format は io-specifier-list
の 2 番目の項目でなければなりません。
注記
NML 指定子および FMT 指定子は、両方を同じ io-specifier-list に書くことは
できません。
[NML=]name
変数群出力のために変数群の名前を指定します。name は、NAMELIST 文で定
義されている必要があります。省略可能なキーワード NML= を省略した場合
は、name は並びの中の 2 番目の項目でなければなりません。最初の項目は、
省略可能なキーワード UNIT= なしの装置指定子でなければなりません。
NML 指定子および FMT 指定子は、両方を同じ io-specifier-list に書くこ
とはできません。
ADVANCE=character-expression
この文に対して、前進入出力を使用するかどうかを指定します。
character-expression には次の引き数の 1 つを指定できます。
表 10-54 WRITE 文 : ADVANCE= の値
'YES'
前進書式付き順番入出力を使用し
ます ( デフォルト )。
'NO'
停留書式付き順番入出力を使用し
ます。
ADVANCE 指定子が io-specifier-list に書かれた場合は、unit は書式付き
順番入出力のために開かれた外部ファイルに接続されていなければなりませ
ん。S 停留入出力は、並び入出力および変数群入出力では使用できません。
ERR=stmt-label
文の実行中にエラーが発生した場合に、制御を渡す実行文の文番号を指定しま
す。
IOSTAT=integer-variable
文を実行後に入出力状態を返します。文が正常に実行された場合は、
integer-variable がゼロに設定されます。エラーが発生した場合は、エ
ラーの内容を示す正の整数に設定されます。
504
第 10 章
HP Fortran 文
WRITE
REC=integer-expression
直接探査のために接続されたファイルに書き込む記録の数を指定します。この
指定子は、NML 指定子および ADVANCE 指定子とともに、または FMT=* ( 並び
入出力用 ) とともに、io-specifier-list に現れることはできません。
説明
WRITE 文は、内部記憶領域からデータを外部または内部ファイルに転送します。外部ファイルは
順番探査または直接探査の入出力のために開くことができます。順番探査のために開いた場合、
WRITE 文は次の形式の入出力を実行できます。
•
書式付き
•
書式なし
•
並び形式
•
変数群形式
直接探査のために開いた場合、WRITE 文は書式付きまたは書式なし入出力を実行できます。
WRITE 文は、内部ファイル上で動作する場合は書式付きまたは並び入出力を実行できます。
ファイルおよび異なる形式の入出力についての詳細は、199 ページの第 8 章 「入出力および
ファイル処理」を参照してください。
例
この項の例は、WRITE 文の異なる使用法を示します。
停留入出力
CHARACTER(LEN=17) :: prompt = 'Enter a number: '
WRITE (6, '(A)', ADVANCE='NO') prompt
WRITE 文は、標準出力に事前接続された装置 6 に接続されているファイルに出力します。
ADVANCE='NO' 指定子は次のことを示します。
•
ファイルは、書式付き順番入出力のために開かれています。
•
文は停留入出力を使用して、4 文字として編集された文字を変数 prompt に出力します。
停留 WRITE の意味は、新しい行を終了させずに prompt の中の文字列を標準出力に出力すること
です。これはユーザーが続けて入力したものはすべて、同じ行に現れることを意味します。
第 10 章
505
HP Fortran 文
WRITE
内部ファイル
CHARACTER(LEN=80) :: cfile
WRITE (cfile, '(I5, F10.5)') i, x
この文は、形式変換を行うために文字式の書式仕様を使用して、文字列を内部ファイル cfile
に書き込みます。
変数群入出力
次の例では、NAMELIST 文に続く 4 つの WRITE 文それぞれが、まったく同じことを実行するのに
構文の異なる型を使用しています。
NAMELIST /nl/ a, b, c
WRITE (UNIT=6, NML=nl) ! 6 = standard output
WRITE (6, nl)
WRITE (*, NML=nl)
! * = standard output
WRITE nl
! assume standard output
並び入出力
WRITE (6, *) int_var
この文は、int_var の値を文字書式に変換し、その文字列を標準出力に出力します。形式変換
は、int_var の型に基づきます。書式が分かっている場合は、アスタリスクの代わりに次のいず
れか 1 つを使用できます。
•
書式仕様を持つ FORMAT 文の文番号の場合は次のようになります。
WRITE (6, 100) int_var
100 FORMAT(I4)
•
文字式の書式仕様自身の場合は次のようになります。
WRITE (6, '(I4)') int_var
書式なし直接探査入出力
WRITE (31, REC=rec_num, ERR=99, IOSTAT=ios) a, b
この文は、装置 31 に接続しているファイルに出力します。REC 指定子は、ファイルが直接探査
のために開かれていること、およびこの文は変数 rec_num に番号が保存されている記録に出力
します。文の実行中に入出力エラーが発生した場合は、エラー番号が ios に保存され、実行制御
は文番号 99 にある実行文に移行します。
関連文
CLOSE, OPEN, PRINT, および READ
506
第 10 章
HP Fortran 文
WRITE
関連概念
入出力概念については、入出力を実行するプログラム例も記載されている 199 ページの第 8 章
「入出力およびファイル処理」を参照してください。入出力書式については、233 ページの第 9
章 「入出力の編集」を参照してください。
第 10 章
507
HP Fortran 文
WRITE
508
第 10 章
11 組み込み手続き
組み込み手続きは、すべての Fortran 90 プログラムと手続きに対してデフォルトで使用可能な
組み込みの関数およびサブルーチンです。本章では、HP Fortran が提供する組み込み手続きに
ついて説明します。HP Fortran は、Fortran 90 規格で定められているすべての組み込み手続き
をサポートしています
本章で説明する項目は次のとおりです。
•
基本用語と概念
•
規格に定められていない組み込み手続き
•
データ表現の数体系
•
組み込み手続きの機能分類
•
組み込み手続きの仕様
注記
第 11 章
HP Fortran 組み込み手続きは、ライブラリ /opt/fortran90/lib/libF90.a お
よび /usr/lib/libcl.a に提供されています。/usr/lib/libcl.2 は、共有ラ
イブラリ ( デフォルト ) を使用した場合に、libcl.a の代わりに使用されます。
509
組み込み手続き
基本用語と概念
基本用語と概念
次の項では、本章で使用する、組み込み手続きに関する用語と概念について説明します。
組み込み関数の可用性
組み込み手続きや利用者定義手続き ( またはライブラリ手続き ) が同じ名前を持つ場合や、利用
者定義手続きが次のような場合を除き、組み込み手続きはあらゆる Fortran 90 のプログラム単
位に使用できます。
•
EXTERNAL 属性を持つ場合。詳細は、357 ページの「EXTERNAL ( 文および属性 )」の項を参
照してください。ライブラリルーチンは、EXTERNAL 属性を使用して利用者プログラムで宣
言され、同じ名前の組み込み関数の代わりに呼び出されます。
•
明示的引用仕様を持つ場合。178 ページの「手続き引用仕様」の項を参照してください。文
関数は明示的引用仕様を持ちます。したがって、組み込み関数と同じ名前を持つ場合、組み
込み関数の代わりに認識されます。
利用者定義手続きが総称組み込み関数の拡張に使用され、引き数の型が異なると、利用者手
続きと組み込み関数の両方が同じ名前である可能性があります。これについては、181 ペー
ジの「総称手続き」の項を参照してください。
サブルーチンおよび関数の組み込み
組み込み手続きは、関数やサブルーチンとして使用できます。通常、利用者定義のサブルーチン
や関数と同様に動作します。組み込みサブルーチンは、CALL 文によって呼び出され、組み込み
関数に渡される引き数によって値を返すことができます。組み込み関数は、式の一部分として、
または値を受け取ることを期待する文において引用されます。
すべての引用仕様組み込みサブルーチンと関数が、明示的引用仕様を持ちます。
総称関数名と個別関数名
組み込み関数名は、総称名または個別名です。異なる型の引き数を許可する場合は、総称名 ( た
とえば、ABS) です。許可する型が 1 つだけの場合は、個別名 ( たとえば、IABS) です。
個別組み込み関数は、INTRINSIC 属性を持つ場合、引き数として渡されます。総称組み込み関
数は、SIN 組み込み関数場合のように個別名も持つ場合、INTRINSIC 属性を持つことができま
す。170 ページの「手続き仮引き数」の項および 393 ページの「INTRINSIC ( 文および属性 )」
の項の説明を参照してください。
510
第 11 章
組み込み手続き
基本用語と概念
注記
たとえば、+autodbl などのコンパイル行オプションは、基本データ型の大きさ
を変更し、異なるか無効な組み込み手続き引用を引き起こします。
組み込み関数の分類
組み込み手続きは、次のように分類されます。
•
要素別処理組み込み関数
•
変形関数
•
問い合わせ関数
次の項では、各分類について説明します。521 ページの「組み込み手続きの仕様」では、各組み
込み関数の分類について説明します。
要素別処理組み込み関数
組み込み手続きは、スカラ引き数を持っているとして指定されるが、配列である実引き数の場
合、要素別に処理します。配列引き数によって要素別処理組み込み関数を呼び出すと、関数は、
配列の各要素においてスカラ処理を実行します。MVBITS は、唯一の要素別処理サブルーチンで
す。他の組み込みサブルーチンは非要素別に処理します。
すべてのスカラ仮引き数によって呼び出される要素別処理関数は、スカラ結果を出力します。た
だし、形状適合配列引き数で要素別処理関数を呼び出すと、形状適合配列結果になります。配列
引き数とスカラ引き数の両方を要素別処理関数に対して指定すると、各スカラはすべての要素が
スカラ値を持つ配列として処理されます。「スカラ配列」は配列引き数と合致しています。
変形関数
変形組み込み関数は非要素別処理関数です。変形関数は少なくとも 1 つの配列引き数を要求し
て、要素別に評価できない実引き数に基づくスカラまたは配列を結果として返します。配列の結
果は、ほとんどの場合、引き数とは違う形状になります。たとえば、SUM は、配列引き数のすべ
ての要素の合計を示すスカラ結果を返します。
問い合わせ関数
問い合わせ組み込み関数は、主要な引き数の特性に基づいて情報を返します。つまり、値は無関
係で、引き数を定義する必要はありません。たとえば、SIZE 問い合わせ関数は、配列の 1 次元
の寸法か、配列の要素の総数を返すために使用できます。
第 11 章
511
組み込み手続き
基本用語と概念
最適化された組み込み関数
次の組み込み関数は、パフォーマンスが最適化されたミリコードバージョンで使用できます。ミ
リコード組み込み関数にアクセスするには、レベル 2 以上に最適化するか、+Olibcalls オプ
ションでコンパイルしなければなりません。これについては、『Fortran 90 プログラマーズ・ガ
イド』を参照してください。
表 11-1 最適化された組み込み関数
acos
cos
pow
asin
exp
sin
atan
log
tan
atan2
log10
512
第 11 章
組み込み手続き
規格に定められていない組み込み手続き
規格に定められていない組み込み手続き
HP Fortran 90 は、Fortran 90 規格が定めている組み込み手続きをすべてサポートしています。
さらに、表 11-3 にリストしている規格に定められていない組み込み手続きもサポートしていま
す。規格に準拠した組み込み関数と同様に、規格に定められていない組み込み手続きは HP
Fortran 90 言語の一部です。つまり、コンパイル行オプションでは認識されず、その総称性、
型、および仮引き数の属性をコンパイラは認識します。
規格に定められていない組み込み関数は次の内容を提供します。
•
規格で定義されていない追加の機能
•
他の Fortran 90 実装との互換性
•
規格を超えるデータ型の個別ルーチン
規格に定められた組み込み関数も定められていない組み込み関数も、521 ページの「組み込み手
続きの仕様」の項で説明しています。
第 11 章
513
組み込み手続き
データ表現の数体系
データ表現の数体系
Fortran 90 規格は、データ表現の数体系を指定しており、コンピュータでのデータの表現方法と
データの処理方法について定めています。Fortran 90 の組み込み関数が実行する計算処理につい
て、これらの数体系によって説明しています。
Fortran 90 には、次の 3 種類のデータ表現の数体系があります。
•
515 ページの「ビットの数体系」
•
516 ページの「整数の数体系」
•
516 ページの「実数の数体系」
任意の実現方法において、数体系のパラメータは、その実現方法にできる限り一致するように選
択されています。ただし、完全一致である必要はなく、数体系は特定の算術演算を実現方法に強
制しません。
データ表現の数体系の組み込み関数
いくつかの組み込み関数は、3 種類のデータ表現の数体系に関する情報を提供しています。この
ような組み込み関数について、表 11-2 の項で示します。
表 11-2 データ表現の数体系関連の組み込み関数
組み込み関数
説明
538 ページの「BIT_SIZE(I)」
種別 I の整数のビット数 (I は種別数ではなく、オ
ブジェクトです )
550 ページの「DIGITS(X)」
整数の数体系または実数の数体系における、X の
有効桁数
555 ページの「EPSILON(X)」
X の実数の数体系における 1 と比べてほとんど無
視できる値
557 ページの「EXPONENT(X)」
X の実数の数体系の指数部の値
558 ページの「FRACTION(X)」
X の実数の数体系の小数部の値
561 ページの「HUGE(X)」
整数の数体系または実数の数体系における、X の
数体系の最大数
514
第 11 章
組み込み手続き
データ表現の数体系
表 11-2 データ表現の数体系関連の組み込み関数 ( 続き )
組み込み関数
説明
595 ページの「MAXEXPONENT(X)」
実数の数体系における、X の指数部の最大値
600 ページの「MINEXPONENT(X)」
実数の数体系における、X の指数部の最小値
605 ページの「NEAREST(X, S)」
最も近い処理系の実数の値
609 ページの「PRECISION(X)」
実数の数体系における、X の 10 進精度
613 ページの「RADIX(X)」
整数の数体系または実数の数体系における、X の
基数
616 ページの「RANGE(X)」
整数の数体系または実数の数体系における、X の
10 進指数範囲
621 ページの「RRSPACING(X)」
1/(X の前後の相対的な間隔 )
622 ページの「SCALE(X, I)」
X と実数の数体系のべき I との積
625 ページの「SET_EXPONENT(X, I)」 X の実数の数体系の指数を指数 I と設定
630 ページの「SPACING(X)」
X の前後の絶対間隔
637 ページの「TINY(X)」
実数の数体系の X の最小数
ビットの数体系
ビットの数体系は、次の数式に基づいて、非負の整数型スカラデータオブジェクト a を、2 進数
字 ( ビット ) の列と解釈します。
この数式において、n は組み込み関数 BIT_SIZE で指定するビット数であり、各 bk のビット値
は 0 または 1 です。ビットには、0 から始まる番号が、右から左に付けられます。
第 11 章
515
組み込み手続き
データ表現の数体系
整数の数体系
整数の数体系は次の数式で表されます。
この数式で使用している文字の意味は、次のとおりです。
i
整数値
s
符号 (+1 または –1)
r
組み込み関数 RADIX で指定する基数 (HP システムの場合は常に 2)
q
組み込み関数 DIGITS で指定する数字の数 (0 以上の整数 )
d
k 番目の数字で、0 <= dk < r の整数。数字は、1 から始まる番号が、左から右
に付けられます。
実数の数体系
実数の数体系は、次の数式で表されます。
この数式で使用している文字の意味は、次のとおりです。
x
実数値
s
符号 (+1 または –1)
b
底 ( 実基数 ) であり、組み込み関数 RADIX で指定する 2 以上の整数 (HP シス
テムの場合は常に 2)
e
組み込み関数 MINEXPONENT と組み込み関数 MAXEXPONENT で指定する、最小
値 (lmin) と最大値 (lmax) の範囲の整数
p
仮数の桁数であり、組み込み関数 DIGITS で指定する 2 以上の整数
516
第 11 章
組み込み手続き
データ表現の数体系
fk
k 番目の数字であり、0 <= fk < b の整数。ただし、f1 は、すべての fk が 0 の
場合に限り、0 になり得ます。数字は、1 から始まる番号が、左から右に付け
られます。
第 11 章
517
組み込み手続き
組み込み手続きの機能分類
組み込み手続きの機能分類
本項では、HP Fortran の組み込み手続きを機能に基づいて分類します。手続きは、次のように
分類されます。
•
配列構成、配列問い合わせ、配列内位置、配列操作、配列集計、配列変形
•
ビット問い合わせ、ビット操作
•
文字処理、文字問い合わせ
•
浮動小数点操作、数学計算、行列積、数値演算、数値問い合わせ、ベクトルの内積
•
種別
•
論理
•
規格に定められていない組み込み手続き
•
ポインター結合状態問い合わせ
•
引き数実在問い合わせ
•
疑似乱数
•
時刻
•
転換
表 11-3 「組み込み手続きの分類」の項では、組み込み手続き一覧を分類ごとにアルファベット
順に記載しています。各組み込み手続きについての詳細は、521 ページの「組み込み手続きの仕
様」の項を参照してください。
表 11-3 組み込み手続きの分類
分類
組み込みルーチン
配列構成
MERGE, PACK, SPREAD, UNPACK
配列問い合わせ
ALLOCATED, LBOUND, SHAPE, SIZE, UBOUND
配列内位置
MAXLOC, MINLOC
配列操作
CSHIFT, EOSHIFT, TRANSPOSE
配列集計
ALL, ANY, COUNT, MAXVAL, MINVAL, PRODUCT, SUM
518
第 11 章
組み込み手続き
組み込み手続きの機能分類
表 11-3 組み込み手続きの分類 ( 続き )
分類
組み込みルーチン
配列変形
RESHAPE
ビット問い合わせ
BIT_SIZE
ビット操作
BTEST, IAND, IBCLR, IBITS, IBSET, IEOR, IOR, ISHFT,
ISHFTC, MVBITS, NOT
文字処理
ACHAR, ADJUSTL, ADJUSTR, CHAR, IACHAR, ICHAR, INDEX,
LEN_TRIM, LGE, LGT, LLE, LLT, REPEAT, SCAN, TRIM,
VERIFY
文字問い合わせ
LEN
浮動小数点操作
EXPONENT, FRACTION, NEAREST, RRSPACING, SCALE,
SET_EXPONENT, SPACING
種別
KIND, SELECT_INT_KIND, SELECTED_REAL_KIND
論理
LOGICAL
数学計算
ACOS, ASIN, ATAN, ATAN2, COS, COSH, EXP, LOG, LOG10, SIN,
SINH, SQRT, TAN, TANH
行列積
MATMUL
規格に定められていない組み込
み手続き
ABORT, ACOSD, ACOSH, AND, ASIND, ASINH, ATAN2D, ATAND,
ATANH, BADDRESS, COSD, DATE, DCMPLX, DFLOAT, DNUM,
DREAL, EXIT, FLUSH, FNUM, FREE, FSET, FSTREAM, GETARG,
GETENV, GRAN, HFIX, IACHAR, IADDR, IARGC, IDATE, IDIM,
IGETARG, IJINT, IMAG, INT1, INT2, INT4, INT8, INUM,
IOMSG, IQINT, IRAND, IRANP, ISIGN, ISNAN, IXOR, JNUM,
LOC, LSHFT, LSHIFT, MALLOC, MCLOCK, OR, QEXT, QFLOAT,
QNUM, QPROD, RAN, RAND, RNUM, RSHFT, RSHIFT, SECNDS,
SIND, SIZEOF, SRAND, SYSTEM, TAND, TIME, XOR, ZEXT
数値演算
ABS, AIMAG, AINT, ANINT, CEILING, CMPLX, CONJG, DBLE,
DIM, DPROD, FLOOR, INT, MAX, MIN, MOD, MODULO, NINT,
REAL, SIGN
第 11 章
519
組み込み手続き
組み込み手続きの機能分類
表 11-3 組み込み手続きの分類 ( 続き )
分類
組み込みルーチン
数値問い合わせ
DIGITS, EPSILON, HUGE, MAXEXPONENTS, MINEXPONENTS,
PRECISION, RADIX, RANGE, TINY
ポインター結合状態問い合わせ
ASSOCIATED
引き数実在問い合わせ
PRESENT
疑似乱数
RANDOM_NUMBER, RANDOM_SEED
時刻
DATE_AND_TIME, SYSTEM_CLOCK
転換
TRANSFER
ベクトルの内積
DOT_PRODUCT
520
第 11 章
組み込み手続き
組み込み手続きの仕様
組み込み手続きの仕様
本章では、HP Fortran の組み込み手続きについて説明します。組み込み関数名ごとにアルファ
ベット順で説明しています。すべての組み込み関数は総称です。つまり、実引き数の型、種別、
次元数は、同じ組み込み関数への各引用で異なります。多くの場合、組み込み関数結果の種別と
型は、主な引き数の種別と型と同じです。たとえば、SIN 関数は、整数型引き数または複素数型
引き数のいかなる種別によっても呼び出せます。結果は引き数の型と種別を持ちます。
組み込み手続き引用はキーワードオプションを使用します。実引き数式の前には、仮引き数名、
つまり引き数キーワードと、等号 (=) が付きます。引き数キーワードについては、次に説明しま
す。
組み込み手続きの引き数は省略可能です。省略可能な引き数については、次の説明で注記しま
す。
ABORT()
機能
すべてのファイルを閉じ、エラーを生成してコアファイルを作成します。
分類
規格外のサブルーチン
ABS(A)
機能
絶対値
分類
要素別処理関数
引き数
A は、整数型、実数型または複素数型でなければなりません。
第 11 章
521
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
A が複素数型の場合、結果の型は実数型とします。それ以外の場合、結果の型は A と同じとしま
す。
結果の値
•
A が整数型または実数型の場合、結果の値は |A| とします。
•
A が複素数 (x, y) の場合、結果の値は (x2 + y2) の平方根の処理系依存の近似値とします。
個別名
BABS, CABS, CDABS, DABS, HABS, QABS, ZABS
ACHAR(I)
機能
ASCII 大小順序における指定した位置の文字を返します。関数 IACHAR の逆関数です。
分類
要素別処理関数
引き数
I は、整数型でなければなりません。
結果の型 / 型パラメータ
種別型パラメータ値 KIND('A') を持つ長さ 1 の文字型とします。
結果の値
I の値が 0 <= I <= 127 の範囲である場合、結果の値は ASCII 大小順序における位置 I の文字と
します。ただし、処理系がその文字を表現できないときの結果は、処理系依存とします。
処理系が大文字または小文字のどちらかを表現することができず、I が表現できないほうの文字
に対応するとき、結果は処理系が表現できるほうの文字とします。
処理系で表現できる任意の文字 C に対して、ACHAR(IACHAR(C)) は、値 C を持たなければなり
ません。
522
第 11 章
組み込み手続き
組み込み手続きの仕様
ACOS(X)
機能
逆余弦関数 ( 余弦関数の逆関数 ) ( ラジアン単位 )
分類
要素別処理関数
引き数
X は、実数型であって、|X| <= 1 を満たす値でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、ラジアンで表した arccos(X) の処理系依存の近似値とし、0 <= ACOS(X) <=π の範
囲とします。
個別名
DCOS, QACOS
ACOSD(X)
機能
逆余弦関数 ( 余弦関数の逆関数 ) ( 度単位 )
分類
規格外の要素別処理関数
引き数
X は、実数型であって、|X| <= 1 を満たす値でなければなりません。
第 11 章
523
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、度で表した arccos(X) の処理系依存の近似値とし、0 <= ACOSD(X) <= 180 の範囲と
します。
個別名
DACOSD, QACOSD
ACOSH(X)
機能
逆双曲線余弦関数 ( ラジアン単位 )
分類
規格外の要素別処理関数
引き数
X は、実数型であって、X >= 1 を満たす値でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、逆双曲線余弦関数 X の処理系依存の近似値とし、0 <= ACOSH(X) の範囲とします。
個別名
DACOSH, QACOSH
524
第 11 章
組み込み手続き
組み込み手続きの仕様
ADJUSTL(STRING)
機能
先頭の空白を取り除き末尾に空白を挿入して左詰めにします。
分類
要素別処理関数
引き数
STRING は、文字型でなければなりません。
結果の型
STRING と同じ長さおよび同じ種別型パラメータの文字型とします。
結果の値
結果の値は、STRING の先頭の空白を削除し、同数の空白を末尾に挿入した文字列とします。
ADJUSTR(STRING)
機能
末尾の空白を取り除き先頭に空白を挿入して右詰めにします。
分類
要素別処理関数
引き数
STRING は、文字型でなければなりません。
結果の型
STRING と同じ長さおよび同じ種別型パラメータの文字型とします。
結果の値
結果の値は、STRING の末尾の空白を削除し、同数の空白を先頭に挿入した文字列とします。
第 11 章
525
組み込み手続き
組み込み手続きの仕様
AIMAG(Z)
機能
複素数の虚部
分類
要素別処理関数
引き数
Z は、複素数型でなければなりません。
結果の型 / 型パラメータ
Z と同じ種別型パラメータの実数型とします。
結果の値
Z の値が (x, y) であるとき、結果の値は y とします。
AINT(A, KIND)
省略可能な引き数
KIND
機能
整数値への切り捨て
分類
要素別処理関数
引き数
A
実数型でなければなりません。
KIND ( 省略可能 )
スカラ整数初期値式でなければなりません。
526
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
結果の型は、実数型とします。KIND を指定したとき、種別型パラメータは KIND の指定に従い
ます。KIND を省略したとき、種別型パラメータは、A と同じとします。
結果の値
|A| < 1 のとき、AINT(A) の値は 0 とします。A >= 1 のとき、AINT(A) の値は、A の絶対値以下
で最大の整数値に A の符号を付けたものとします。
個別名
DDINT,DINT,QINT
ALL(MASK, DIM)
省略可能な引き数
DIM
機能
MASK の DIM 番目の次元の要素の値がすべて .TRUE. であるかどうかを判定します。
分類
変形関数
引き数
MASK
論理型でなければならず、スカラであってはなりません。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は、MASK の次元数とします。対応する実引き数は、省略可能な仮引き
数であってはなりません。
結果の型、型パラメータおよび形状
結果は、MASK と同じ種別型パラメータの論理型とします。DIM が省略されているかまたは MASK
の次元数が 1 である場合、結果はスカラとします。それ以外の場合、結果は n-1 次元の配列と
し、その形状は (d1, d2, ..., dDIM-1, dDIM+1, ..., dn) とします。ここで (d1, d2, ..., dn) は、MASK の
形状とします。
第 11 章
527
組み込み手続き
組み込み手続きの仕様
結果の値
場合 1
ALL(MASK) の結果の値は、MASK のすべての要素が .TRUE. であるかまたは
MASK の大きさが 0 であるとき .TRUE. とし、MASK のどれかの要素が .FALSE.
であるとき .FALSE. とします。
場合 2
MASK の次元数が 1 であるとき、ALL(MASK, DIM) の値は ALL(MASK) の値と同
じとします。次元数が 2 以上であるとき、ALL(MASK, DIM) の要素 (s1, s2, ...,
sDIM-1, sDIM+1, ..., sn) の値は、ALL(MASK (s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn))
と同じとします。
ALLOCATED(ARRAY)
機能
割り付け配列が、現在割り付けられているかどうかを示します。
分類
問い合わせ関数
引き数
ARRAY は、割り付け配列でなければなりません。
結果の型、型パラメータおよび形状
基本論理型スカラとします。
結果の値
結果の値は、ARRAY が現在割り付けられているとき .TRUE. とし、割り付けられていないとき偽
とします。配列の割り付け状態が不定であるときの結果は、規定しません。
AND(I, J)
機能
論理積
分類
規格外の要素別処理関数
528
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
I
整数型でなければなりません。
J
I と同じ種別型パラメータの整数型でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、ビットごとに I と J の論理積を算出し、表 11-4 に従って得られる値とします。
表 11-4 AND 組み込み関数の真偽表
I
J
AND(I, J)
1
1
1
1
0
0
0
1
0
0
0
1
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
ANINT(A, KIND)
省略可能な引き数
KIND
機能
最も近い整数値を返します ( 四捨五入 )。
分類
要素別処理関数
第 11 章
529
組み込み手続き
組み込み手続きの仕様
引き数
A
実数型でなければなりません。
KIND ( 省略可能 )
スカラ整数初期値式でなければなりません。
結果の型 / 型パラメータ
結果の型は、実数型とします。KIND を指定したとき、種別型パラメータは KIND の指定に従い
ます。KIND を省略したとき、種別型パラメータは、A と同じとします。
結果の値
A>0 である場合、ANINT(A) の値は AINT(A+0.5) とします。A <= 0 である場合、ANINT(A) の値
は AINT(A-0.5) とします。
個別名
DNINT, QNINT
ANY(MASK, DIM)
省略可能な引き数
DIM
機能
MASK の DIM 番目の次元の要素の値が 1 つでも .TRUE. であるかどうかを判定します。
分類
変形関数
引き数
MASK
論理型でなければならず、スカラであってはなりません。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は、MASK の次元数とします。対応する実引き数は、省略可能な仮引き
数であってはなりません。
530
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の型、型パラメータおよび形状
結果は、MASK と同じ種別型パラメータの論理型とします。DIM を省略するかまたは MASK の次元
数が 1 である場合、結果はスカラとします。それ以外の場合、結果は n-1 次元の配列とし、その
形状は (d1, d2, ..., dDIM-1, dDIM+1, ..., dn) とします。ここで (d1, d2, ..., dn) は MASK の形状としま
す。
結果の値
場合 1
ANY(MASK) の結果の値は、MASK のどれかの要素が .TRUE. であるとき
.TRUE. とし、どの要素も .TRUE. でないときまたは MASK の大きさが 0 であ
るとき .FALSE. とします。
場合 2
MASK の次元数が 1 であるとき、ANY(MASK,DIM) の値は ANY(MASK) と同じと
します。次元数が 2 以上であるとき、ANY(MASK, DIM) の要素 (s1, s2, ...,
sDIM-1, sDIM+1, ..., sn) の値は、ANY(MASK(s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn))
と同じとします。
ASIN(X)
機能
逆正弦関数 ( 正弦関数の逆関数 ) ( ラジアン単位 )
分類
要素別処理関数
引き数
X は、実数型であって、|X| <= 1 を満たす値でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、ラジアンで表した arcsin(X) の処理系依存の近似値とし、-π/2 <= ASIN(X) <=π /2
の範囲とします。
第 11 章
531
組み込み手続き
組み込み手続きの仕様
個別名
DASIN, QASIN
ASIND(X)
機能
逆正弦関数 ( 正弦関数の逆関数 ) ( 度単位 )
分類
規格外の要素別処理関数
引き数
X は、実数型であって、|X| <= 1 を満たす値でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、度で表した arcsin(X) の処理系依存の近似値とし、-90 <= ASIN(X) <= 90 の範囲と
します。
個別名
DASIND, QASIND
ASINH(X)
機能
逆双曲線正弦関数 ( ラジアン単位 )
分類
規格外の要素別処理関数
532
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、逆双曲線正弦関数 X の処理系依存の近似値とします。
個別名
DASINH, QASINH
ASSOCIATED(POINTER, TARGET)
省略可能な引き数
TARGET
機能
ポインター引き数の結合状態を返します。すなわち、ポインターが指示先と結合しているかどう
かを示します。
分類
問い合わせ関数
引き数
POINTER
ポインターでなければなりません。任意の型でかまいません。ポインター結合
状態が不定であってはなりません。
TARGET ( 省略可能 )
ポインターまたは指示先でなければなりません。ポインターである場合、ポイ
ンター結合状態が不定であってはなりません。
結果の型
結果の型は、基本論理型スカラとします。
第 11 章
533
組み込み手続き
組み込み手続きの仕様
結果の値
場合 1
TARGET を省略した場合、結果の値は、POINTER が指示先と現在結合している
とき .TRUE. とし、結合していないとき .FALSE. とします。
場合 2
TARGET が指定されていて指示先である場合、結果の値は、POINTER が現在
TARGET と結合しているとき .TRUE. とし、結合していないとき .FALSE. とし
ます。
場合 3
TARGET が指定されていてポインターである場合、POINTER と TARGET が現在
同一の指示先と結合しているとき .TRUE. とし、同一でないとき .FALSE. と
します。POINTER または TARGET が空状態であるとき、結果の値は .FALSE.
とします。
ATAN(X)
機能
逆正接関数 ( 正接関数の逆関数 ) ( ラジアン単位 )
分類
要素別処理関数
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、ラジアンで表した arctan(X) の処理系依存の近似値とし、-π/2 <= ATAN(X) <=π
/2 の範囲とします。
個別名
DATAN, QATAN
534
第 11 章
組み込み手続き
組み込み手続きの仕様
ATAN2(Y, X)
機能
逆正接関数 ( 正接関数の逆関数 ) ( ラジアン単位 )。結果は、(0.0, 0.0) でない複素数 (X, Y) の主偏
角とします。
分類
要素別処理関数
引き数
Y
実数型でなければなりません。
X
Y と同じ型および同じ種別型パラメータでなければなりません。Y が 0.0 であ
る場合、X は 0.0 であってはなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、ラジアンで表した複素数 (X, Y) の偏角の主値に対する処理系依存の近似値としま
す。
値の範囲は、-π <= ATAN2(Y, X) <=π とします。その値は、X が 0.0 でない場合、arctan(Y/X)
の値の処理系依存の近似値とします。
その場合、Y>0 であるとき、結果の値は正とします。Y=0 であるとき、結果の値は、X>0 ならば
0 とし、X<0 ならば π とします。Y<0 であるとき、結果の値は負とします。X=0 である場合、結
果の絶対値は π/2 とします。
個別名
DATAN2,QATAN2
ATAN2D(Y, X)
機能
逆正接関数 ( 正接関数の逆関数 ) ( 度単位 )
第 11 章
535
組み込み手続き
組み込み手続きの仕様
分類
規格外の要素別処理関数
引き数
Y
実数型でなければなりません。
X
Y と同じ型および同じ種別型パラメータでなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、度で表した複素数 (X, Y) の偏角の主値に対する処理系依存の近似値とし、-90 <
ATAN2D(Y,X) < 90 の範囲とします。
個別名
DATAN2D,QATAN2D
ATAND(X)
機能
逆正接関数 ( 正接関数の逆関数 ) ( 度単位 )
分類
規格外の要素別処理関数
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
536
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の値
結果の値は、度で表した arctan(X) の処理系依存の近似値とし、-90 < ATAND(X) < 90 の範囲と
します。
個別名
DATAND,QATAND
ATANH(X)
機能
逆双曲線正接関数 ( ラジアン単位 )
分類
規格外の要素別処理関数
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、逆双曲線正接関数 X の処理系依存の近似値とします。
個別名
DATANH, QATANH
BADDRESS(X)
機能
X のアドレスを返します。
第 11 章
537
組み込み手続き
組み込み手続きの仕様
分類
規格外の問い合わせ関数
引き数
X は、どの型でもかまいません。
結果の型
結果の型は、基本整数型とします。
BIT_SIZE(I)
機能
引き数の種別型パラメータの整数型の数体系について、515 ページの「ビットの数体系」の項で
定義したビット数 n を返します。
分類
問い合わせ関数
引き数
I は、整数型でなければなりません。
結果の型、型パラメータおよび形状
I と同じ種別型パラメータの整数型スカラとします。
結果の値
結果の値は、引き数の種別型パラメータの整数型の数体系について、515 ページの「ビットの数
体系」の項においてビット操作のために定義したビット数 n とします。引き数の種別型パラメー
タは整数型になります。
BTEST(I, POS)
機能
整数値のビットを調べます。
538
第 11 章
組み込み手続き
組み込み手続きの仕様
分類
要素別処理関数
引き数
I
整数型でなければなりません。
POS
整数型でなければなりません。値は、0 以上 BIT_SIZE(I) 未満でなければな
りません。
結果の型
基本論理型とします。
結果の値
I の第 POS ビットが 1 であるとき、結果の値は .TRUE. とします。I の第 POS ビットが 0 である
とき、結果の値は .FALSE. とします。整数値をビット列として解釈する数体系については、515
ページの「ビットの数体系」の項を参照してください。
個別名
BBTEST, BITEST, BJTEST, BKTEST, HTEST
CEILING(A)
機能
引き数の値以上で最小の整数を返します。
分類
要素別処理関数
引き数
A は、実数型でなければなりません。
結果の型 / 型パラメータ
基本整数型とします。
第 11 章
539
組み込み手続き
組み込み手続きの仕様
結果の値
結果の値は、A 以上で最小の整数とします。処理系がこの値を基本整数型で表現できないときの
結果は、規定しません。
CHAR(I, KIND)
省略可能な引き数
KIND
機能
指定された種別型パラメータに対応する処理系大小順序における指定された位置の文字を返しま
す。関数 ICHAR の逆関数です。
分類
要素別処理関数
引き数
I
整数型であって、値が 0 <= I <= n-1 の範囲でなければなりません。ここで n
は、指定された種別型パラメータに対応する処理系大小順序における文字の個
数とします。
KIND ( 省略可能 )
スカラ整数初期値式でなければなりません。
結果の型 / 型パラメータ
長さ 1 の文字型とします。KIND を指定したとき、種別型パラメータは KIND の指定に従います。
KIND を省略したとき、種別型パラメータは基本文字型のものとします。
結果の値
結果は、指定した種別型パラメータに対応する処理系大小順序における位置 I の文字とします。
ICHAR(CHAR(I, KIND(C))) の値は 0 <= I <= n-1 の範囲の I にならなければならず、処理系が
表現可能な任意の文字 C に対して、CHAR(ICHAR(C), KIND(C)) の値は C にならなければなりま
せん。
540
第 11 章
組み込み手続き
組み込み手続きの仕様
CMPLX(X, Y, KIND)
省略可能な引き数
Y, KIND
機能
複素数型に変換します。
分類
要素別処理関数
引き数
X
整数型、実数型または複素数型でなければなりません。
Y ( 省略可能 )
整数型または実数型でなければなりません。X が複素数型のときは、指定して
はなりません。
KIND ( 省略可能 ) スカラ整数初期値式でなければなりません。
結果の型 / 型パラメータ
結果の型は、複素数型とします。KIND を指定したとき、種別型パラメータは KIND の指定に従
います。KIND を省略したとき、種別型パラメータは基本実数型のものとします。
結果の値
•
Y を省略し、X が複素数でない場合、Y にはゼロを指定したものとみなします。
•
Y を省略し、X が複素数である場合、Y には AIMAG(X) を指定したものとみなします。
CMPLX(X,Y,KIND) の値は、実部が REAL(X,KIND) で虚部が REAL(Y,KIND) である複素数の値と
します。
CONJG(Z)
機能
共役複素数
第 11 章
541
組み込み手続き
組み込み手続きの仕様
分類
要素別処理関数
引き数
Z は、複素数型でなければなりません。
結果の型 / 型パラメータ
Z と同じとします。
結果の値
Z の値が (x, y) のとき、結果の値は (x, -y) とします。
個別名
DCONJG
COS(X)
機能
余弦関数 ( ラジアン単位 )
分類
要素別処理関数
引き数
X は、実数型または複素数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、cos(X) の処理系依存の近似値とします。X が実数型のとき、ラジアンでの値とみな
されます。X が複素数型のとき、その実部がラジアンでの値とみなされます。
542
第 11 章
組み込み手続き
組み込み手続きの仕様
個別名
CCOS, CDCOS, DCOS, QCOS, ZCOS
COSD(X)
機能
余弦関数 ( 度単位 )
分類
規格外の要素別処理関数
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、cos(X) の処理系依存の近似値とします。
個別名
DCOSD, QCOSD
COSH(X)
機能
双曲線余弦関数
分類
要素別処理関数
引き数
X は、実数型でなければなりません。
第 11 章
543
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、cosh(X) の処理系依存の近似値とします。
個別名
DCOSH, QCOSH
COUNT(MASK, DIM)
省略可能な引き数
DIM
機能
次元 DIM における MASK 中の .TRUE. である要素の個数を数えます。
分類
変形関数
引き数
MASK
論理型でなければならず、スカラであってはなりません。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は、MASK の次元数とします。対応する実引き数は、省略可能な仮引き
数であってはなりません。
結果の型、型パラメータおよび形状
結果は、基本整数型とします。DIM が省略されているかまたは MASK の次元数が 1 である場合
は、スカラとします。それ以外の場合は、n-1 次元の配列とし、その形状は (d1, d2, ..., dDIM-1,
dDIM+1, ..., dn) とします。ここで (d1, d2, ..., dn) は、MASK の形状とします。
544
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の値
場合 1
COUNT(MASK) の結果の値は、MASK 中の .TRUE. である要素の個数とします。
MASK の大きさが 0 であるとき、0 とします。
場合 2
MASK の次元数が 1 であるとき、COUNT(MASK, DIM) は、COUNT(MASK) と同じ
とします。MASK の次元数が 2 以上であるとき、COUNT(MASK, DIM) の要素
(s1, s2, ..., sDIM-1, sDIM+1, ..., sn) の値は、COUNT(MASK(s1, s2, ...,
sDIM-1, :, sDIM+1, ..., sn)) と同じとします。
個別名
KCOUNT
CSHIFT(ARRAY, SHIFT, DIM)
省略可能な引き数
DIM
機能
次元数が 1 である配列式上で要素の循環移動を行うか、または次元数が 2 以上である配列式の指
定された次元に沿った 1 次元の部分配列のすべてにおいて要素の循環移動を行います。
部分配列の端から外にはみ出した要素は、反対側の端に送られます。それぞれの部分配列は、異
なる方向に異なる量だけ移動してもかまいません ( 左側に移動する場合は正の数で、右側に移動
する場合は負の数になります )。
分類
変形関数
引き数
ARRAY
どの型でもかまいません。スカラであってはなりません。
SHIFT
整数型でなければなりません。ARRAY の次元数が 1 である場合、スカラでなけ
ればなりません。ARRAY の次元数が 2 以上である場合、スカラまたは n-1 次元
の配列で形状が (d1, d2, ..., dDIM-1, dDIM+1, ..., dn) でなければなりません。こ
こで (d1, d2, ..., dn) は、ARRAY の形状とします。
第 11 章
545
組み込み手続き
組み込み手続きの仕様
DIM ( 省略可能 ) 整数型スカラであり、1 <= DIM <= n の範囲の値でなければなりません。ここ
で n は、ARRAY の次元数とします。DIM を省略したときは、1 を指定したもの
とみなします。
結果の型、型パラメータおよび形状
結果の型、型パラメータおよび形状は、ARRAY と同じとします。
結果の値
場合 1
ARRAY が 1 次元配列である場合、結果の i 番目の要素は、ARRAY(1 +
MODULO(i + SHIFT - 1, SIZE(ARRAY))) とします。
場合 2
ARRAY が 2 次元以上の配列である場合、結果の部分配列 (s1, s2, ..., sDIM-1, :,
sDIM+1, ...., sn) の値は、CSHIFT(ARRAY(s1, s2, ..., sDIM-1, :, sDIM+1,
...., sn), sh, 1) とします。ここで sh は、SHIFT または SHIFT(s1, s2,
..., sDIM-1, sDIM+1, ..., sn) とします。
個別名
KCSHIFT
DATE(DATESTR)
機能
システムの現在の日付を返します。
分類
規格外のサブルーチン
引き数
DATESTR は、文字型でなければなりません。長さ 9 以上の文字列でなければなりません。
DATE_AND_TIME(DATE, TIME, ZONE, VALUES)
省略可能な引き数
DATE, TIME, ZONE, VALUES
546
第 11 章
組み込み手続き
組み込み手続きの仕様
機能
実時間時計のデータおよび ISO 8601:1988 (“Data elements and interchange formats —
Information interchange — Representation of dates and times”) で規定された表示方法と互換
性のある形式の日付を返します。
分類
サブルーチン
引き数
DATE ( 省略可能 )
基本文字型スカラでなければなりません。完全な値を格納するには、8 文字以
上の長さを必要とします。INTENT(OUT) 引き数とします。左側の 8 文字に、
CCYYMMDD という形式の値を設定します。ここで、CC は世紀、YY は西暦年、
MM は月、DD は日とします。年月日が利用できないときは、空白を設定しま
す。
TIME ( 省略可能 )
基本文字型スカラでなければなりません。完全な値を格納するには、10 文字
以上の長さを必要とします。INTENT(OUT) 引き数とします。左側の 10 文字
に、hhmmss.sss という形式の値を設定します。ここで、hh は時、mm は分、
ss.sss は秒およびミリ秒とします。時計が利用できないときは、空白を設定
します。
ZONE ( 省略可能 )
基本文字型スカラでなければなりません。完全な値を格納するには、5 文字以
上の長さを必要とします。INTENT(OUT) 引き数とします。左側の 5 文字に、
± hhmm という形式の値を設定します。ここで、hh および mm は、それぞれ時
および端数の分とし、協定世界時 (UTC) からの時差を表します。時計が利用
できないときは、空白を設定します。
VALUES ( 省略可能 )
基本整数型の 1 次元配列でなければなりません。INTENT(OUT) 引き数としま
す。大きさは、8 以上でなければなりません。VALUES に返される値は、次の
とおりとします。
第 11 章
VALUES(1)
年 ( たとえば 1990。ただし年月日が利用できないときは、
–HUGE(0))
VALUES(2)
月 ( ただし年月日が利用できないときは、–HUGE(0))
VALUES(3)
日 ( ただし年月日が利用できないときは、–HUGE(0))
547
組み込み手続き
組み込み手続きの仕様
VALUES(4)
分で表した協定世界時 (UTC) からの時差 ( ただし、これが
利用できないときは、–HUGE(0))
VALUES(5)
0 ~ 23 の範囲の時 ( ただし、時計が利用できないときは、
–HUGE(0))
VALUES(6)
0 ~ 59 の範囲の分 ( ただし、時計が利用できないときは、
–HUGE(0))
VALUES(7)
0 ~ 60 の範囲の秒 ( ただし時計が利用できないときは、
–HUGE(0))
VALUES(8)
0 ~ 999 の範囲のミリ秒 ( ただし、時計が利用できないとき
は、–HUGE(0))
HUGE 組み込み関数については、561 ページの「HUGE(X)」の項で説明しま
す。
DBLE(A)
機能
倍精度実数型に変換します。
分類
要素別処理関数
引き数
A は、整数型、実数型または複素数型でなければなりません。
結果の型 / 型パラメータ
倍精度実数型とします。
結果の値
場合 1
A が倍精度実数型のとき、DBLE(A) = A とします。
場合 2
A が整数型または実数型のとき、結果の値は倍精度実数型が持つ有効桁数で表
した A の上位の部分とします。
場合 3
A が複素数型のとき、結果の値は倍精度実数型が持つ有効桁数で表した A の実
部の上位の部分とします。
548
第 11 章
組み込み手続き
組み込み手続きの仕様
個別名
DBLEQ
DCMPLX(X,Y)
省略可能な引き数
Y
機能
倍精度複素数型に変換します。
分類
規格外の要素別処理関数
引き数
X
整数型、実数型または複素数型でなければなりません。
Y
X が複素数型のときは、指定してはなりません。X が複素数型でないときは、
省略可能で、X と同じ型および同じ種別型パラメータでなければなりません。
結果の型 / 型パラメータ
倍精度複素数型とします。
DFLOAT(A)
機能
倍精度実数型に変換します。
分類
規格外の要素別処理関数
引き数
A は、整数型でなければなりません。
第 11 章
549
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
倍精度実数型とします。
個別名
DFLOTI, DFLOTJ, DFLOTK
DIGITS(X)
機能
引き数と同じ型および同じ種別型パラメータの数体系の有効桁数を返します。
分類
問い合わせ関数
引き数
X は、整数型または実数型でなければなりません。値は、スカラまたは配列とします。
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
結果の値は、X が整数型のとき q とし、X が実数型のとき p とします。ここで q および p は、X
と同じ型および同じ種別型パラメータの数体系における 514 ページの「データ表現の数体系」の
項で定義した値とします。
DIM(X, Y)
機能
超過分 X–Y が正のときは X–Y、正でないときはゼロとします。
分類
要素別処理関数
550
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
X
整数型または実数型でなければなりません。
Y
X と同じ型および同じ種別型パラメータでなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、X > Y のとき X–Y とし、それ以外の場合はゼロとします。
個別名
BDIM, DDIM, HDIM, QDIM
DNUM(I)
機能
倍精度実数型に変換します。
分類
規格外の要素別処理関数
引き数
I は、文字型でなければなりません。
結果の型
倍精度実数型とします。
DOT_PRODUCT(VECTOR_A, VECTOR_B)
機能
数値型または論理型のベクトルの内積
第 11 章
551
組み込み手続き
組み込み手続きの仕様
分類
変形関数
引き数
VECTOR_A
数値型 ( 整数型、実数型または複素数型 ) または論理型でなければなりませ
ん。値は、1 次元配列でなければなりません。
VECTOR_B
VECTOR_A が数値型のとき数値型、VECTOR_A が論理型のとき論理型でなけれ
ばなりません。値は、1 次元配列であって、VECTOR_A と同じ大きさでなけれ
ばなりません。
結果の型、型パラメータおよび形状
結果はスカラとします。
引き数が数値型のとき、結果の型および種別型パラメータは引き数の型によって決まる式
VECTOR_A * VECTOR_B の型および種別型パラメータと同じとします。
引き数が論理型のとき、結果は式 VECTOR_A .AND. VECTOR_B の種別型パラメータを持つ論理
型とします。
結果の値
場合 1
VECTOR_A が整数型または実数型の場合、結果の値は
SUM(VECTOR_A*VECTOR_B) とします。ベクトルの大きさが 0 であるとき、結
果の値はゼロとします。
場合 2
VECTOR_A が複素数型の場合、結果の値は
SUM(CONJG(VECTOR_A)*VECTOR_B) とします。ベクトルの大きさが 0 である
とき、結果の値はゼロとします。
場合 3
VECTOR_A が論理型の場合、結果の値は ANY(VECTOR_A .AND. VECTOR_B) と
します。ベクトルの大きさが 0 であるとき、結果の値は .FALSE. とします。
DPROD(X, Y)
機能
倍精度実数型の積
分類
要素別処理関数
552
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
X
基本実数型でなければなりません。
Y
基本実数型でなければなりません。
結果の型 / 型パラメータ
倍精度実数型とします。
結果の値
結果の値は、X と Y の積に対する処理系依存の近似値とします。
DREAL(A)
機能
倍精度実数型に変換します。
分類
規格外の要素別処理関数
引き数
A は、整数型、実数型または複素数型でなければなりません。
結果
倍精度実数型とします。
EOSHIFT(ARRAY, SHIFT, BOUNDARY, DIM)
省略可能な引き数
BOUNDARY, DIM
機能
次元数が 1 である配列式上で要素の移動を行うか、または次元数が 2 以上である配列式の指定さ
れた次元に沿った 1 次元の部分配列のすべてにおいて要素の移動を行います。
第 11 章
553
組み込み手続き
組み込み手続きの仕様
部分配列の端から外にはみ出した要素は捨てられ、境界値の複製が反対側の端に取り込まれま
す。
それぞれの部分配列は、異なる境界値を持ってもよく、異なる方向に異なる量だけ移動してもか
まいません。
分類
変形関数
引き数
ARRAY
どの型でもかまいません。スカラであってはなりません。
SHIFT
整数型でなければなりません。ARRAY が 1 次元配列である場合、スカラでなけ
ればなりません。ARRAY が 2 次元以上の配列である場合、スカラまたは n-1 次
元の配列で形状が (d1, d2, ..., dDIM-1, dDIM+1, ..., dn) でなければなりません。
ここで (d1, d2, ..., dn) は ARRAY の形状とします。
BOUNDARY ( 省略可能 )
型および型パラメータは、ARRAY と同じでなければなりません。ARRAY の次元
数が 1 である場合、スカラでなければなりません。次元数が 2 以上である場
合、スカラまたは n-1 次元の配列で、その形状は (d1, d2, ..., dDIM-1, dDIM+1,
..., dn) でなければなりません。BOUNDARY は、各データ型の BOUNDARY のデ
フォルト値を示す表 11-5 のデータ型に対して省略可能とします。
表 11-5 BOUNDARY 引き数のデフォルト値
ARRAY のデータ型
BOUNDARY のデフォルト値
整数型
0
実数型
0.0
複素数型
(0.0, 0.0)
論理型
.FALSE.
文字型 ( 長さ len)
len 個の空白
554
第 11 章
組み込み手続き
組み込み手続きの仕様
DIM ( 省略可能 ) 1 <= DIM <= n の範囲の値を持つ整数型スカラでなければなりません。ここで
n は、ARRAY の次元数とします。DIM を省略したときは、1 が指定されたもの
とみなします。
結果の型、型パラメータおよび形状
結果の型、型パラメータおよび形状は、ARRAY と同じとします。
結果の値
結果の要素 (s1, s1, ..., sn) の値は、ARRAY (s1, s2, ..., sDIM-1, sDIM + sh, sDIM+1, ..., sn) とします。
ここで sh は、不等式 LBOUND(ARRAY, DIM) <= sDIM + sh <= UBOUND(ARRAY, DIM) を満たすと
き SHIFT または SHIFT(s1, s2, ..., sDIM-1, sDIM+1, ..., sn) とし、満たさないとき BOUNDARY また
は BOUNDARY(s1, s2, ..., sDIM-1, sDIM+1, ..., sn) とします。
個別名
KEOSHIFT
EPSILON(X)
機能
引き数と同じ型および同じ種別型パラメータの数体系における、1 に対してほとんど無視できる
正の数を返します。
分類
問い合わせ関数
引き数
X は、実数型でなければなりません。値は、スカラまたは配列とします。
結果の型、型パラメータおよび形状
X と同じ型および同じ種別型パラメータのスカラとします。
結果の値
結果の値は、b1-p とします。ここで b および p は、X と同じ型および同じ種別型パラメータの数
体系における 516 ページの「実数の数体系」の項で定義した値とします。
第 11 章
555
組み込み手続き
組み込み手続きの仕様
EXIT(STATUS)
省略可能な引き数
STATUS
機能
すべてのファイルを閉じ、プログラムを終了させます。
分類
規格外のサブルーチン
引き数
STATUS は、整数型でなければなりません。
STATUS が指定されている場合、呼び出し側プログラムは STATUS に関するリターンコード ス
テータスを返して終了します。指定されていない場合、リターンコード ステータスは不定にな
ります。
csh では、$status 環境変数は、最後に実行されたコマンドのリターンコードを保持します。
ksh では、$? 環境変数はリターンコードを保持します。
EXP(X)
機能
指数関数
分類
要素別処理関数
引き数
X は、実数型または複素数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
556
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の値
結果の値は、ex の処理系依存の近似値とします。X が複素数型のとき、虚部の値はラジアンを単
位とします。
個別名
CEXP,CDEXP, DEXP, QEXP,ZEXP
EXPONENT(X)
機能
引き数の値を数体系の数として表現したときの指数部を返します。
分類
要素別処理関数
引き数
X は、実数型でなければなりません。
結果の型
基本整数型とします。
結果の値
X が 0.0 でなく、指数部 e が基本整数型の範囲内にあるとき、結果の値は X の値を数体系の数で
表現したときの指数部 e とします (516 ページの「実数の数体系」の項を参照 )。処理系が e を
基本整数型で表現できないときの結果は、規定しません。EXPONENT(X) の値は、X が 0.0 のとき
0 とします。
FLOOR(A)
機能
引き数の値以下で最大の整数を返します。
分類
要素別処理関数
第 11 章
557
組み込み手続き
組み込み手続きの仕様
引き数
A は、実数型でなければなりません。
結果の型 / 型パラメータ
基本整数型とします。
結果の値
結果の値は、A 以下で最大の整数とします。処理系がこの値を基本整数型で表現できないときの
結果は、規定しません。
FLUSH(LUNIT)
機能
論理装置で保留中の入出力バッファーを初期化します。
分類
規格外のサブルーチン
FNUM(UNIT)
機能
オペレーティングシステムのファイル記述子を取得します。
分類
規格外の問い合わせ関数
FRACTION(X)
機能
引き数の値を数体系の数として表現したときの小数部を返します。
分類
要素別処理関数
558
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は X b-e とします。ここで b および e は、516 ページの「実数の数体系」の項で定義し
た値とします。X が 0.0 であるとき、結果の値は 0.0 とします。
FREE(P)
機能
メモリーのブロックを解放します。
分類
規格外のサブルーチン
FSET(UNIT, NEWFD, OLDFD)
機能
システムファイル記述子を論理装置に結び付けます。
分類
規格外のサブルーチン
FSTREAM(UNIT)
機能
C 言語の FILE ストリームポインターを検索します。
分類
規格外の問い合わせ関数
第 11 章
559
組み込み手続き
組み込み手続きの仕様
GETARG(N, STRING)
機能
プログラムに渡す引き数を取得します。
分類
規格外のサブルーチン
引き数
N
整数型でなければなりません。N は、どのコマンド行引き数が要求されている
のかを指定します。N=1 の場合、プログラム名を返します。N=0 の場合は、す
べて空白を返します。
STRING
文字変数でなければなりません。要求されたコマンド行引き数を割り当て、一
番最後に空白を補います。要求された引き数が STRING よりも長い場合は、切
り捨てを行ったものを STRING に割り当てます。
GETENV(VAR, VALUE)
機能
システム環境変数の値を返します。
分類
規格外のサブルーチン
引き数
VAR および VALUE は、文字型となります。VAR は、環境変数名を指定します。文字変数 VALUE
には環境変数の値を割り当てます。VALUE は、値を保持するのに十分な長さで宣言しなければな
りません。環境変数が定義されていない場合、VALUE にはすべて空白が設定されます。
GRAN()
機能
ガウス正規乱数を生成します。
560
第 11 章
組み込み手続き
組み込み手続きの仕様
分類
規格外の要素別処理関数
結果
REAL(4) とします。GRAN によって生成された乱数は、平均値を 0.0、標準偏差を 1.0、近似値の
範囲を -5.0 ~ +5.0 とします。
HFIX(A)
機能
INTEGER(2) 型に変換します。
分類
規格外の要素別処理関数
引き数
A は、整数型、実数型、倍精度型または複素数型でなければなりません。
結果
INTEGER(2) 型とします。
HUGE(X)
機能
引き数と同じ型および同じ種別型パラメータの数体系における最大の数値を返します。
分類
問い合わせ関数
引き数
X は、整数型または実数型でなければなりません。値は、スカラまたは配列とします。
第 11 章
561
組み込み手続き
組み込み手続きの仕様
結果の型、型パラメータおよび形状
X と同じ型および同じ種別型パラメータのスカラとします。
結果の値
X が整数型のとき、結果の値は rq - 1 とします。
(1 - b-p) b ** emax
X が実数型のときですここで r, q, b, p および emax は、516 ページの「実数の数体系」の項で定
義した値とします。
IACHAR(C)
機能
ASCII 大小順序における文字の位置を返します。
分類
要素別処理関数
引き数
C は、長さ 1 の基本文字型でなければなりません。
結果の型 / 型パラメータ
基本整数型とします。
結果の値
ISO 646:1983 (“Information technology — ISO 7-bit coded character set for information
interchange”) が規定する符号体系によって定義された大小順序中に C がある場合、結果の値は、
その大小順序中の文字 C の位置とし、不等式 (0 <= IACHAR(C) <= 127) を満たします。
C が ASCII 大小順序中にない場合、処理系依存の値を返します。結果の値を大小比較した式の値
は、文字列大小比較関数 LGE, LGT, LLE および LLT の結果と一致します。たとえば、LLE(C, D)
が .TRUE. であるとき、IACHAR(C) .LE. IACHAR(D) は .TRUE. とします。ここで C および D
は、処理系が表現可能な任意の文字です。
562
第 11 章
組み込み手続き
組み込み手続きの仕様
IADDR(X)
機能
X のアドレスを返します。
分類
規格外の問い合わせ関数
引き数
X は、どの型でもかまいません。
結果の型
結果は、基本整数型とします。
例については、537 ページの「BADDRESS(X)」の項を参照してください。
IAND(I, J)
機能
論理積
分類
要素別処理関数
引き数
I
整数型でなければなりません。
J
I と同じ種別型パラメータの整数型でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
第 11 章
563
組み込み手続き
組み込み手続きの仕様
結果の値
結果の値は、I と J をビットごとに組み合わせ、表 11-6 に従って得られる値とします。
表 11-6 IAND 組み込み関数の真偽表
I
J
IAND(I, J)
1
1
1
1
0
0
0
1
0
0
0
0
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
個別名
BIAND, HIAND, IIAND, JIAND, KIAND
IARGC()
機能
プログラムに渡す引き数の個数を取得します。
分類
規格外の要素別処理関数
結果の型
整数型とします。
結果の値
プログラムに引き数を渡さない場合、IARGC は 0 を返します。引き数を渡す場合、IARGC は、コ
マンド行に引き数の個数とプログラム名を返します。
564
第 11 章
組み込み手続き
組み込み手続きの仕様
IBCLR(I, POS)
機能
1 つのビットを 0 に設定します。
分類
要素別処理関数
引き数
I
整数型でなければなりません。
POS
整数型でなければなりません。値は 0 以上、BIT_SIZE(I) 未満でなければな
りません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、I の第 POS ビットを 1 に設定する場合以外は I のビット列とします。整数値をビッ
ト列として解釈する数体系については、515 ページの「ビットの数体系」の項を参照してくださ
い。
個別名
BBCLR, HBCLR, IIBCLR, JIBCLR, KIBCLR
IBITS(I, POS, LEN)
機能
ビットの並びを取り出します。
分類
要素別処理関数
引き数
I
第 11 章
整数型でなければなりません。
565
組み込み手続き
組み込み手続きの仕様
POS
整数型でなければならず、POS + LEN が BIT_SIZE(I) 以下になる非負の値で
なければなりません。
LEN
整数型であって、値が非負でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、I の第 POS ビットから始まる LEN 個のビットを右詰めし、残りのビットを 0 にし
た値とします。整数値をビット列として解釈する数体系については、515 ページの「ビットの数
体系」の項を参照してください。
個別名
BBITS, HBITS, IIBITS, JIBITS, KIBITS
IBSET(I, POS)
機能
1 つのビットを 1 に設定します。
分類
要素別処理関数
引き数
I
整数型でなければなりません。
POS
整数型であって、値は 0 以上、BIT_SIZE(I) 未満でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、I の第 POS ビットを 1 に設定する場合以外は I のビット列とします。整数値をビッ
ト列として解釈する数体系については、515 ページの「ビットの数体系」の項を参照してくださ
い。
566
第 11 章
組み込み手続き
組み込み手続きの仕様
個別名
HBSET, IIBSET,JIBSET,KIBSET
ICHAR(C)
機能
引き数にした文字の種別型パラメータに対応する処理系大小順序における文字の位置を返しま
す。
分類
要素別処理関数
引き数
C は、長さ 1 の文字型であって、値が処理系で表現可能な文字でなければなりません。
結果の型 / 型パラメータ
基本整数型とします。
結果の値
結果の値は、C の種別型パラメータに対応する処理系大小順序中の C の位置とし、0 <=
IACHAR(C) <=n-1 の範囲の値とします。ここで n は、その処理系大小順序における文字の個数
とします。
処理系で表現可能な任意の文字 C および D に対して、ICHAR(C) .LE. ICHAR(D) が .TRUE. のと
き、およびそのときに限り C.LE.D が .TRUE. になり、ICHAR(C).EQ. ICHAR(D) が .TRUE. の
とき、およびそのときに限り C.EQ.D が .TRUE. になります。
IDATE(MONTH, DAY, YEAR)
機能
現在のシステムの日付 ( 年月日 ) を返します。
分類
規格外のサブルーチン
第 11 章
567
組み込み手続き
組み込み手続きの仕様
引き数
MONTH, DAY, YEAR は、整数型でなければなりません。
IDIM(X, Y)
機能
正の整数型の超過分
分類
規格外の関数
引き数
X
整数型でなければなりません。
Y
X と同じ種別型パラメータの整数型でなければなりません。
結果の型 / 型パラメータ
X と同じ種別型パラメータの整数型とします。
結果の値
X > Y の場合、IDIM(X, Y) は X-Y とします。X <= Y の場合、IDIM(X, Y) は 0 とします。
個別名
IIDIM,JIDIM. KIDIM
IEOR(I, J)
機能
排他的論理和
分類
要素別処理関数
568
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
I
整数型でなければなりません。
J
I と同じ種別型パラメータの整数型でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、ビットごとに I と J を組み合わせ、表 11-7 に従って得られる値とします。
表 11-7 IEOR 組み込み関数の真偽表
I
J
IEOR(I, J)
1
1
0
1
0
1
0
1
1
0
0
0
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
個別名
BIEOR, HIEOR, IIEOR, JIEOR, KIEOR
IGETARG(N, STR, STRLEN)
機能
コマンド行引き数を取得します。
分類
規格外の問い合わせ関数
第 11 章
569
組み込み手続き
組み込み手続きの仕様
引き数
N
整数型でなければなりません。N は、どのコマンド行引き数が要求されている
のかを指定します。N=0 の場合、プログラム名を返します。
STR
文字変数でなければなりません。要求されたコマンド行引き数の最初の
STRLEN 文字を割り当て、一番最後に空白を補います。要求された引き数が
STR よりも長い場合は、切り捨てを行ったものを STR に割り当てます。
STRLEN
整数型でなければなりません。STRLEN は、STR に割り当てる引き数 N の文字
の個数を指定します。
結果の値
IGETARG は整数値を返し、要求された引き数が見つからない場合に -1 を返すか、コマンド行か
ら STR に複写された文字の個数を示す正の整数を返します。
IJINT(A)
機能
INTEGER(2) 型に変換します。
分類
規格外の要素別処理関数
引き数
A は、INTEGER(4) 型でなければなりません。
結果
INTEGER(2) 型とします。
IMAG(A)
機能
複素数の虚部
570
第 11 章
組み込み手続き
組み込み手続きの仕様
分類
規格外の要素別処理関数
引き数
A は、複素数型または倍精度複素数型でなければなりません。
結果
A が複素数型の場合、実数型とします。A が倍精度複素数型の場合、倍精度型とします。
INDEX(STRING, SUBSTRING, BACK)
省略可能な引き数
BACK
機能
文字列中の部分列の開始位置を返します。
分類
要素別処理関数
引き数
STRING
文字型でなければなりません。
SUBSTRING
STRING と同じ種別型パラメータの文字型でなければなりません。
BACK ( 省略可能 )
論理型でなければなりません。
結果の型 / 型パラメータ
基本整数型とします。
結果の値
場合 1
第 11 章
BACK に .FALSE. を指定するかまたは省略した場合、結果の値は、STRING(I
: I + LEN(SUBSTRING) - 1) = SUBSTRING となる I の正の最小値とし、こ
の値がないときは 0 とします。
571
組み込み手続き
組み込み手続きの仕様
LEN(STRING) < LEN(SUBSTRING) であるときは 0 を返し、LEN(SUBSTRING) =
0 であるときは 1 を返します。
場合 2
BACK に .TRUE. を指定した場合、結果の値は、STRING(I : I +
LEN(SUBSTRING) - 1) = SUBSTRING となる I の最大値とし、この値がないと
きは 0 とします。結果の値は、LEN(STRING) – LEN(SUBSTRING) + 1 以下にな
ります。
LEN(STRING) < LEN(SUBSTRING) であるときは 0 を返し、LEN(SUBSTRING) =
0 であるときは LEN(STRING) + 1 を返します。
個別名
KINDEX
INT(A, KIND)
省略可能な引き数
KIND
機能
整数型に変換します。
分類
要素別処理関数
引き数
A
整数型、実数型または複素数型でなければなりません。
KIND ( 省略可能 )
スカラ整数初期値式でなければなりません。
結果の型 / 型パラメータ
整数型とします。KIND を指定したとき、種別型パラメータは KIND の指定に従います。KIND を
省略したとき、種別型パラメータは基本整数型のものとします。
結果の値
場合 1
572
A が整数型の場合、INT(A) = A とします。
第 11 章
組み込み手続き
組み込み手続きの仕様
場合 2
A が実数型の場合、|A| < 1 であるとき、INT(A) は 0 とします。|A| >= 1 で
あるとき、INT(A) の値は A の絶対値以下で最大の整数に A の符号を付けたも
のとします。
場合 3
A が複素数型の場合、INT(A) の値は A の実部に場合 2 の規則を適用して得ら
れる値とします。処理系が結果の値を指定された整数型で表現できないときの
結果は、規定しません。
個別名
IFIX, IIFIX, IINT, JIFIX, JINT, KIFIX, KINT
INT1(A)
機能
INTEGER(1) 型に変換します。
分類
規格外の要素別処理関数
引き数
A は、整数型、実数型または複素数型でなければなりません。
結果
INTEGER(1) 型とします。A が複素数型の場合、INT1(A) は A の切り捨てられた実部とします。
INT2(A)
機能
INTEGER(2) 型に変換します。
分類
規格外の要素別処理関数
引き数
A は、整数型、実数型または複素数型でなければなりません。
第 11 章
573
組み込み手続き
組み込み手続きの仕様
結果
INTEGER(2) 型とします。A が複素数型の場合、INT2(A) は A の切り捨てられた実部とします。
INT4(A)
機能
INTEGER(4) 型に変換します。
分類
規格外の要素別処理関数
引き数
A は、整数型、実数型または複素数型でなければなりません。
結果
INTEGER(4) 型とします。A が複素数型の場合、INT4(A) は A の切り捨てられた実部とします。
INT8(A)
機能
INTEGER(8) 型に変換します。
分類
規格外の要素別処理関数
引き数
A は、整数型、実数型または複素数型でなければなりません。
結果
INTEGER(8) 型とします。A が複素数型の場合、INT8(A) は A の切り捨てられた実部とします。
個別名
IDINT
574
第 11 章
組み込み手続き
組み込み手続きの仕様
INUM(I)
機能
文字型を INTEGER(2) 型に変換します。
分類
規格外の要素別処理関数
引き数
I は、文字型でなければなりません。
結果
INTEGER(2) 型とします。
IOMSG(N, MSG)
機能
入出力メッセージに関するテキストを出力します。
分類
規格外のサブルーチン
IOR(I, J)
機能
論理和
分類
要素別処理関数
引き数
I
整数型でなければなりません。
J
I と同じ種別型パラメータの整数型でなければなりません。
第 11 章
575
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、ビットごとに I と J を組み合わせ、表 11-8 に従って得られる値とします。
表 11-8 IOR 組み込み関数の真偽表
I
J
IOR(I, J)
1
1
1
1
0
1
0
1
1
0
0
0
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
個別名
BIOR, HIOR, IIOR, JIOR, KIOR
IQINT(A)
機能
整数型に変換します。
分類
規格外の要素別処理関数
引き数
A は、REAL(16) 型でなければなりません。
結果
整数型とします。
576
第 11 章
組み込み手続き
組み込み手続きの仕様
個別名
IIQINT, JIQINT,KIQINT
IRAND()
機能
擬似乱数を生成します。
分類
規格外の要素別処理関数
結果の型 / 型パラメータ
INTEGER(4) 型とします。
結果の値
IRAND は、0 ~ 215-1 の範囲の値を生成します。
注記
IRAND および RAND を使用して擬似乱数生成器を再始動する場合についての詳細
は、632 ページの「SRAND(ISEED)」の項を参照してください。
IRANP(X)
機能
ポアソン分布乱数を生成します。
分類
規格外の要素別処理関数
引き数
X は、REAL(4) 型であって、0.0 ~ 87.33 の範囲の値でなければなりません。性能をより向上さ
せるには、X を 50.0 よりも小さくしてください ( 後述の「結果の値」の項を参照 )。
第 11 章
577
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
INTEGER(4) 型とします。
結果の値
X <= 0.0 であるとき、IRANP はエラーコード -1 を返します。
X > 87.33 であるとき、IRANP はエラーコード -2 を返します。
IRANP は、積が exp(-X) よりも小さくなるまで分布乱数の指数部を計算します。IRANP が返す
乱数は、必要な指数から 1 を引いた数になります。IRANP は、RAND に対する X+1 回の呼び出し
から平均を出すので、X の値は 50 よりも小さくするようにしてください。
ISHFT(I, SHIFT)
機能
論理桁移動
分類
要素別処理関数
引き数
I
整数型でなければなりません。
SHIFT
整数型であって、絶対値が BIT_SIZE(I) 以下でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、I のビットを SHIFT 個だけ桁移動して得られる値とします。
SHIFT が正である場合、桁移動は左方向に行います。SHIFT が負である場合、桁移動は右方向に
行います。SHIFT が 0 である場合、桁移動は行いません。左端または右端から外にはみ出した
ビットは捨てられ、反対側の端に 0 が入ります。
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
578
第 11 章
組み込み手続き
組み込み手続きの仕様
個別名
BSHFT, HSHFT, IISHFT, JISHFT, KISHFT
ISHFTC(I, SHIFT, SIZE)
省略可能な引き数
SIZE
機能
右端のビット並びの循環桁移動を行います。
分類
要素別処理関数
引き数
I
整数型でなければなりません。
SHIFT
整数型であって、絶対値が SIZE 以下でなければなりません。
SIZE ( 省略可能 )
整数型でなければなりません。SIZE の値は、正でなければならず、
BIT_SIZE(I) 以下でなければなりません。SIZE を省略したとき、
BIT_SIZE(I) の値を指定したものとみなします。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、I の右端の SIZE 個のビットを SHIFT 個だけ循環桁移動して得られる値とします。
SHIFT が正である場合、循環桁移動は左方向に行います。SHIFT が負である場合、循環桁移動は
右方向に行います。SHIFT が 0 である場合、循環桁移動は行いません。どのビットも捨てられる
ことはありません。循環桁移動しないビットは、変わりません。
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
第 11 章
579
組み込み手続き
組み込み手続きの仕様
個別名
HSHFTC,ISHFTC, JISHFTC, KISHFTC
ISIGN(A, B)
機能
A の絶対値と B の符号の積
分類
規格外の要素別処理関数
引き数
A
整数型でなければなりません。
B
A と同じ種別型パラメータの整数型でなければなりません。
結果の型 / 型パラメータ
A と同じとします。
結果の値
結果の値は、B >= 0 であるとき |A| とし、B < 0 であるとき -|A| とします。
ISNAN(X)
機能
値が NaN ( 数値ではありません ) であるかを判定します。
分類
規格外の要素別処理関数
引き数
X は、実数型でなければなりません。
580
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の型
論理型とします。
IXOR(I, J)
機能
排他的論理和
分類
規格外の要素別処理関数
引き数
I
整数型でなければなりません。
J
I と同じ種別型パラメータの整数型でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、ビットごとに I と J の排他的論理和を算出し、表 11-9 に従って得られる値としま
す。
表 11-9 IXOR 組み込み関数の真偽表
I
J
IXOR(I, J)
1
1
0
1
0
1
0
1
1
0
0
0
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
第 11 章
581
組み込み手続き
組み込み手続きの仕様
個別名
BIXOR, HIXOR, IIXOR, JIXOR
IZEXT(A)
機能
ゼロ (0) を拡張します。
分類
規格外の総称要素別処理関数
引き数
A
INTEGER(1) 型、INTEGER(2) 型、LOGICAL(1) 型または LOGICAL(2) 型でな
ければなりません。
結果の型 / 型パラメータ
結果の型は、INTEGER(2) 型とします。
結果
IZEXT は、実符号ビットの代わりに 0 で符号を拡張することによって、A を INTEGER(2) に変換
します。
JNUM(I)
機能
文字型を整数型に変換します。
分類
規格外の要素別処理関数
引き数
I は、文字型でなければなりません。
582
第 11 章
組み込み手続き
組み込み手続きの仕様
結果
整数型とします。
JZEXT(A)
機能
ゼロ (0) を拡張します。
分類
規格外の総称要素別処理関数
引き数
A
INTEGER(1) 型、INTEGER(2) 型、INTEGER(4) 型、LOGICAL(1) 型、
LOGICAL(2) 型または LOGICAL(4) 型でなければなりません。
結果の型 / 型パラメータ
結果の型は、INTEGER(4) 型とします。
結果
JZEXT は、実符号ビットの代わりに 0 で符号を拡張することによって、A を INTEGER(4) に変換
します。
KIND(X)
機能
X の種別型パラメータ値を返します。
分類
問い合わせ関数
引き数
X は、どの組み込み型でもかまいません。
第 11 章
583
組み込み手続き
組み込み手続きの仕様
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
結果の値は、X の種別型パラメータ値とします。
KZEXT(A)
機能
ゼロ (0) を拡張します。
分類
規格外の総称要素別処理関数
引き数
A
INTEGER(1) 型、INTEGER(2) 型、INTEGER(4) 型、INTEGER(8) 型、
LOGICAL(1) 型、LOGICAL(2) 型、LOGICAL(4) 型または LOGICAL(8) 型でな
ければなりません。
結果の型 / 型パラメータ
結果の型は、INTEGER(8) 型とします。
結果
KZEXT は、実符号ビットの代わりに 0 で符号を拡張することによって、A を INTEGER(8) に変換
します。
LBOUND(ARRAY, DIM)
省略可能な引き数
DIM
機能
配列のすべての次元の下限または指定した次元の下限を返します。
584
第 11 章
組み込み手続き
組み込み手続きの仕様
分類
問い合わせ関数
引き数
ARRAY
どの型でもかまいません。スカラであってはなりません。空状態のポインター
または割り付けられていない割り付け配列であってはなりません。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は、ARRAY の次元数とします。対応する実引き数は、省略可能な仮引き
数であってはなりません。
結果の型、型パラメータおよび形状
結果は、基本整数型とします。DIM を指定したときはスカラとし、省略したときは大きさ n の 1
次元配列とします。ここで n は、ARRAY の次元数とします。
結果の値
場合 1
LBOUND(ARRAY, DIM) の値は、ARRAY が部分配列または配列式であって、全
体配列および配列構造体成分でない場合、1 とします。全体配列または配列構
造体成分である場合、LBOUND(ARRAY, DIM) の値は次のようになるものとし
ます。
•
ARRAY の DIM 番目の次元の大きさが 0 でないとき (ARRAY が大きさ引き継ぎ
配列であって DIM 番目の次元が大きさを持たないときを含みます ) は、
ARRAY の添え字 DIM の下限値とします。
または
•
場合 2
DIM 番目の次元の大きさが 0 であるときは 1 とします。
LBOUND(ARRAY) の i 番目 (i= 1, 2, ..., n) の要素の値は、LBOUND(ARRAY, i)
とします。ここで n は、ARRAY の次元数とします。
個別名
KLBOUND
第 11 章
585
組み込み手続き
組み込み手続きの仕様
LEN(STRING)
機能
文字型要素の長さを返します。
分類
問い合わせ関数
引き数
STRING は、文字型であって、値はスカラまたは配列でなければなりません。
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
結果の値は、STRING がスカラである場合、STRING 中の文字数とし、STRING が配列である場
合、STRING の要素中の文字数とします。
個別名
KLEN
LEN_TRIM(STRING)
機能
末尾の空白を除いた文字引き数の長さを返します。
分類
要素別処理関数
引き数
STRING は、文字型でなければなりません。
結果の型 / 型パラメータ
基本整数型とします。
586
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の値
結果の値は、STRING の末尾の空白をすべて取り除いたのち、残った文字の個数とします。引き
数が空白以外の文字を 1 つも持たないとき、結果の値は 0 とします。
個別名
KLEN_TRIM
LGE(STRING_A, STRING_B)
機能
ASCII 大小順序に基づいて文字列が辞書順でもう 1 つの文字列以上であるかどうかを判定しま
す。
分類
要素別処理関数
引き数
STRING_A
基本文字型でなければなりません。
STRING_B
基本文字型でなければなりません。
結果の型 / 型パラメータ
基本論理型とします。
結果の値
文字列の長さが等しくない場合、短いほうの文字列の右側に、長い方の文字列の長さまで空白が
あるものとみなして、比較を行います。
どちらかの文字列に ASCII 文字集合に含まれない文字があったときの結果は、処理系依存とし
ます。
結果の値は、文字列が等しいかまたは ASCII 大小順序に基づいて辞書順で STRING_A が
STRING_B の後になるとき .TRUE. とし、それ以外のとき .FALSE. とします。STRING_A および
STRING_B の両方とも長さが 0 である場合、結果の値は、.TRUE. とします。
第 11 章
587
組み込み手続き
組み込み手続きの仕様
LGT(STRING_A, STRING_B)
機能
ASCII 大小順序に基づいて文字列がもう 1 つの文字列より辞書順で大きいかどうかを判定しま
す。
分類
要素別処理関数
引き数
STRING_A
基本文字型でなければなりません。
STRING_B
基本文字型でなければなりません。
結果の型 / 型パラメータ
基本論理型とします。
結果の値
文字列の長さが等しくない場合、短いほうの文字列の右側に、長い方の文字列の長さまで空白が
あるものとみなして、比較を行います。
どちらかの文字列に ASCII 文字集合に含まれない文字があったときの結果は、処理系依存とし
ます。
結果の値は、ASCII 大小順序に基づいて辞書順で STRING_A が STRING_B の後になるとき
.TRUE. とし、それ以外のとき .FALSE. とします。STRING_A および STRING_B の両方とも長さ
が 0 である場合、結果の値は、.TRUE. とします。
LLE(STRING_A, STRING_B)
機能
ASCII 大小順序に基づいて文字列が辞書順でもう 1 つの文字列以下かどうかを判定します。
分類
要素別処理関数
588
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
STRING_A
基本文字型でなければなりません。
STRING_B
基本文字型でなければなりません。
結果の型 / 型パラメータ
基本論理型とします。
結果の値
文字列の長さが等しくない場合、短いほうの文字列の右側に、長い方の文字列の長さまで空白が
あるものとみなして、比較を行います。
どちらかの文字列に ASCII 文字集合に含まれない文字があったときの結果は、処理系依存とし
ます。
結果の値は、文字列が等しいかまたは ASCII 大小順序に基づいて辞書順で STRING_A が
STRING_B の前になるとき .TRUE. とし、それ以外のとき .FALSE. とします。STRING_A および
STRING_B の両方とも長さが 0 である場合、結果の値は、.TRUE. とします。
LLT(STRING_A, STRING_B)
機能
ASCII 大小順序に基づいて文字列がもう 1 つの文字列より辞書順で小さいかどうかを判定しま
す。
分類
要素別処理関数
引き数
STRING_A
基本文字型でなければなりません。
STRING_B
基本文字型でなければなりません。
結果の型 / 型パラメータ
基本論理型とします。
第 11 章
589
組み込み手続き
組み込み手続きの仕様
結果の値
文字列の長さが等しくない場合、短いほうの文字列の右側に、長い方の文字列の長さまで空白が
あるものとみなして、比較を行います。
どちらかの文字列に ASCII 文字集合に含まれない文字があったときの結果は、処理系依存とし
ます。
結果の値は、ASCII 大小順序に基づいて辞書順で STRING_A が STRING_B の前になるとき
.TRUE. とし、それ以外のとき .FALSE. とします。STRING_A および STRING_B の両方とも長さ
が 0 である場合、結果の値は、.TRUE. とします。
LOC(X)
機能
引き数のアドレスを返します。
分類
規格外の問い合わせ関数
LOG(X)
機能
自然対数
分類
要素別処理関数
引き数
X は、実数型または複素数型でなければなりません。X が実数型のとき、値は正でなければなり
ません。X が複素数型のとき、値は (0.0,0.0) であってはなりません。
結果の型 / 型パラメータ
X と同じとします。
590
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の値
結果の値は、logex の処理系依存の近似値とします。複素数型の結果の値は、-π<ω<=π の範囲
にある虚部 ω を持つ主値とします。結果の虚部は、引き数の実部が負であって虚部が 0.0 であ
るときに限り、π とします。
個別名
ALOG, CDLOG, CLOG, DLOG, QLOG, ZLOG
LOG10(X)
機能
常用対数
分類
要素別処理関数
引き数
X は、実数型であって、値が正でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、log10X の処理系依存の近似値とします。
個別名
ALOG10, DLOG10, QLOG10
LOGICAL(L, KIND)
省略可能な引き数
KIND
第 11 章
591
組み込み手続き
組み込み手続きの仕様
機能
論理型の種別型パラメータを変換します。
分類
要素別処理関数
引き数
L
論理型でなければなりません。
KIND ( 省略可能 )
スカラ整数初期値式でなければなりません。
結果の型 / 型パラメータ
論理型。KIND を指定したとき、種別型パラメータは KIND の指定に従います。KIND を省略した
とき、種別型パラメータは、基本論理型のものとします。
結果の値
結果の値は、L とします。
LSHFT(I, SHIFT)
機能
桁を左方向に移動する
分類
規格外の要素別処理関数
LSHIFT(I, SHIFT)
機能
桁を左方向に移動する
分類
規格外の要素別処理関数
592
第 11 章
組み込み手続き
組み込み手続きの仕様
MALLOC(SIZE)
機能
メモリーのブロックを割り付けます。
分類
規格外の変形関数
MATMUL(MATRIX_A, MATRIX_B)
機能
数値型行列または論理型行列の乗算を実行します。
分類
変形関数
引き数
MATRIX_A
数値型 ( 整数型、実数型または複素数型 ) または論理型でなければなりませ
ん。値は、1 次元配列または 2 次元配列でなければなりません。
MATRIX_B
MATRIX_A が数値型のとき、MATRIX_B も数値型でなければならず、MATRIX_A
が論理型のとき、MATRIX_B も論理型でなければなりません。値は、1 次元配
列または 2 次元配列でなければなりません。
MATRIX_A が 1 次元配列の場合、MATRIX_B は、2 次元配列でなければなりま
せん。MATRIX_B が 1 次元配列の場合、MATRIX_A は、2 次元配列でなければ
なりません。MATRIX_B の最初 ( またはただ 1 つ ) の次元の大きさは、
MATRIX_A の最後 ( またはただ 1 つ ) の次元の大きさに等しくなければなりま
せん。
結果の型、型パラメータおよび形状
引き数が数値型のとき、結果の型および種別型パラメータは、MATRIX_A および MATRIX_B の型
によって決まります。
引き数が論理型のとき、結果は、引き数の種別型パラメータを持つ論理型とします。
結果の形状は、引き数の形状によって次のように決まります。
第 11 章
593
組み込み手続き
組み込み手続きの仕様
場合 1
MATRIX_A の形状が [n, m] であり、MATRIX_B の形状が [m, k] である場合、結果
の形状は [n, k] とします。
場合 2
MATRIX_A の形状が [m] であり、MATRIX_B の形状が [m, k] である場合、結果の
形状は [k] とします。
場合 3
MATRIX_A の形状が [n, m] であり、MATRIX_B の形状が [m] である場合、結果の
形状は [n] とします。
結果の値
場合 1
引き数が数値型のとき、結果の要素 (i, j) の値は SUM(MATRIX_A(i,:) *
MATRIX_B(:, j)) とします。引き数が論理型のとき、値は
ANY(MATRIX_A(i, :) .AND. MATRIX_B(:, j)) とします。
場合 2
引き数が数値型のとき、結果の要素 (j) の値は SUM(MATRIX_A(:) *
MATRIX_B(:, j)) とします。引き数が論理型のとき、値は
ANY(MATRIX_A(:) .AND. MATRIX_B(:, j)) とします。
場合 3
引き数が数値型のとき、結果の要素 (i) の値は SUM(MATRIX_A(i, :) *
MATRIX_B(:)) とします。引き数が論理型のとき、値は ANY(MATRIX_A
(i, :) .AND. MATRIX_B(:)) とします。
MAX(A1, A2, A3, ...)
省略可能な引き数
A3, ...
機能
最大値を選択します。
分類
要素別処理関数
引き数
引き数はすべて同じ整数型または実数型でなければならず、すべて同じ種別型パラメータを持た
なければなりません。
594
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
引き数と同じとします。
結果の値
結果の値は、最大の引き数の値とします。
個別名
AIMAX0,AJMAX0, AKMAX0, AMAX0, AMAX1, DMAX1, IMAX0, IMAX1, JMAX0, JMAX1, KMAX0, KMAX1,
MAX0, MAX1, QMAX1
MAXEXPONENT(X)
機能
引き数と同じ型および同じ種別型パラメータの数体系で最大の指数を返します。
分類
問い合わせ関数
引き数
X は、実数型でなければなりません。値は、スカラまたは配列とします。
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
結果の値は、516 ページの「実数の数体系」の項で定義した値 emax とします。
MAXLOC(ARRAY, MASK)
省略可能な引き数
MASK
第 11 章
595
組み込み手続き
組み込み手続きの仕様
機能
MASK によって指定した ARRAY の要素のうち、最大の値を持っている最初の要素の位置を返しま
す。
分類
変形関数
引き数
ARRAY
整数型または実数型でなければならず、スカラであってはなりません。
MASK ( 省略可能 )
論理型でなければならず、ARRAY と形状適合しなければなりません。
結果の型、型パラメータおよび形状
結果は、基本整数型となり、ARRAY の次元数に等しい大きさの 1 次元配列とします。
結果の値
場合 1
MASK を省略した場合、結果は ARRAY のすべての要素の最大値に等しい要素の
各次元の添え字値を要素とする 1 次元配列とします。
返された i 番目の添え字は、1 から ei までの範囲の値とします。ここで ei は、
ARRAY の i 番目の次元の寸法とします。
2 個以上の要素が最大値になるとき、添え字が返される要素は配列要素順序で
最初の要素とします。ARRAY の大きさが 0 であるとき、結果の値は処理系依存
とします。
場合 2
MASK を指定した場合、結果は、MASK 中の .TRUE. である要素に対応する
ARRAY のすべての要素の最大値に等しい要素の各次元の添え字値を要素とする
1 次元配列とします。
返された i 番目の添え字は、1 から ei の範囲の値とします。ここで ei は、
ARRAY の i 番目の次元の寸法とします。
2 個以上の要素が最大値になるとき、添え字が返される要素は配列要素順序で
最初の要素とします。
要素がないとき ( すなわち、ARRAY の大きさが 0 であるか、または MASK のす
べての要素の値が .FALSE. であるとき ) 結果の値は処理系依存とします。
596
第 11 章
組み込み手続き
組み込み手続きの仕様
処理系が結果のある要素の値を基本整数型で表現することができないとき、その要素は不定とし
ます。
個別名
KMAXLOC
MAXVAL(ARRAY, DIM, MASK)
省略可能な引き数
DIM, MASK
機能
DIM 番目の次元について、MASK 中の .TRUE. である要素に対応した ARRAY の要素の最大値を調
べます。
分類
変形関数
引き数
ARRAY
整数型または実数型でなければならず、スカラであってはなりません。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は、ARRAY の次元数とします。対応する実引き数は、省略可能な仮引き
数であってはなりません。
MASK ( 省略可能 )
論理型でなければならず、ARRAY と形状適合しなければなりません。
結果の型、型パラメータおよび形状
結果は、ARRAY と同じ型および同じ種別型パラメータとします。
DIM が省略されているかまたは ARRAY が 1 次元配列であるときは、スカラとします。それ以外
のとき、結果は n-1 次元配列とし、形状は (d1, d2, ..., dDIM-1, dDIM+1, ..., dn) とします。ここで
(d1, d2, ..., dn) は、ARRAY の形状とします。
第 11 章
597
組み込み手続き
組み込み手続きの仕様
結果の値
場合 1
MAXVAL(ARRAY) の結果の値は、ARRAY の全要素中の最大値とします。ただし、
ARRAY の大きさが 0 であるときは、ARRAY の型および種別型パラメータの数
体系に対して処理系が定義している絶対値が最も大きい負の値とします。
場合 2
MAXVAL(ARRAY, MASK = MASK) の結果の値は、MASK 中の .TRUE. である要素
と対応している ARRAY の要素の最大値とします。ただし、.TRUE. である要素
がないときは、ARRAY の型および種別型パラメータの数体系に対して処理系が
定義している絶対値が最も大きい負の値とします。
場合 3
ARRAY が 1 次元配列のとき、MAXVAL(ARRAY, DIM [,MASK]) の結果の値は
MAXVAL(ARRAY [,MASK = MASK]) とします。2 次元以上のとき、
MAXVAL(ARRAY, DIM [,MASK]) の要素 (s1, s2, ..., sDIM-1, sDIM+1, ..., sn) の値
は次のとおりとします。
MAXVAL(ARRAY(s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn) [, MASK =
MASK(s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn) ] )
MCLOCK()
機能
プログラムに時間アカウンティングを返します。
分類
規格外の問い合わせ関数
結果の型
整数型とします。
結果の値
マイクロセカンド単位で返された値は、現在のプロセスのユーザー時間と、すべての子プロセス
のユーザー時間およびシステム時間の合計とします。
MERGE(TSOURCE, FSOURCE, MASK)
機能
MASK の値に従っていずれか一方の値を選択します。
598
第 11 章
組み込み手続き
組み込み手続きの仕様
分類
要素別処理関数
引き数
TSOURCE
どの型でもかまいません。
FSOURCE
TSOURCE と同じ型および同じ種別型パラメータでなければなりません。
MASK
論理型でなければなりません。
結果の型 / 型パラメータ
TSOURCE と同じとします。
結果の値
MASK が .TRUE. のとき、結果の値は TSOURCE とし、MASK が .FALSE. のとき、結果の値は
FSOURCE とします。
MIN(A1, A2, A3, ...)
省略可能な引き数
A3, ...
機能
最小値を選択します。
分類
要素別処理関数
引き数
引き数は、すべて同じ整数型または実数型でなければならず、すべて同じ種別型パラメータでな
ければなりません。
結果の型 / 型パラメータ
引き数と同じとします。
第 11 章
599
組み込み手続き
組み込み手続きの仕様
結果の値
結果の値は、最小の引き数の値とします。
個別名
AIMIN0, AJMIN0, AKMIN0, AMIN0, AMIN1, DMIN1, IMIN0, IMIN1, JMIN0, JMIN1, KMIN0, KMIN1,
MIN0, MIN1, QMIN1
MINEXPONENT(X)
機能
引き数と同じ型および同じ種別型パラメータの数体系で最小の指数を返します。
分類
問い合わせ関数
引き数
X は、実数型でなければなりません。値は、スカラまたは配列とします。
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
結果の値は 516 ページの「実数の数体系」の項で定義した値 emin とします。
MINLOC(ARRAY, MASK)
省略可能な引き数
MASK
機能
MASK によって指定された ARRAY の要素のうち、最小の値を持っている最初の要素の位置を返し
ます。
600
第 11 章
組み込み手続き
組み込み手続きの仕様
分類
変形関数
引き数
ARRAY
整数型または実数型でなければなければならず、スカラであってはなりませ
ん。
MASK ( 省略可能 )
論理型でなければならず、ARRAY と形状適合しなければなりません。
結果の型、型パラメータおよび形状
結果は、基本整数型とし、ARRAY の次元数に等しい大きさの 1 次元配列とします。
結果の値
場合 1
MASK を省略した場合、結果は、ARRAY のすべての要素の最小値に等しい要素
の各次元の添え字値を要素とする 1 次元配列とします。
返された i 番目の添え字は、1 から ei の範囲の値とします。ここで ei は、
ARRAY の i 番目の次元の寸法とします。
2 個以上の要素が最小値になるとき、添え字が返される要素は配列要素順序で
最初の要素とします。ARRAY の大きさが 0 であるとき、結果の値は処理系依存
とします。
場合 2
MASK を指定した場合、結果は、MASK 中の .TRUE. である要素に対応する
ARRAY のすべての要素の最小値に等しい要素の各次元の添え字値を要素とする
1 次元配列とします。
返された i 番目の添え字は、1 から ei の範囲の値とします。ここで ei は、
ARRAY の i 番目の次元の大きさとします。2 個以上の要素が最小値になると
き、添え字が返される要素は配列要素順序で最初の要素とします。
ARRAY の大きさが 0 であるかまたは MASK のすべての要素が .FALSE. である
とき、結果の値は処理系依存とします。
処理系が結果のある要素の値を基本整数型で表現することができないとき、その要素は不定とし
ます。
個別名
KMINLOC
第 11 章
601
組み込み手続き
組み込み手続きの仕様
MINVAL(ARRAY, DIM, MASK)
省略可能な引き数
DIM, MASK
機能
DIM 番目の次元について、MASK 中の .TRUE. である要素に対応した ARRAY の要素の最小値を調
べます。
分類
変形関数
引き数
ARRAY
整数型または実数型でなければならず、スカラであってはなりません。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は、ARRAY の次元数とします。対応する実引き数は、省略可能な仮引き
数であってはなりません。
MASK ( 省略可能 )
論理型でなければならず、ARRAY と形状適合しなければなりません。
結果の型、型パラメータおよび形状
結果は、ARRAY と同じ型および同じ種別型パラメータとします。DIM が省略されているかまたは
ARRAY が 1 次元配列であるときは、スカラとします。それ以外のとき、結果は n-1 次元配列と
し、形状は (d1, d2, ..., dDIM-1, dDIM+1, ..., dn) とします。ここで (d1, d2, ..., dn) は、ARRAY の形状
とします。
結果の値
場合 1
MINVAL(ARRAY) の結果の値は、ARRAY の全要素中の最大値とします。ただし、
ARRAY の大きさが 0 であるときは、ARRAY の型および種別型パラメータの数
体系に対して処理系が定義している正の最大値とします。
場合 2
MINVAL(ARRAY, MASK = MASK) の結果の値は、MASK 中の .TRUE. である要素
と対応している ARRAY の要素の最小値とします。ただし、.TRUE. である要素
がないときは、ARRAY の型および種別型パラメータの数体系に対して処理系が
定義している正の最大値とします。
602
第 11 章
組み込み手続き
組み込み手続きの仕様
場合 3
ARRAY が 1 次元配列のとき、MINVAL(ARRAY, DIM [,MASK]) の結果の値は
MINVAL(ARRAY [,MASK = MASK]) とします。2 次元以上のとき、
MINVAL(ARRAY, DIM [,MASK]) の要素 (s1, s2, ..., sDIM-1, sDIM+1, ..., sn) の値
は次のとおりとします。
MINVAL(ARRAY(s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn) [, MASK=
MASK(s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn) ] )
MOD(A, P)
機能
余り関数
分類
要素別処理関数
引き数
A
整数型または実数型でなければなりません。
P
A と同じ型および同じ種別型パラメータでなければなりません。
結果の型 / 型パラメータ
A と同じとします。
結果の値
P ≠ 0 のとき、結果の値は A - INT(A/P) * P とします。P=0 のとき、結果は処理系依存としま
す。
個別名
AMOD, BMOD, DMOD, HMOD, IMOD, JMOD, KMOD, QMOD
MODULO(A, P)
機能
剰余関数
第 11 章
603
組み込み手続き
組み込み手続きの仕様
分類
要素別処理関数
引き数
A
整数型または実数型でなければなりません。
P
A と同じ型および同じ種別型パラメータでなければなりません。
結果の型 / 型パラメータ
A と同じとします。
結果の値
場合 1
A が整数型であって P ≠ 0 のとき、MODULO(A, P) の結果の値は A = Q * P
+ R となる値 R とします。Q は、P>0 のとき、0 <= R<P を満たし、P<0 のと
き、P<R <= 0 を満たす整数とします。P=0 のとき、結果は処理系依存としま
す。
場合 2
A が実数型であって P ≠ 0 のとき、結果の値は A -FLOOR (A / P) * P とし
ます。P=0 のとき、結果は処理系依存とします。
MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)
機能
1 つのデータオブジェクトから他のデータオブジェクトにビット列を複写します。
分類
要素別処理サブルーチン
引き数
FROM
整数型でなければなりません。INTENT(IN) 引き数とします。
FROMPOS
非負の整数型でなければなりません。INTENT(IN) 引き数とします。FROMPOS
+ LEN は、BIT_SIZE(FROM) 以下でなければなりません。整数値をビット列と
して解釈する数体系については、515 ページの「ビットの数体系」の項を参照
してください。
LEN
非負の整数型でなければなりません。INTENT(IN) 引き数とします。
604
第 11 章
組み込み手続き
組み込み手続きの仕様
TO
FROM と同じ変数か、または FROM と同じ種別型パラメータ値を持つ整変数で
なければなりません。これは、INTENT(INOUT) 引き数とします。
FROM の位置 FROMPOS から始まる長さ LEN のビット列を TO の位置 TOPOS に複
写します。TO の他のどのビットも変更されません。戻るとき、TOPOS から始
まる TO の LEN ビットは、呼び出し時に FROMPOS から始まる FROM の LEN
ビットが持っていた値に等しくなります。
整数値をビット列として解釈する数体系については、515 ページの「ビットの
数体系」の項を参照してください。
TOPOS
非負の整数型でなければなりません。INTENT(IN) 引き数とします。TOPOS +
LEN は、BIT_SIZE(TO) 以下でなければなりません。
個別名
BMVBITS, HMVBITS
NEAREST(X, S)
機能
与えられた方向で最も近い処理系が表現可能な数を返します。
分類
要素別処理関数
引き数
X
実数型でなければなりません。
S
実数型でなければならず、0.0 であってはなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、X とは異なる、S と同符号の無限大の方向で最も X に近い、処理系が表現可能な数
とします。
第 11 章
605
組み込み手続き
組み込み手続きの仕様
NINT(A, KIND)
省略可能な引き数
KIND
機能
最も近い整数を返します。
分類
要素別処理関数
引き数
A
実数型でなければなりません。
KIND ( 省略可能 )
スカラ整数初期値式でなければなりません。
結果の型 / 型パラメータ
整数型とします。KIND を指定したとき、種別型パラメータは KIND の指定に従います。KIND を
省略したとき、種別型パラメータは基本整数型のものとします。
結果の値
A>0 のとき、NINT(A) の値は INT(A+0.5) とします。A <= 0 のとき、NINT(A) の値は
INT(A-0.5) とします。処理系が指定された整数型の結果を表現することができないときの結果
は、規定しません。
個別名
IDNINT, IIDNNT,IIQNNT, ININT, IQNINT, JIDNNT,JIQNNT, JNINT, KIDNNT, KIQNNT, KNINT
NOT(I)
機能
論理否定
606
第 11 章
組み込み手続き
組み込み手続きの仕様
分類
要素別処理関数
引き数
I は、整数型でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、次の真偽表に従ってビットごとに I の論理否定をとることによって得られる値とし
ます。
表 11-10 NOT 組み込み関数の真偽表
I
NOT(I)
1
0
0
1
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
個別名
BNOT, HNOT, INOT, JNOT, KNOT
OR(I, J)
機能
論理和
分類
規格外の要素別処理関数
第 11 章
607
組み込み手続き
組み込み手続きの仕様
引き数
I
整数型でなければなりません。
J
I と同じ種別型パラメータの整数型でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、次の真偽表に従ってビットごとに I および J の論理和によって得られる値としま
す。
表 11-11 OR 組み込み関数の真偽表
I
J
OR(I, J)
1
1
1
1
0
1
0
1
1
0
0
0
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
PACK(ARRAY, MASK, VECTOR)
省略可能な引き数
VECTOR
機能
MASK に従って、配列を 1 次配列にします。
分類
変形関数
608
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
ARRAY
どの型でもかまいません。スカラであってはなりません。
MASK
論理型でなければならず、ARRAY と形状適合しなければなりません。
VECTOR ( 省略可能 )
ARRAY と同じ型および同じ種別型パラメータでなければならず、1 次元配列で
なければなりません。VECTOR は、少なくとも MASK 中の .TRUE. である要素
と同数の要素を持たなければなりません。MASK がスカラであって値が .TRUE.
のとき、VECTOR は、少なくとも ARRAY と同数の要素を持たなければなりませ
ん。
結果の型、型パラメータおよび形状
結果は、ARRAY と同じ型および同じ種別型パラメータの 1 次元配列とします。VECTOR を指定し
た場合、結果の大きさは VECTOR と同じとします。VECTOR を省略した場合、結果の大きさは
MASK 中の .TRUE. である要素の個数 t とします。ただし、MASK が .TRUE. の値のスカラのと
き、結果の大きさは ARRAY の大きさとします。
結果の値
配列要素順序に従って、結果の i 番目 (i= 1, 2, ..., t) の要素は、MASK の i 番目の .TRUE. である
要素に対応する ARRAY の要素とします。VECTOR を指定し、その大きさ n が n>t であるとき、
i= t+1, ..., n に対して、結果の i 番目の要素の値は、VECTOR(i) とします。
個別名
KPACK
PRECISION(X)
機能
引き数と同じ種別型パラメータを持つ実数の数体系の 10 進精度を返します。
分類
問い合わせ関数
引き数
X は、実数型または複素数型でなければなりません。値は、スカラまたは配列とします。
第 11 章
609
組み込み手続き
組み込み手続きの仕様
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
結果の値は、INT((p-1) * LOG10(b))+k とします。ここで b および p は、X と同じ種別型パラ
メータ値を持つ実数の数体系における 516 ページの「実数の数体系」の項で定義した値としま
す。k は、b が 10 の整数乗のとき 1 とし、それ以外のとき 0 とします。
PRESENT(A)
機能
省略可能な引き数が実在するかどうかを判定します。
分類
問い合わせ関数
引き数
A は、その PRESENT 関数の引用を含む手続きの中で参照可能な、省略可能な仮引き数の名前で
なければなりません。
結果の型 / 型パラメータ
基本論理型スカラとします。
結果の値
結果の値は、A が実在するとき .TRUE. とし、実在しないとき .FALSE. とします。
PRODUCT(ARRAY, DIM, MASK)
省略可能な引き数
DIM, MASK
機能
DIM 番目の次元について、MASK 中の .TRUE. である要素に対応する ARRAY のすべての要素の積
を計算します。
610
第 11 章
組み込み手続き
組み込み手続きの仕様
分類
変形関数
引き数
ARRAY
整数型、実数型または複素数型でなければなりません。スカラであってはなり
ません。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は、ARRAY の次元数とします。対応する実引き数は、省略可能な仮引き
数であってはなりません。
MASK ( 省略可能 )
論理型でなければならず、ARRAY と形状適合しなければなりません。
結果の型、型パラメータおよび形状
結果は、ARRAY と同じ型および同じ種別型パラメータとします。DIM が省略されているかまたは
ARRAY が 1 次元配列であるときは、スカラとします。それ以外のとき、結果は n-1 次元配列と
し、形状は (d1, d2, ..., dDIM-1, dDIM+1, ..., dn) とします。ここで (d1, d2, ..., dn) は、ARRAY の形状
とします。
結果の値
場合 1
PRODUCT(ARRAY) の結果の値は、ARRAY の全要素の積の処理系依存の近似値
とします。ただし、ARRAY の大きさが 0 のとき、結果の値は 1 とします。
場合 2
PRODUCT(ARRAY, MASK = msk) の結果の値は、MASK 中の .TRUE. である要素
と対応する ARRAY の要素の積の処理系依存の近似値とします。ただし、
.TRUE. である要素がないとき、結果の値は 1 とします。
場合 3
ARRAY が 1 次元配列のとき、PRODUCT(ARRAY, DIM [,msk]) の結果の値は、
PRODUCT(ARRAY [,MASK = msk]) とします。2 次元配列以上のとき、
PRODUCT(ARRAY, DIM [,msk]) の要素 (s1, s2, ..., sDIM-1, sDIM+1, ..., sn) の値
は次のとおりとします。
PRODUCT(ARRAY(s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn) & [, MASK
= msk(s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn)])
第 11 章
611
組み込み手続き
組み込み手続きの仕様
QEXT(A)
機能
REAL(16) 型に変換します。
分類
規格外の要素別処理関数
引き数
A は、整数型、実数型、倍精度型または複素数型でなければなりません。
結果
REAL(16) 型
個別名
QEXTD
QFLOAT(A)
機能
REAL(16) 型に変換します。
分類
規格外の要素別処理関数
引き数
A は、整数型または REAL(4) 型でなければなりません。
結果
REAL(16) 型
個別名
QFLOATI, QFLOTI, QFLOTJ, QFLOTK
612
第 11 章
組み込み手続き
組み込み手続きの仕様
QNUM(I)
機能
文字を REAL(16) 型に変換します。
分類
規格外の要素別処理関数
引き数
I は、文字型でなければなりません。
結果
REAL(16) 型
QPROD(X, Y)
機能
倍精度の積を計算します。
分類
規格外の要素別処理関数
引き数
X および Y は倍精度実数型でなければなりません。
結果
REAL(16) 型
RADIX(X)
機能
引き数と同じ型および同じ種別型パラメータの数体系の基数を返します。
第 11 章
613
組み込み手続き
組み込み手続きの仕様
分類
問い合わせ関数
引き数
X は、整数型または実数型でなければなりません。値は、スカラまたは配列とします。
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
結果の値は、X が整数型のとき r とし、X が実数型のとき b とします。ここで r および b は、
516 ページの「実数の数体系」の項で定義した値とします。
RAN(ISEED)
機能
乗法合同乱数生成器
分類
規格外の要素別処理関数
引き数
ISEED は、INTEGER(4) 変数または配列要素でなければなりません。RAN は ISEED 中に数字を格
納し、次の RAN への呼び出しに使用します。
ISEED は、可能な限り大きい奇数値に初期設定されなければなりません。次の例を参照してくだ
さい。
結果の型 / 型パラメータ
REAL(4) 型
614
第 11 章
組み込み手続き
組み込み手続きの仕様
注記
プログラムの実行ごとに異なる乱数値を得るために、プログラムの各実行時に
ISEED に異なる値を設定しなければなりません。これを実現するには、プログラ
ムの始動時に種子を入力するか、または (IDATE によって返される ) 現在の年月日
および (SECNDS によって返される ) 夜中の 12 時から数えた秒数から値を計算さ
せます。
RAND()
機能
0.0 から 1.0 の範囲に一様分布した連続した擬似乱数を生成します。
分類
規格外の要素別処理関数
結果の型 / 型パラメータ
REAL(4) 型
注記
IRAND および RAND を使用した擬似乱数の再始動についての詳細は、632 ページ
の「SRAND(ISEED)」の項を参照してください。
RANDOM_NUMBER(HARVEST)
機能
0 <= x < 1 の範囲に一様分布する 1 つの擬似乱数かまたは擬似乱数の配列を返します。
分類
サブルーチン
引き数
HARVEST は、実数型でなければなりません。これは、INTENT(OUT) 引き数とします。スカラ変
数または配列変数とします。0 <= x < 1 の区間に一様分布する擬似乱数を含むように設定されま
す。
第 11 章
615
組み込み手続き
組み込み手続きの仕様
RANDOM_SEED(SIZE, PUT, GET)
省略可能な引き数
SIZE, PUT, GET
機能
RANDOM_NUMBER で使用する擬似乱数生成器を再始動するかまたは問い合わせます。
分類
サブルーチン
引き数
引き数は、1 個だけまたは 0 個でなければなりません。
SIZE ( 省略可能 )
基本整数型スカラでなければなりません。INTENT(OUT) 引き数とします。処
理系が種子の値を保持するのに使用する整数の個数 N が返されます。
PUT ( 省略可能 )
1 次元で大きさが N 以上の基本整数型配列でなければなりません。
INTENT(IN) 引き数とします。種子の値を設定するために使用します。
GET ( 省略可能 ) 1 次元で大きさが N 以上の基本整数型配列でなければなりません。
INTENT(OUT) 引き数とします。現在の種子の値が返されます。引き数を省略
すると、処理系は種子を処理系依存の値に設定します。
RANGE(X)
機能
引き数と同じ種別型パラメータとなる整数または実数の数体系の 10 進指数範囲を返します。
分類
問い合わせ関数
引き数
X は、整数型、実数型または複素数型でなければなりません。値は、スカラまたは配列としま
す。
616
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
場合 1
整数型の引き数の場合、結果の値は、INT(LOG10(huge)) とします。ここで
huge は、X と同じ種別型パラメータの整数の数体系における最大の正の整数
とします (516 ページの「整数の数体系」の項を参照 )。
場合 2
実数型または複素数型の引き数の場合、結果の値は、
INT(MIN(LOG10(huge), -LOG10(tiny))) とします。ここで huge および
tiny は、X と同じ種別型パラメータ値を持つ実数の数体系における最大およ
び最小の正の数とします。詳細は、516 ページの「実数の数体系」の項を参照
してください。
例
516 ページの「実数の数体系」の項で示した数体系の実数 X について、RANGE(X) の値は、38 に
なります。このとき、huge= (1 - 2-24) 2127 および tiny = 2-127 です。
個別名
SNGL, SNGLQ
REAL(A, KIND)
省略可能な引き数
KIND
機能
実数型に変換します。
分類
要素別処理関数
引き数
A
第 11 章
整数型、実数型または複素数型でなければなりません。
617
組み込み手続き
組み込み手続きの仕様
KIND ( 省略可能 )
スカラ整数初期値式でなければなりません。
結果の型 / 型パラメータ
実数型
場合 1
A が整数型または実数型の場合、KIND を指定したとき、種別型パラメータは
KIND の指定に従います。
KIND を省略したとき、種別型パラメータは基本実数型に対する処理系依存の
種別型パラメータとします。
場合 2
A が複素数型の場合、KIND を指定したとき、種別型パラメータは KIND の指定
に従います。
KIND を省略したとき、種別型パラメータは A の種別型パラメータとします。
結果の値
場合 1
A が整数型または実数型の場合、結果の値は A に対する処理系依存の近似値と
します。
場合 2
A が複素数型の場合、結果の値は A の実部に対する処理系依存の近似値としま
す。
個別名
FLOAT, FLOATI, FLOATJ, FLOATK
REPEAT(STRING, NCOPIES)
機能
文字列の複写をいくつか連結します。
分類
変形関数
引き数
STRING
スカラ文字型でなければなりません。
NCOPIES
スカラ整数型でなければならず、値は負であってはなりません。
618
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の型、型パラメータおよび形状
STRING と同じ種別型パラメータ値の文字型スカラとします。その文字長は、STRING の文字長の
NCOPIES 倍とします。
結果の値
結果は、STRING を NCOPIES 回だけ複写したものを連結した値とします。
個別名
KREPEAT
RESHAPE(SOURCE, SHAPE, PAD, ORDER)
省略可能な引き数
PAD, ORDER
機能
与えられた配列の要素から、指定された形状の配列を構成します。
分類
変形関数
引き数
SOURCE
どの型でもかまいません。値は、配列とします。PAD が省略されているかまた
はその大きさが 0 のとき、SOURCE の大きさは PRODUCT(SHAPE) の値以上でな
ければなりません。結果の大きさは、SHAPE の要素の値の積とします。
SHAPE
整数型の 1 次元配列であって、大きさは定数でなければなりません。大きさ
は、1 ~ 7 の正の数でなければなりません。どの要素の値も負であってはなり
ません。
PAD ( 省略可能 ) SOURCE と同じ型および同じ種別型パラメータでなければなりません。PAD の
値は、配列でなければなりません。
第 11 章
619
組み込み手続き
組み込み手続きの仕様
ORDER ( 省略可能 )
整数型でなければならず、SHAPE と同じ形状でなければなりません。その値
は、[1, 2, ..., n] を並べ替えたものでなければなりません。ここで n は、SHAPE
の大きさとします。ORDER を省略したとき、値 [1, 2, ..., n] を指定したかのよ
うに働きます。
結果の型、型パラメータおよび形状
結果は、SOURCE と同じ型および同じ種別型パラメータであって形状が SHAPE である ( すなわ
ち、SHAPE(RESHAPE(SOURCE, SHAPE, PAD, ORDER)) が SHAPE に等しい ) 配列とします。
結果の値
結果の要素を添え字順序 ORDER(1), ..., ORDER(n) で並べ替えたものは、SOURCE の要素を通常の
配列要素順序で並べ、足りなければ PAD の要素を配列要素順序で続け、さらに足りなければ PAD
の要素を配列要素順序で必要な回数だけ繰り返したものと同じです。
個別名
KRESHAPE
RNUM(I)
機能
文字を実数型に変換します。
分類
規格外の要素別処理関数
引き数
I は、文字型でなければなりません。
結果
基本実数型とします。
620
第 11 章
組み込み手続き
組み込み手続きの仕様
RRSPACING(X)
機能
X の数体系における引き数値前後の相対的な間隔の逆数を返します。
分類
要素別処理関数
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、|X * b-e| * bp とします。ここで、b, e, および p は、516 ページの「実数の数体系」
の項で定義した値とします。
RSHFT(I, SHIFT)
機能
桁を右方向に移動する
分類
規格外の要素別処理関数
RSHIFT(I, SHIFT)
機能
桁を右方向に移動する
分類
規格外の要素別処理関数
第 11 章
621
組み込み手続き
組み込み手続きの仕様
SCALE(X, I)
機能
X * bI を返します。ここで b は、X の数体系の基数とします。これについては、516 ページの
「実数の数体系」の項を参照してください。
分類
要素別処理関数
引き数
X
実数型でなければなりません。
I
整数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果が範囲の中にあるとき、結果の値は X * bI とします。ここで b は、516 ページの「実数の数
体系」の項で定義した値とします。範囲を超えたとき、結果は処理系依存とします。
SCAN(STRING, SET, BACK)
省略可能な引き数
BACK
機能
文字列を走査して、文字集合中に指定した文字があるかどうかを判定します。
分類
要素別処理関数
引き数
STRING
622
文字型でなければなりません。
第 11 章
組み込み手続き
組み込み手続きの仕様
STRING と同じ種別型パラメータの文字型でなければなりません。
SET
BACK ( 省略可能 )
論理型でなければなりません。
結果の型 / 型パラメータ
基本整数型とします。
結果の値
場合 1
BACK に .FALSE. を指定するかまたは省略してあって、STRING が SET 中の文
字を少なくとも 1 つ含む場合、結果の値は両方にある文字の STRING 中での最
も左の文字位置とします。
場合 2
BACK に .TRUE. を指定してあって、STRING が SET 中の文字を少なくとも 1
つ含む場合、結果の値は両方にある文字の STRING での最も右の文字位置とし
ます。
場合 3
STRING 中のどの文字も SET 中にないか、または STRING もしくは SET の文字
長が 0 の場合、結果の値は 0 とします。
SECNDS(X)
機能
午前 0 時から経過した秒数から引き数の値を引いた値を返します。
分類
規格外の要素別処理関数
引き数
X は、REAL(4) 型でなければなりません。
結果の型 / 型パラメータ
REAL(4) 型
注記
第 11 章
SECNDS の有効桁数は、100 分の 1 秒 (0.01 秒 ) です。SECNDS ルーチンは、コー
ドで経過時間を計算するときに役に立ちます。
623
組み込み手続き
組み込み手続きの仕様
SELECTED_INT_KIND(R)
機能
-10R < n < 10R の範囲にあるすべての整数値 n を表現できる整数型の種別型パラメータ値を返し
ます。
分類
変形関数
引き数
R は、整数型のスカラでなければなりません。
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
結果の値は、-10R < n < 10R の範囲内のすべての値 n を表現できる整数型の種別型パラメータ値
とします。ただし、そのような種別型パラメータがその処理系上で利用できない場合、結果の値
は –1 とします。
2 つ以上の種別型パラメータが条件を満足する場合、戻り値は、最も小さい 10 進指数範囲を表
現する種別型パラメータ値となります。同じ 10 進指数範囲を表現するものが複数あるときは、
最も小さい種別型パラメータ値が返されます。
SELECTED_REAL_KIND(P, R)
省略可能な引き数
P, R
機能
10 進精度が P 桁以上で 10 進指数範囲が R 以上である実数型の種別型パラメータ値を返します。
分類
変形関数
624
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
少なくとも 1 つの引き数は、指定しなければなりません。
P ( 省略可能 )
整数型スカラでなければなりません。
R ( 省略可能 )
整数型スカラでなければなりません。
結果の型、型パラメータおよび形状
基本整数型スカラとします。
結果の値
結果の値は、関数 PRECISION によって返されるような P 桁以上の 10 進精度と、関数 RANGE に
よって返されるような R 以上の 10 進指数範囲を持つ実数型の種別型パラメータ値とします。
ただし、そのような種別型パラメータが処理系上で利用できない場合の結果の値は、10 進精度
が利用不可能なとき –1 とし、10 進指数範囲が利用不可能なとき –2 とし、どちらも利用不可能な
とき –3 とします。
2 つ以上の種別型パラメータが条件を満足する場合、戻り値は、最も小さい 10 進精度を表現す
る種別型パラメータ値となります。同じ 10 進指数範囲を表現するものが複数あるときは、最も
小さい種別型パラメータ値が返されます。
SET_EXPONENT(X, I)
機能
指数部が I で、小数部が X の数体系表現の小数部である数表現の実数を返します。
分類
要素別処理関数
引き数
X
実数型でなければなりません。
I
整数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
第 11 章
625
組み込み手続き
組み込み手続きの仕様
結果の値
結果が表現可能な範囲の中にあるとき、結果の値は、X * bI-e とします。ここで b および e は、
516 ページの「実数の数体系」の項で定義した値とします。表現可能な範囲を超えているとき、
結果は処理系依存とします。
X の値が 0.0 であるとき、結果の値は 0.0 とします。
SHAPE(SOURCE)
機能
配列またはスカラの形状を返します。
分類
問い合わせ関数
引き数
SOURCE は、どの型でもかまいません。値は、配列またはスカラとします。空状態のポインター
または割り付けられていない割り付け配列であってはならず、大きさ引き継ぎ配列であってはな
りません。
結果の型、型パラメータおよび形状
結果は、大きさが SOURCE の次元数に等しい基本整数型の 1 次元配列とします。
結果の値
結果の値は、SOURCE の形状とします。
個別名
KSHAPE
SIGN(A, B)
機能
A の絶対値と B の符号の積。
626
第 11 章
組み込み手続き
組み込み手続きの仕様
分類
要素別処理関数
引き数
A
整数型または実数型でなければなりません。
B
A と同じ型および同じ種別型パラメータでなければなりません。
結果の型 / 型パラメータ
A と同じとします。
結果の値
結果の値は、B >= 0 のとき |A| とし、B < 0 のとき –|A| とします。
個別名
BSIGN, DSIGN, HSIGN, IISIGN, JSIGN, QSIGN, KISIGN
SIN(X)
機能
正弦関数 ( ラジアン単位 )
分類
要素別処理関数
引き数
X は、実数型または複素数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、sin(X) の処理系依存の近似値とします。
第 11 章
627
組み込み手続き
組み込み手続きの仕様
•
X が実数型であるとき、ラジアンでの値とみなされます。
•
X が複素数型であるとき、その実部がラジアンでの値とみなされます。
個別名
CDSIN, CSIN, DSIN, QSIN, ZSIN
SIND(X)
機能
正弦関数 ( 度単位 )
分類
規格外の要素別処理関数
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、sin(X) の処理系依存の近似値とします。
個別名
QSIND
SINH(X)
機能
双曲線正弦関数
分類
要素別処理関数
628
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
X は、実数型でなければなりません。
結果の型および型パラメータ
X と同じとします。
結果の値
結果の値は、sinh(X) の処理系依存の近似値とします。
個別名
QSINH
SIZE(ARRAY, DIM)
省略可能な引き数
DIM
機能
配列の要素の総数または指定した次元の寸法を返します。
分類
問い合わせ関数
引き数
ARRAY
どの型でもかまいません。スカラであってはなりません。空状態のポインター
または割り付けられていない割り付け配列であってはなりません。ARRAY が大
きさ引き継ぎ配列であるときは、DIM は省略できず、ARRAY の次元数より小さ
い値を指定しなければなりません。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は、ARRAY の次元数とします。
結果の型、型パラメータおよび形状
基本整数型スカラとします。
第 11 章
629
組み込み手続き
組み込み手続きの仕様
結果の値
結果の値は、ARRAY の DIM 番目の次元の寸法とし、DIM を省略したとき、ARRAY の要素の総数と
します。
個別名
KSIZE
SIZEOF(A)
機能
引き数が使用する記憶領域のバイト数を返します。
分類
規格外の問い合わせ関数
引き数
A は、( 大きさ引き継ぎ配列または文字長を渡された引き数以外であれば ) どの型でもかまいま
せん。
結果の型
整数型とします。
SPACING(X)
機能
X の数体系における引き数値前後の間隔の絶対値を返します。
分類
要素別処理関数
引き数
X は、実数型でなければなりません。
630
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果が範囲内にあって X の値が 0 でないとき、結果の値は be-p とします。ここで b, e, および p
は、516 ページの「実数の数体系」の項で定義した値とします。範囲を超えているとき、結果の
値は TINY(X) と同じとします。
SPREAD(SOURCE, DIM, NCOPIES)
機能
配列を複製して次元を付け加えます。指定した次元について ( あたかも 1 枚の原紙の複写をとじ
てメモ冊子を作るように ) SOURCE をいくつか複写し、1 次元だけ大きい配列を形成します。
分類
変形関数
引き数
SOURCE
どの型でもかまいません。値は、スカラまたは配列とします。SOURCE の次元
数は、7 未満でなければなりません。
DIM
整数型スカラであって、1 <= DIM <= n + 1 の範囲の値でなければなりません。
ここで n は、SOURCE の次元数とします。
NCOPIES
整数型スカラでなければなりません。
結果の型、型パラメータおよび形状
結果は、SOURCE と同じ型および同じ種別型パラメータの n + 1 次元配列とします。ここで n は、
SOURCE の次元数とします。
場合 1
SOURCE がスカラである場合、結果の形状は (MAX(NCOPIES, 0)) とします。
場合 2
SOURCE の値が形状 (d1, d2, ..., dn) の配列である場合、結果の形状は (d1, d2, ...,
dDIM-1, MAX(NCOPIES, 0), dDIM, ..., dn) とします。
結果の値
場合 1
第 11 章
SOURCE がスカラである場合、結果の各要素は SOURCE に等しい値とします。
631
組み込み手続き
組み込み手続きの仕様
場合 2
SOURCE の値が配列である場合、添え字が (r1, r2, ..., rn+1) である結果の要素
は、SOURCE(r1, r2, ..., rDIM-1, rDIM+1, ..., rn+1) に等しい値とします。
SQRT(X)
機能
平方根
分類
要素別処理関数
引き数
X は、実数型または複素数型でなければなりません。X が実数型であるとき、値は 0.0 以上でな
ければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、X の平方根の処理系依存の近似値とします。
複素数型の結果は、実部が 0.0 以上である主値とします。結果の実部が 0.0 であるとき、虚部は
0.0 以上とします。
個別名
CDSQRT,CSQRT, DSQRT, QSQRT, ZSQRT
SRAND(ISEED)
機能
IRAND および RAND が使用する擬似乱数生成器を再始動します。
分類
規格外の要素別処理サブルーチン
632
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
ISEED は、INTEGER(4) 型でなければなりません。
ISEED の値が同じ場合、同じ乱数の列が生成されます。列を変更するには、プログラムの各実行
時に異なる ISEED 値で SRAND を呼び出します。ISEED のデフォルトは 1 です。
SUM(ARRAY, DIM, MASK)
省略可能な引き数
DIM, MASK
機能
MASK 中の .TRUE. である要素に対応する ARRAY の要素を、DIM 番目の次元について合計します。
分類
変形関数
引き数
ARRAY
整数型、実数型または複素数型でなければならず、スカラであってはなりませ
ん。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は ARRAY の次元数とします。対応する実引き数は、省略可能な仮引き
数であってはなりません。
MASK ( 省略可能 )
論理型でなければならず、ARRAY と形状適合しなければなりません。
結果の型、型パラメータおよび形状
結果は、ARRAY と同じ型および同じ種別型パラメータとします。DIM を省略するか、または
ARRAY が 1 次元配列であるときは、スカラとします。それ以外のとき、結果は n-1 次元配列と
し、その形状は (d1, d2, ..., dDIM-1, dDIM+1, ..., dn) とします。ここで (d1, d2, ..., dn) は、ARRAY の
形状とします。
結果の値
場合 1
第 11 章
SUM(ARRAY) の結果の値は、ARRAY のすべての要素の合計の処理系依存の近似
値とします。ARRAY の大きさが 0 であるとき、値は 0 とします。
633
組み込み手続き
組み込み手続きの仕様
場合 2
SUM(ARRAY, MASK = msk) の結果の値は、MASK 中の .TRUE. である要素に対
応している ARRAY の要素の合計の処理系依存の近似値とします。ただし、
MASK 中に .TRUE. である要素がないとき、値は 0 とします。
場合 3
ARRAY が 1 次元配列であるとき、SUM(ARRAY, DIM [,msk]) の結果の値は、
SUM(ARRAY [,MASK = msk]) とします。2 次元以上のとき、SUM(ARRAY, DIM
[,msk]) の要素 (s1, s2, ..., sDIM-1, sDIM+1, ..., sn) の値は、次のとおりとしま
す。
SUM(ARRAY(s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn) &
[, MASK=msk(s1, s2, ..., sDIM-1, :, sDIM+1, ..., sn)])
SYSTEM(STR)
機能
Fortran 90 プログラムからシェルコマンドを実行します。
分類
規格外のサブルーチン
引き数
STR は、文字型でなければなりません。SYSTEM は、文字列が端末で入力されたかのように、入
力としてデフォルトシェル (/bin/sh) に STR を与えます。シェルが完了すると、プロセスが引
き続き行われます。
SYSTEM_CLOCK(COUNT, COUNT_RATE, COUNT_MAX)
省略可能な引き数
COUNT, COUNT_RATE, COUNT_MAX
機能
実時間時計から整数を返します。
分類
サブルーチン
634
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
COUNT ( 省略可能 )
基本整数型スカラでなければなりません。INTENT(OUT) 引き数とします。処
理系の時計の現在値に基づく処理系依存の値に設定されます。時計がないとき
は、–HUGE(0) に設定されます。処理系依存の値は、時計の刻みごとに 1 ずつ
増加し、値 COUNT_MAX に達すると、次の刻みで 0 に再設定されます。時計が
あるときは、0 以上、COUNT_MAX 以下の値になります。
COUNT_RATE ( 省略可能 )
基本整数型スカラでなければなりません。INTENT(OUT) 引き数とします。処
理系の時計が 1 秒間に刻む回数に設定されます。ただし、時計がないときは、
0 に設定されます。
COUNT_MAX ( 省略可能 )
基本整数型スカラでなければなりません。INTENT(OUT) 引き数とします。
COUNT がとりうる最大値に設定されます。ただし、時計がないときは、0 に設
定されます。
TAN(X)
機能
正接関数 ( ラジアン単位 )
分類
要素別処理関数
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、tan(X) の処理系依存の近似値とします。X は、ラジアンでの値とみなされます。
第 11 章
635
組み込み手続き
組み込み手続きの仕様
個別名
CTAN, DTAN, QTAN, ZTAN
TAND(X)
機能
正接関数 ( 度単位 )
分類
規格外の要素別処理関数
引き数
X は、実数型でなければなりません。
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、tan(X) の処理系依存の近似値とします。
個別名
DTAND, QTAND
TANH(X)
機能
双曲線正接関数
分類
要素別処理関数
引き数
X は、実数型でなければなりません。
636
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
X と同じとします。
結果の値
結果の値は、tanh(X) の処理系依存の近似値とします。
個別名
DTANH, QTANH
TIME(TIMESTR)
機能
現在のシステム時間を返します。
分類
規格外のサブルーチン
引き数
TIMESTR は文字型でなければならず、少なくとも 8 バイトの記憶容量を必要とします。
結果の値
TIME は、TIMESTR に hh:mm:ss (hh は現在の時間、mm は現在の分、ss は現在の分からの経過秒
です ) 形式で 8 バイト文字列を設定します。
TINY(X)
機能
引き数と同じ型および同じ種別型パラメータの数体系で最小の正の数を返します。
分類
問い合わせ関数
第 11 章
637
組み込み手続き
組み込み手続きの仕様
引き数
X は、実数型でなければなりません。値は、スカラまたは配列とします。
結果の型、型パラメータおよび形状
X と同じ型および同じ種別型パラメータのスカラとします。
結果の値
結果の値は、b**(emin-1) とします。
ここで b および emin は、516 ページの「実数の数体系」の項で定義した値とします。
TRANSFER(SOURCE, MOLD, SIZE)
省略可能な引き数
SIZE
機能
物理表現は SOURCE と同一ですが、型および種別型パラメータを MOLD のものにした結果を返し
ます。
分類
変形関数
引き数
SOURCE
どの型でもかまいません。値は、スカラまたは配列とします。
MOLD
どの型でもかまいません。値は、スカラまたは配列とします。
SIZE ( 省略可能 )
整数型スカラでなければなりません。対応する実引き数は省略可能な実引き数
であってはなりません。
結果の型、型パラメータおよび形状
結果は、MOLD と同じ型および同じ種別型パラメータとします。
場合 1
638
SIZE を省略し、MOLD がスカラである場合、結果はスカラとします。
第 11 章
組み込み手続き
組み込み手続きの仕様
場合 2
SIZE を省略し、MOLD が配列である場合、結果は 1 次元配列とします。その大
きさは、物理表現が SOURCE のものよりも短くならない範囲で可能な限り小さ
くします。
場合 3
SIZE を指定した場合、結果は、大きさが SIZE である 1 次元配列とします。
結果の値
結果の物理表現の長さが SOURCE と同一のとき、結果の物理表現は SOURCE のものとします。
•
結果の物理表現のほうが SOURCE よりも長いとき、物理表現の先頭部分は SOURCE のものとし、
残りの部分は不定とします。
•
結果の物理表現のほうが SOURCE よりも短いとき、結果の物理表現は SOURCE の先頭部分とし
ます。D および E がスカラ変数であって、D の物理表現の長さが E の物理表現の長さ以上で
あるとき、TRANSFER(TRANSFER(E, D), E) の値は E の値でなければなりません。
•
D が配列であって E が 1 次元配列であるとき、TRANSFER(TRANSFER(E, D), E, SIZE(E)) の
値は E の値でなければなりません。
TRANSPOSE(MATRIX)
機能
2 次元配列を転置します。
分類
変形関数
引き数
MATRIX は、どの型でもかまいませんが、2 次元配列でなければなりません。
結果の型、型パラメータおよび形状
結果は MATRIX と同じ型および同じ種別型パラメータの 2 次元配列とし、MATRIX の形状が (m,
n) であるとき、結果の形状は、(n, m) とします。
結果の値
結果の要素 (i, j) の値は MATRIX(j, i), i= 1, 2, ..., n; j= 1, 2, ..., m とします。
第 11 章
639
組み込み手続き
組み込み手続きの仕様
TRIM(STRING)
機能
引き数の後ろの空白を削除したものを返します。
分類
変形関数
引き数
STRING は、文字型スカラでなければなりません。
結果の型 / 型パラメータ
STRING と同じ種別型パラメータ値の文字型とし、その文字長は、STRING の文字長から STRING
の後ろの空白の個数を引いた長さとします。
結果の値
結果の値は、後ろの空白がない点を除いて STRING と同じとします。STRING が空白以外の文字
を含まないとき、結果の文字長は 0 とします。
UBOUND(ARRAY, DIM)
省略可能な引き数
DIM
機能
配列のすべての次元の上限または指定した次元の上限を返します。
分類
問い合わせ関数
640
第 11 章
組み込み手続き
組み込み手続きの仕様
引き数
ARRAY
どの型でもかまいません。スカラであってはなりません。空状態のポインター
または割り付けられていない割り付け配列であってはなりません。ARRAY が大
きさ引き継ぎ配列のとき、DIM には、ARRAY の次元数未満の値を指定しなけれ
ばなりません。
DIM ( 省略可能 ) 整数型スカラであって、1 <= DIM <= n の範囲の値でなければなりません。こ
こで n は、ARRAY の次元数とします。対応する実引き数は、省略可能な仮引き
数であってはなりません。
結果の型、型パラメータおよび形状
結果は、基本整数型とします。DIM を指定したときは、スカラとします。DIM を省略したとき、
結果は大きさ n の 1 次元配列とします。ここで n は、ARRAY の次元数とします。
結果の値
場合 1
UBOUND(ARRAY, DIM) の値は、全体配列または配列構造体成分である配列を
除く配列式、または部分配列に対しては、指定した次元の要素の個数としま
す。全体配列または配列構造体成分に対しては、ARRAY の DIM 番目の次元の
大きさが 0 でないときの値は ARRAY の DIM 番目の次元における添え字の上限
とし、DIM 番目の次元の大きさが 0 であるときの値は 0 とします。
場合 2
UBOUND(ARRAY) の i 番目 (i= 1, 2, ..., n) の要素の値は、UBOUND(ARRAY, i) と
します。ここで n は、ARRAY の次元数とします。
個別名
KUBOUND
UNPACK(VECTOR, MASK, FIELD)
機能
1 次元配列の要素を MASK に従って配列に配布します。
分類
変形関数
第 11 章
641
組み込み手続き
組み込み手続きの仕様
引き数
VECTOR
どの型でもかまいません。1 次元配列でなければなりません。大きさは、MASK
の .TRUE. である要素の個数 t 以上でなければなりません。
MASK
値は、論理型配列でなければなりません。
FIELD
VECTOR と同じ型および同じ種別型パラメータでなければならず、MASK と形状
適合しなければなりません。
結果の型、型パラメータおよび形状
結果は、VECTOR と同じ型および同じ種別型パラメータであって MASK と同じ形状の配列としま
す。
結果の値
配列要素順序に従って、MASK の .TRUE. である要素の i 番目 (i=1, 2, ..., t) に対応する結果の要
素の値は VECTOR(i) とします。ここで t は、MASK 中の .TRUE. である要素の個数とします。他
の要素は、FIELD がスカラであるとき、それぞれ FIELD に等しい値とし、FIELD が配列である
とき、FIELD の対応する要素と等しい値とします。
VERIFY(STRING, SET, BACK)
省略可能な引き数
BACK
機能
文字列中の文字が、指定した文字集合中に含まれているかどうかを調べ、文字集合に含まれない
文字列中の最初の文字の位置を返します。
分類
要素別処理関数
引き数
STRING
文字型でなければなりません。
SET
STRING と同じ種別型パラメータの文字型でなければなりません。
BACK ( 省略可能 )
論理型でなければなりません。
642
第 11 章
組み込み手続き
組み込み手続きの仕様
結果の型 / 型パラメータ
基本整数型とします。
結果の値
場合 1
BACK に .FALSE. を指定するかまたは省略してあって、STRING が SET 中にな
い文字を少なくとも 1 つ含む場合、結果の値は SET 中にない文字の STRING 中
で最も左の文字位置とします。
場合 2
BACK に .TRUE. を指定してあって、STRING が SET 中にない文字を少なくと
も 1 つ含む場合、結果の値は SET 中にない文字の STRING 中での最も右の文字
位置とします。
場合 3
STRING 中のすべての文字が SET 中にあるか、または STRING の文字長が 0 で
ある場合、結果の値は 0 とします。
XOR(I, J)
機能
排他的論理和
分類
規格外の要素別処理関数
引き数
I
整数型でなければなりません。
J
I と同じ種別型パラメータの整数型でなければなりません。
結果の型 / 型パラメータ
I と同じとします。
結果の値
結果の値は、ビットごとに I と J の排他的論理和を算出し、表 11-9 に従って得られる値としま
す。
整数値をビット列として解釈する数体系については、515 ページの「ビットの数体系」の項を参
照してください。
第 11 章
643
組み込み手続き
組み込み手続きの仕様
ZEXT(A)
機能
ゼロ (0) を拡張します。
分類
規格外の要素別処理関数
引き数
A は、整数型または論理型でなければなりません。
結果
ZEXT は、実符号ビットの代わりに 0 で符号を拡張をすることによって、1, 2, または 4 バイトの
論理型または整数型を 2 または 4 バイトの整数型に変換します。
644
第 11 章
12 BLAS および libU77 ライブラリ
本章では、HP Fortran と一緒に出荷される BLAS (Basic Linear Algebra Subroutine) および
BSD 3f (libU77) ライブラリについて説明します。
libU77 ライブラリは、libc ライブラリのシステムルーチン用に Fortran 90 インタフェースを
持つルーチンを提供します。libU77 ルーチンでは、Fortran 90 の引き数渡し規約が採用されて
いるため、Fortran 90 プログラムから HP-UX のシステムレベルのルーチンを容易に呼び出すこ
とができます。また、libU77 ルーチンには、これらのルーチンをデフォルトで提供する他の
Fortran 実装との互換性があります。
注記
システムルーチンでは HP Fortran プログラムからさまざまな引き数渡し規則が
使用されますが、これらのルーチンは組み込み関数 %VAL および %REF を使用して
引き数渡しの方法を変更すれば、HP Fortran プログラムから呼び出すことができ
ます。%VAL および %REF についての詳細は、175 ページの「%VAL および %REF
組み込み関数」の項を参照してください。
BLAS (Basic Linear Algebra Subroutine) ライブラリは、下位レベルのベクトルおよび行列演算
を実行するルーチンの集合から構成されています。これらのルーチンは、最大のパフォーマンス
を発揮し、HP Fortran プログラムから呼び出せるようにチューニングされています。BLAS ラ
イブラリのバックグラウンドと重要性については、E. Anderson 他著の『LAPACK User's
Guide』(SIAM Press 刊、1992 年 ) を参照してください。
以降の項では、BLAS ライブラリまたは libU77 ライブラリからルーチンを呼び出すプログラム
を作成してコンパイルする場合の注意事項と、各ライブラリのルーチンの概要について説明しま
す。HP Fortran と一緒に出荷される他のライブラリについて ( ライブラリを作成してプログラ
ムとリンクする方法など ) は、『HP Fortran プログラマーガイド』を参照してください。
第 12 章
645
BLAS および libU77 ライブラリ
libU77 および BLAS ルーチンの呼び出し
libU77 および BLAS ルーチンの呼び出し
本項では、次のように、libU77 および BLAS ルーチンを呼び出すプログラムの作成方法とコン
パイルに関する注意事項について説明します。
•
libU77および BLASルーチンをプログラムに対して使用可能にするコンパイル行オプション
•
ライブラリ関数の戻り型の型の宣言
•
EXTERNAL 属性によるライブラリ関数の宣言
•
BLAS および libU77 のマニュアルページ
コンパイル行オプション
以降の項では、libU77 および BLAS ライブラリからのルーチンにアクセスするためのコンパイ
ル行オプションについて説明します。
+U77 オプション
libU77 ルーチンにアクセスするには、+U77 オプションを使用してコンパイルします。各
libU77 ルーチンの入口点の名前には下線が追加されており、プログラムで呼び出す任意の
libU77 ルーチンの外部名にも追加する必要があります。+U77 オプションを指定すると、この処
理が実行されます。たとえば、プログラムに次の呼び出しが含まれている場合について説明しま
す。
CALL FLUSH(unit_no)
+U77 オプションを使用してコンパイルすると、コンパイラによって外部名 access_ が生成され
ます。+ppu オプションおよび +uppercase オプションは、libU77 の外部名には影響しません。
-lblas オプション
BLAS ルーチンにアクセスするには、-lblas オプションを使用してコンパイルします。ほとん
どのコンパイル行オプションと違って、-l オプションはコマンド行の最後に指定し、その前に
BLAS ルーチンを呼び出すソースファイルを指定する必要があります。次の例は、do_math.f90
をコンパイルして BLAS ルーチンにアクセスするためのコマンド行を示しています。
$ f90 do_math.f90 -lblas
646
第 12 章
BLAS および libU77 ライブラリ
libU77 および BLAS ルーチンの呼び出し
2000 年への適合性
Fortran 90 コンパイラには、HP-UX 10.x と HP-UX 11.x における 2000 年 (Y2K) 関連の問題を
処理するために、2 つの新しい libU77 ルーチン ( 本章で説明する DATEY2K および IDATEY2K) が
用意されています。この 2 つのルーチンには、+U77 フラグを併用する必要があります。
どちらのルーチンも Y2K に準拠するために提供されていますが、可能な限り、この 2 つの関数
のかわりに標準の DATE_AND_TIME 組み込み関数を使用することを推奨します。
date または idate の libU77 ルーチンを使用するコードの変更に関するガイドラインは次のとお
りです。
•
date が引用されるコードでは、DATE を DATEY2K に置き換えます。また、DATEY2K の引き数が
11 文字以上であることを確認します。
•
idate 組み込み関数 (libU77 の idate ルーチンでなく ) が使用されるコードでは、IDATE を
IDATEY2K に置き換えます。
ライブラリ関数を宣言する
組み込み関数と違って、ライブラリルーチンの場合、プログラム中には明示的引用仕様がありま
せん。これは特に、ルーチンが関数であれば、コンパイラでは戻り値に暗黙の型宣言規則が適用
されることを意味します。これらの規則が有効な場合は、関数名によって暗黙指定される型が戻
り値の型と一致しなかったり、戻り値の型がそのルーチンを呼び出すプログラム単位で明示的に
宣言されていないと、戻り値が意味を持たなくなることがあります。
次のプログラム call_ttynam.f90 について説明します。このプログラムは、2 つのサブルーチ
ンで構成されており、その両方が libU77 関数 TTYNAM を呼び出します。この関数は、文字値、
つまり結合している端末装置のパス名を返します。しかし、戻り値の型が一方のサブルーチンで
しか宣言されていなければ、他方のサブルーチンでは型は未宣言となるため、コンパイラは暗黙
の型宣言の規則を適用し、戻り値が実数型であると想定します。次の出力は、この想定の結果を
示しています。
例 12-1
call_ttynam.f90
PROGRAM main
! illustrates the consequences of failure to declare
! the return type of a library function. Both
! subroutines do the same thing--invoke the libU77
! function TTYNAM. But only the second subroutine
! declares the return type of the function.
! This program must be compiled with the +U77 option.
第 12 章
647
BLAS および libU77 ライブラリ
libU77 および BLAS ルーチンの呼び出し
CALL without_decl
CALL with_decl
END PROGRAM main
SUBROUTINE without_decl
PRINT *, TTYNAM(6) ! implicit typing is in effect
END SUBROUTINE without_decl
SUBROUTINE with_decl
! declare the return type of TTYNAM
CHARACTER(LEN=80), EXTERNAL :: TTYNAM
PRINT *, TTYNAM(6)
END SUBROUTINE with_decl
次の例は、このプログラムをコンパイルして実行するためのコマンド行と、実行結果です。
$ f90 +U77 call_ttynam.f90
$ a.out
0.0
/dev/pts/0
明示的引用仕様については、178 ページの「手続き引用仕様」の項を参照してください。暗黙の
型宣言の規則については、107 ページの「暗黙の型宣言」の項を参照してください。
ライブラリルーチンを EXTERNAL として宣言する
EXTERNAL 属性を使用してライブラリルーチンを宣言する必要があるのは、次のような 2 つの場
合があります。
•
ルーチン名が実引き数として手続きに渡される場合。
•
ルーチン名が組み込み関数名と同じ場合。
前者の場合は、libU77 ルーチンと BLAS ルーチンに適用されます。後者の場合は、libU77
ルーチンだけに適用されます。表 12-1 に示すように、libU77 ルーチン名には、組み込み関数名
でもあるものがあります。これらのルーチンを EXTERNAL 属性で宣言しないと、コンパイラは呼
び出しを組み込み関数ライブラリにマップします。
表 12-1 libU77 の名前の競合
FLUSH
FREE
GETARG
GETENV
IARGC
IDATE
648
第 12 章
BLAS および libU77 ライブラリ
libU77 および BLAS ルーチンの呼び出し
表 12-1 libU77 の名前の競合 ( 続き )
LOC
MALLOC
SYSTEM
TIME
たとえば、プログラム単位が FLUSH を呼び出す場合、そのプログラム単位に次の文が含まれて
いなければ、コンパイラは組み込み関数を呼び出します。
EXTERNAL FLUSH
EXTERNAL 文および属性については、357 ページの「EXTERNAL ( 文および属性 )」の項を参照
してください。この説明が示すように、EXTERNAL の属性形式は、サブルーチンと併用できない
ため、文形式で指定する必要があります。
マニュアルページ
libU77 ルーチンまたは BLAS ルーチンのオンライン詳細情報を参照するには、man コマンドを
使用して、必要なルーチンのオンライン リファレンスページを表示します。man コマンドのコマ
ンド行構文は次のとおりです。
man section_number routine_name
ここで section_number は、3f (libU77 の場合 ) のマニュアルページ、または 3x (BLAS の
場合 ) のマニュアルページで、routine_name は、libU77 ルーチンまたは BLAS ルーチンの名
前です。たとえば、libU77 ルーチン FLUSH のマニュアルページを表示するには、次のコマンド
を使用します。
$ man 3f flush
BLAS ルーチン SAXPY のマニュアルページを表示するには、次のコマンドを使用します。
$ man 3x saxpy
BLAS ルーチンの概説は、BLAS の 2 つのマニュアルページに表示されます。blas1(3x) には基
本的なベクトル演算の説明が、blas2(3x) には基本的な行列演算の説明が表示されます。
第 12 章
649
BLAS および libU77 ライブラリ
libU77 ルーチン
libU77 ルーチン
表 12-2 は分類別の libU77 ルーチンを示し、表 12-3 は使用方法や引き数情報など、各ルーチン
についての簡単な説明を示しています。表 12-3 に示すデータ型の大きさは、特に明記されてい
ない限り基本の大きさです。基本データ型の大きさについては、表 5-1 を参照してください。
表 12-2 libU77 ルーチンの分類
分類
libU77 ルーチン
日付と時刻
CTIME, DATEY2K,DTIME, ETIME, FDATE,
GMTIME, IDATE, IDATEY2K,ITIME, LTIME, TIME
エラー処理
GERROR, IERRNO, PERROR
ファイルシステム関数
ACCESS, CHDIR, CHMOD, FSTAT, ISATTY, LINK,
LSTAT, RENAME, STAT, SYMLNK, TTYNAM, UNLINK
情報検索
GETARG, GETCWD, GETENV, GETGID, GETLOG,
GETPID, GETUID, HOSTNM, IARGC
入出力
FGETC, FPUTC, FSEEK, FTELL, GETC, PUTC
メモリー割り付け
FALLOC, FREE, MALLOC
その他
LOC, QSORT, SYSTEM
プロセス制御
ALARM, FORK, KILL, SIGNAL, SLEEP, WAIT
テープ入出力
TCLOSE, TOPEN, TREAD, TREWIN, TSKIPF,
TSTATE, TWRITE
表 12-3 libU77 ルーチン
名前
ACCESS
説明と使用方法
ファイルのアクセス性を決定します。
INTEGER FUNCTION ACCESS(name,mode)
CHARACTER(LEN=*) :: name, mode
650
第 12 章
BLAS および libU77 ライブラリ
libU77 ルーチン
表 12-3 libU77 ルーチン ( 続き )
名前
ALARM
説明と使用方法
指定された時刻になったらサブルーチンを実行します。
INTEGER FUNCTION ALARM (time, proc)
INTEGER :: time
EXTERNALproc
CHDIR
デフォルトディレクトリを変更します。
INTEGER FUNCTION CHDIR(dir_name)
CHARACTER(LEN=*) :: dir_name
CHMOD
ファイルのモードを変更します。
INTEGER FUNCTION CHMOD (name,mode)
CHARACTER(LEN=*) :: name, mode
CTIME
システム時間を 24 文字の ASCII 文字列に変換します。
CHARACTER(LEN=*) FUNCTION CTIME (stime)
INTEGER :: stime
DATEY2K
f90 DATE 組み込み関数を置換するように設計されています。この関数と引き
数は、戻り文字列に mm-dd--yy 形式の 2 桁の年数の代わりに mm-dd-yyyy 形
式の 4 桁の年数を使用すること以外は、date 組み込み関数のものと同じです。
SUBROUTINE DATEY2K(DATE)
CHARACTER*11 DATE
+U77 フラグ (646 ページの「+U77 オプション」の項を参照 ) は DATEY2K と
併用しなければなりません。
DTIME
dtime の最後の呼び出しから、または最初の呼び出し時の実行開始から経過
した実行時間を返します。
REAL FUNCTION DTIME(tarray)
REAL :: tarray(2)
ETIME
呼び出し側プロセスについて経過した実行時間を秒単位で返します。
REAL FUNCTION ETIME (tarray)
REAL :: tarray (2)
第 12 章
651
BLAS および libU77 ライブラリ
libU77 ルーチン
表 12-3 libU77 ルーチン ( 続き )
名前
FALLOC
説明と使用方法
メモリーに配列空間を割り付けます。
SUBROUTINE FALLOC (nelem, elsize, clean, basevec, addr,
offset)
INTEGER :: nelem, elsize, clean, addr, offset
basevec は、その要素の大きさが elsize バイトである配列として宣言する
必要があります。FALLOC では、basevec に nelem 個の要素が入るだけの空
間が割り付けられます。
FDATE
日付と時刻を ASCII 形式の文字列として返します。サブルーチンとして使用
できます。
SUBROUTINE FDATE (string)
CHARACTER(LEN=*) :: string
また、関数としても使用できます。
CHARACTER(LEN=*) :: FUNCTION FDATE()
FGETC
HP Fortran の論理装置によって指定されたファイルから 1 文字を取り出しま
す。
INTEGER FUNCTION FGETC (lunit, char)
INTEGER :: lunit
CHARACTER char
FLUSH
指定された装置番号のファイルをフラッシュします。
SUBROUTINE FLUSH (unit)
INTEGER :: unit
FORK
呼び出し側プロセスの複写を作成します。
INTEGER FUNCTION FORK()
FPUTC
通常の HP Fortran の入出力を無視し、HP Fortran の論理装置によって指定
されたファイルに 1 文字を書き込みます。
INTEGER FUNCTION FPUTC (lunit, char)
INTEGER :: lunit
CHARACTER :: char
652
第 12 章
BLAS および libU77 ライブラリ
libU77 ルーチン
表 12-3 libU77 ルーチン ( 続き )
名前
FREE
説明と使用方法
前に MALLOC または FALLOC によって割り付けられたメモリーを解放します。
SUBROUTINE FREE (addr)
INTEGER :: addr
FSEEK
HP Fortran の論理装置によって指定されたファイルの再位置付けを行いま
す。
INTEGER FUNCTION FSEEK (lunit, offset, from)
INTEGER :: lunit, offset, from
FSTAT
ファイルの詳細情報を論理装置番号別に返します。
INTEGER FUNCTION FSTAT (lunit, statb)
INTEGER :: lunit, statb(12)
FTELL
指定された論理装置に結合しているファイルの現在の位置を返します。
INTEGER FUNCTION FTELL (lunit)
INTEGER :: lunit
GERROR
システムエラー メッセージを string に返します。このルーチンは、サブ
ルーチンとして使用できます。
CHARACTER(LEN=*) :: string
SUBROUTINE GERROR (string)
また、関数としても使用できます。
CHARACTER(LEN=*) FUNCTION GERROR()
GETARG
コマンド行引き数を返します。
SUBROUTINE GETARG (k, arg)
INTEGER :: k
CHARACTER(LEN=*) :: arg
GETC
HP Fortran の論理装置 5 から 1 文字を取り出します。
INTEGER FUNCTION GETC (char)
CHARACTER char
第 12 章
653
BLAS および libU77 ライブラリ
libU77 ルーチン
表 12-3 libU77 ルーチン ( 続き )
名前
GETCWD
説明と使用方法
現在のワークディレクトリのパス名を取り出します。
INTEGER FUNCTION GETCWD (dir_name)
CHARACTER(LEN=*) :: dir_name
GETENV
環境変数の値を取り出します。
SUBROUTINE GETENV (ename, evalue)
CHARACTER(LEN=*) :: ename, evalue
GETGID
プロセスのユーザーのグループ ID を取り出します。
INTEGER FUNCTION GETGID()
GETLOG
ユーザーのログイン名を取り出します。このルーチンは、サブルーチンとし
て使用できます。
SUBROUTINE GETLOG (name)
CHARACTER(LEN=*) :: name
また、関数としても使用できます。
CHARACTER(LEN=*) FUNCTION GETLOG()
GETPID
現在のプロセスのプロセス ID を返します。
INTEGER FUNCTION GETPID()
GETUID
プロセスのユーザーのユーザー ID を返します。
INTEGER FUNCTION GETUID()
GMTIME
時刻要素の配列中グリニッジ標準時を HP-UX 形式で返します。
SUBROUTINE GMTIME (stime, tarray)
INTEGER :: stime, tarray(9)
HOSTNM
現在の親プログラムの名前を取り出します。
INTEGER FUNCTION HOSTNM (name)
CHARACTER(LEN=*) :: name
IARGC
最後のコマンド行引き数のインデックスを返します。
INTEGER FUNCTION IARGC()
654
第 12 章
BLAS および libU77 ライブラリ
libU77 ルーチン
表 12-3 libU77 ルーチン ( 続き )
名前
IDATE
説明と使用方法
数値形式の日付を返します。
SUBROUTINE IDATE (iarray)
INTEGER :: iarray(3)
IDATEY2K
HP f90 IDATE 組み込み関数を置換するように設計されています。idate 組み
込み関数は 3 番目の引き数で 1900 年以降の年数を返しますが、この組み込み
関数は 3 番目の引き数で実際の年を返します。
SUBROUTEIN IDATEY2K(MONTH,DATE,YEAR)
INTEGER MONTH,DAY,YEAR
+U77 フラグ (646 ページの「+U77 オプション」の項を参照 ) を IDATEY2K と
併用する必要があります。
IERRNO
最後に検出されたシステムエラーのエラー番号を返します。
INTEGER FUNCTION IERRNO()
ISATTY
論理装置が端末装置と結合しているかどうかをチェックします。
LOGICAL FUNCTION ISATTY (lunit)
INTEGER :: lunit
ITIME
数値形式の時刻を返します。
SUBROUTINE ITIME (iarray)
INTEGER :: iarray(3)
KILL
ユーザーのプロセスにシグナル番号を送信します。
INTEGER FUNCTION KILL (pid, signum)
INTEGER :: pid, signum
LINK
既存ファイルへのリンクを作成します。
INTEGER FUNCTION LINK (name1, name2)
CHARACTER(LEN=*) :: name1, name2
LOC
オブジェクトのアドレスを返します。
INTEGER FUNCTION LOC (arg)
第 12 章
655
BLAS および libU77 ライブラリ
libU77 ルーチン
表 12-3 libU77 ルーチン ( 続き )
名前
LSTAT
説明と使用方法
指定されたファイルへのシンボリックリンクに関する詳細情報を返します ( リ
ンク先ファイルの情報を取得するには、STAT を使用します )。
INTEGER FUNCTION LSTAT (name, statb)
CHARACTER(LEN=*) :: name
INTEGER :: statb(12)
LTIME
時刻要素の配列中で HP-UX 形式の現地時刻を返します。
SUBROUTINE LTIME (stime, tarray)
INTEGER :: stime, tarray(9)
MALLOC
メモリーを割り付けます。
SUBROUTINE MALLOC (size, addr)
INTEGER :: size, addr
NUM_PROCS
プロセスがスレッドを初期化するプロセッサの総数を返します。
INTEGER FUNCTION NUM_PROCS()
NUM_
THREADS
待機中かアクティブ状態がに関わらず、初期化時にプロセスが作成するス
レッドの総数を返します。
INTEGER FUNCTION NUM_THREADS()
PERROR
システムエラー メッセージを取り出します。PERROR では、最後に検出された
システムエラーに関するメッセージが HP Fortran の論理装置 7 に書き込ま
れます。
SUBROUTINE PERROR (string)
CHARACTER(LEN=*) :: string
PUTC
通常の HP Fortran の入出力を無視し、HP Fortran の論理装置番号 6 によっ
て指定されたファイルに 1 文字を書き込みます。
INTEGER FUNCTION PUTC (char)
CHARACTER char
656
第 12 章
BLAS および libU77 ライブラリ
libU77 ルーチン
表 12-3 libU77 ルーチン ( 続き )
名前
QSORT
説明と使用方法
クイックソート アルゴリズムを使用して 1 次元配列内の要素をソートします。
SUBROUTINE QSORT (array, len, isize, compar)
INTEGER :: len, isize
EXTERNAL compar
INTEGER(2) compar
RENAME
ファイルを指定された新しい名前に仮称指定します。
INTEGER FUNCTION RENAME (from, to)
CHARACTER(LEN=*) :: from, to
SIGNAL
シグナルの動作を変更できます。
INTEGER FUNCTION SIGNAL (signum, proc, flag)
INTEGER :: signum, flag
EXTERNAL proc
SLEEP
プロセスの実行を指定された時間だけ一時停止します。
SUBROUTINE SLEEP (itime)
INTEGER :: itime
STAT
指定したファイル名の詳細情報を返します。名前付きファイルがシンボリッ
クリンクであれば、STAT はリンク先のファイルの情報を返します。
INTEGER FUNCTION STAT (name, statb)
CHARACTER(LEN=*) :: name
INTEGER :: statb (12)
SYMLNK
既存ファイルへのシンボリックリンクを作成します。
INTEGER FUNCTION SYMLNK (name1, name2)
CHARACTER(LEN=*) :: name1, name2
SYSTEM
HP-UX コマンドを実行します。
INTEGER FUNCTION SYSTEM (string)
CHARACTER(LEN=*) :: string
TCLOSE
テープ装置のチャネルを閉じ、tlu との結合を解除します。
INTEGER FUNCTION TCLOSE (tlu)
INTEGER :: tlu
第 12 章
657
BLAS および libU77 ライブラリ
libU77 ルーチン
表 12-3 libU77 ルーチン ( 続き )
名前
TIME
説明と使用方法
グリニッジ標準時の 1970 年 1 月 1 日 00:00:00 からのシステム時間 ( 秒単位 )
を返します。
INTEGER FUNCTION TIME()
TOPEN
デバイス名をテープ論理装置に結合させます。
INTEGER FUNCTION TOPEN (tlu, devnam, label)
INTEGER :: tlu
CHARACTER(LEN=*) :: devnam
TREAD
テープからバッファーに次の物理記録を読み込みます。
INTEGER FUNCTION TREAD (tlu, buffer)
INTEGER :: tlu
CHARACTER(LEN=*) :: buffer
TREWIN
指定されたテープを最初のデータファイルの先頭まで巻き戻します。
INTEGER FUNCTION TREWIN (tlu)
INTEGER :: tlu
TSKIPF
ファイルと記録をスキップできます。
INTEGER FUNCTION TSKIPF (tlu, nfiles, nrecs)
INTEGER :: tlu, nfiles, nrecs
TSTATE
テープ入出力チャネルの論理状態を判別して、テープドライブの制御状態レ
ジスタを確認できます。
INTEGER FUNCTION TSTATE (tlu, fileno, recno, errf, eoff,
eotf, tcsr)
INTEGER :: tlu, fileno, recno, tcsr
LOGICAL :: errf, eoff, eotf
TTYNAM
指定された論理装置番号と結合している端末装置のパス名を後ろに空白を埋
めて返します。
CHARACTER(LEN=*) FUNCTION TTYNAM (lunit)
INTEGER :: lunit
658
第 12 章
BLAS および libU77 ライブラリ
libU77 ルーチン
表 12-3 libU77 ルーチン ( 続き )
名前
TWRITE
説明と使用方法
指定されたバッファーからテープに物理記録を書き込みます。
INTEGER FUNCTION TWRITE (tlu, buffer)
INTEGER :: tlu
CHARACTER(LEN=*) :: buffer
UNLINK
指定されたディレクトリエントリーを削除します。
INTEGER FUNCTION UNLINK (name)
CHARACTER(LEN=*) :: name
WAIT
プロセスが終了するまで待機します。
INTEGER FUNCTION WAIT (status)
INTEGER :: status
第 12 章
659
BLAS および libU77 ライブラリ
BLAS ルーチン
BLAS ルーチン
表 12-4 は、BLAS ライブラリのルーチンと、各ルーチンによって実行される計算の概要を示し
ています。
表 12-4 BLAS ルーチン
ルーチン名
実行される計算
ISAMAX, IDAMAX, ICAMAX,
IZAMAX
ベクトルの最大要素のインデックスを返します。
SASUM, DASUM, SCASUM,
DZASUM
絶対値の和を求めます。
SAXPY, DAXPY, CAXPY,
ZAXPY
ベクトルのスカラ倍数をベクトルに加算します。
SCOPY, DCOPY, CCOPY, ZCOPY
ベクトルを複写します。
SDOT, DDOT, CDOTC, CDOTU,
ZDOTC, ZDOTU
2 つのベクトルの内積を計算します。
SGBMV, DGBMV, CGBMV, ZGBMV
バンド行列とベクトルを乗算します。
SGEMM, DGEMM, CGEMM, ZGEMM
2 つの一般行列を乗算します。
SGEMV, DGEMV, CGEMV, ZGEMV
一般行列とベクトルを乗算します。
SGER, DGER, CGERC, CGERU,
ZGERC, ZGERU
2 つのベクトルの 2 項積を計算します。
SNRM2, DNRM2, SCNRM2,
DZNRM2
ベクトルのユークリッドノルムを計算します。
SROT, DROT, CROT, ZROT
Givens 平面回転を適用します。
SROTM, DROTM
変更後の Givens 回転を適用します。
SROTG, DROTG, CROTG, ZROTG
Givens 平面回転を組み立てます。
SROTMG, DROTMG
変更後の Givens 平面回転を組み立てます。
660
第 12 章
BLAS および libU77 ライブラリ
BLAS ルーチン
表 12-4 BLAS ルーチン ( 続き )
ルーチン名
実行される計算
SSBMV, DSBMV, CHBMV, ZHBMV
対称 / エルミートバンド行列とベクトルを乗算します。
SSCAL, DSCAL, CSCAL,
CSSCAL, ZSCAL, ZDSCAL
ベクトルのスケールを求めます。
SSPMV, DSPMV, CHPMV, ZHPMV
対称 / エルミート詰めあり行列とベクトルを乗算します。
SSPR, DSPR, CHPR, ZHPR
ベクトル自体の対称 / エルミート 2 項積を求め、結果は詰め
あり形式のままにします。
SSPR2, DSPR2, CHPR2, ZHPR2
2 つのベクトルの対称 / エルミート 2 項積を求め、結果は詰
めあり形式のままにします。
SSWAP, DSWAP, CSWAP, ZSWAP
2 つのベクトルをスワップします。
SSYMM, DSYMM, CHEMM, CSYMM,
ZHEMM, ZSYMM
2 つの対称行列を乗算します。
SSYMV, DSYMV, CHEMV, ZHEMV
対称 / エルミート行列をベクトルで乗算します。
SSYR, DSYR, CHER, ZHER
ベクトル自体の対称 / エルミート 2 項積を計算します。
SSYR2, DSYR2, CHER2, ZHER2
2 つのベクトルの対称 / エルミート 2 項積を計算します。
SSYR2K, DSYR2K, CHER2K,
CSYR2K, ZHER2K, ZSYR2K
行列と第 2 の行列の転置行列または随伴行列との対称積を計
算します。
SSYRK, DSYRK, CHERK, CSYRK,
ZHERK, ZSYRK
行列とその転置行列または随伴行列の積を計算します。
STBMV, DTBMV, CTBMV, ZTBMV
三角バンド行列をベクトルで乗算します。
STBSV, DTBSV, CTBSV, ZTBSV
三角バンド行列の逆数をベクトルで乗算します。
STPMV, DTPMV, CTPMV, ZTPMV
三角詰めあり行列をベクトルで乗算します。
STPSV, DTPSV, CTPSV, ZTPSV
三角詰めあり行列の逆数をベクトルで乗算します。
STRMM, DTRMM, CTRMM, ZTRMM
三角行列を一般行列で乗算します。
STRMV, DTRMV, CTRMV, ZTRMV
三角行列をベクトルで乗算します。
第 12 章
661
BLAS および libU77 ライブラリ
BLAS ルーチン
表 12-4 BLAS ルーチン ( 続き )
ルーチン名
実行される計算
STRSM, DTRSM, CTRSM, ZTRSM
三角行列の逆数を一般行列で乗算します。
STRSV, DSTRSV,CTRSV, ZTRSV
三角行列の逆数をベクトルで乗算します。
XERBLA
BLAS 行列演算 ( レベル 2 とレベル 3 のルーチン ) のエラー
を処理します。
662
第 12 章
A 入出力実行時エラーメッセージ
本付録では、IOSTAT=integer-variable 指定子から返される入出力実行時エラーメッセージに
ついて説明します。入出力文の実行中に入出力エラーが発生した場合に、その文に
IOSTAT=integer-variable 指定子が含まれていると、エラーの状態コードが
integer-variable に返されます。次の例について説明します。
INTEGER ios
.
.
.
OPEN (10, FILE='data_file', ERR=99, IOSTAT=ios)
data_file が正常に開くと、ios は 0 を返し、何らかの理由でファイルを開けなければ、ios は
0 以外の状態コードを返します。本付録では、エラーに関する情報とその解決策を説明します。
付録 A
663
入出力実行時エラーメッセージ
実行時入出力エラー
実行時入出力エラー
本項のエラー情報には、IOSTAT から返されるコードと次のような情報が含まれています。
•
IOSTAT 指定子を指定していない場合に、実行時システムから標準エラーに送信されるメッ
セージ
•
エラーの原因となった条件の診断
•
エラーを解決するために実行できる処置
表 A-1 実行時入出力エラー
エラー
番号
エラーメッセージ
説明
処置
書式仕様と編集記述
子の構文については、
199 ページの第 8 章
「入出力およびファイ
ル処理」を参照して
ください。
900
ERROR IN
FORMAT
FORMAT 文の構文に
エラーがあります。
901
NEGATIVE UNIT
NUMBER
SPECIFIED
指定された装置番号
が負です。
負でない装置番号を
使用してください。
902
FORMATTED I/O
ATTEMPTED ON
UNFORMATTED
FILE
書式なし入出力用に
開いたファイルに対
して、書式付き入出
力を実行しようとし
ました。
ファイルを書式付き
入出力用に開くか、
またはこのファイル
に対して書式なし入
出力を実行してくだ
さい。
903
UNFORMATTED
I/O ATTEMPTED
ON FORMATTED
FILE
書式付き入出力用に
開いたファイルに対
して、書式なし入出
力を実行しようとし
ました。
ファイルを書式なし
入出力用に開くか、
またはこのファイル
に対して書式付き入
出力を実行してくだ
さい。
664
付録 A
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
904
DIRECT I/O
ATTEMPTED ON
SEQUENTIAL
FILE
順次ファイル上で直
接演算が実行され、
端末に接続されて開
いているファイル上
で直接演算が実行さ
れました。
このファイルに順次
演算を使用するか、
直接探査用にファイ
ルを開くか、または、
端末に接続されてい
るファイルには直接
入出力を実行しない
でください。
905
ERROR IN
LIST-DIRECTED
READ OF
LOGICAL DATA
反復値が見つかりま
したが、アスタリス
クがありません。省
略可能な小数点の後
の 1 文字目が T でも
F でもありませんでし
た。
入力データを、論理
型の並びによる入力
で予期される構文に
対応するように変更
するか、または入力
データの構文に対応
する入力文を使用し
てください。
907
ERROR IN
LIST-DIRECTED
READ OF
CHARACTER
DATA
反復値が見つかりま
したが、アスタリス
クがありません。文
字が引用符で区切ら
れていません。
入力データを、文字
型の並びによる入力
で予期される構文に
対応するように変更
するか、または入力
データの構文に対応
する入力文を使用し
てください。
908
COULD NOT OPEN
FILE SPECIFIED
ファイルへの探査が
探査制限のために
ファイルシステムか
ら拒否されたか、名
前付きファイルが存
在しないか、または
探査要求は処理不可
能な型のために、シ
ステムから許可され
ていないファイルを
開こうとしました。
パス名を訂正して目
的のファイルを開い
てください。
付録 A
665
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
909
SEQUENTIAL I/O
ATTEMPTED ON
DIRECT ACCESS
FILE
BACKSPACE,
REWIND, または
ENDFILE が定義さ
れていない端末また
は他の装置上で、こ
れらの演算を実行し
ようとしました。
BACKSPACE,
REWIND, および
ENDFILE 文を使用
しないでください。
910
ACCESS PAST END
OF RECORD
ATTEMPTED
ファイルの記録上で、
その記録の先頭また
は最後を超えて入出
力しようとしました。
記録の上下限の範囲
内で入出力処理を実
行するか、または記
録長を増やしてくだ
さい。
912
ERROR IN LIST I/O
READ OF
COMPLEX DATA
複素数型のデータを
読み込み中に、左
かっこと反復値がな
いか、反復値は見つ
かったがアスタリス
クがないか、または
右かっこがありませ
んでした。
入力データを、複素
数型の並びによる入
力で予期される構文
に対応するように変
更するか、または入
力データの構文に対
応する入力文を使用
してください。
666
付録 A
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
913
OUT OF FREE
SPACE
ライブラリでは入出
力ブロック (OPEN 文
から ) を割り付けでき
ないか、配列 ( 実行時
にアセンブルされる
形式 )、ファイル名文
字列 (OPEN から )、
並びによる読み込み
からの文字列、また
はファイルバッ
ファーを解析できま
せん。プログラムは、
他のプロセスによっ
て定義されている共
有メモリーセグメン
トを上書きしようと
している可能性があ
ります。
ヒープ領域の空きス
ペースの割り付けを
増やすか、開いてい
るファイル数を減ら
すか、文字配列中で
実行時に形式をアセ
ンブルする代わりに
FORMAT 文を使用
するか、またはファ
イル記録の最大サイ
ズを小さくしてくだ
さい。
914
ACCESS OF
UNCONNECTED
UNIT ATTEMPTED
入出力文で指定され
た装置は、今までに
接続されたことがあ
りません。
入出力を実行する前
に OPEN 文を使用し
て装置を接続するか、
または、すでに接続
されている他の装置
上で入出力を実行し
てください。
915
READ
UNEXPECTED
CHARACTER
実行しようとする型
の変換には許されな
い 1 文字を読み込み
ました。入力値が変
数の型には大きすぎ
ます。
入力データから整数
型または実数型で不
正な文字を削除して
ください。
付録 A
667
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
916
ERROR IN READ
OF LOGICAL DATA
論理データが予期さ
れたときに不正な文
字が読み込まれまし
た。
入力データを論理
データの読み込み時
に予期される構文に
対応するように変更
するか、または、入
力データの構文に対
応する入力文を使用
してください。
917
OPEN WITH
NAMED SCRATCH
FILE ATTEMPTED
STATUS='SCRATCH
' を指定して OPEN 文
が実行されましたが、
ファイル名も指定さ
れています。スク
ラッチファイルの名
前を指定してはいけ
ません。
FILE 指定子を削除
するか、または
STATUS='SCRATC
H' 以外の状態のファ
イルを開いてくださ
い。
918
OPEN OF
EXISTING FILE
WITH
STATUS='NEW'
ATTEMPTED
STATUS='NEW' を指
定して OPEN 文が実
行されましたが、す
でにファイルが存在
しています。
OPEN 文から
STATUS 指定子を削
除するか、
STATUS='OLD',
STATUS='UNKNO
WN', または
STATUS='REPLAC
E' 指定子を使用して
ください。
920
OPEN OF FILE
CONNECTED TO
DIFFERENT UNIT
ATTEMPTED
すでに別の装置番号
を使用して開いてい
るファイルを開こう
としました。
現在の装置番号の
ファイルを閉じてか
ら、そのファイルを
別の装置番号で開い
てください。
668
付録 A
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
921
UNFORMATTED
OPEN WITH
BLANK
SPECIFIER
ATTEMPTED
OPEN 文で
FORM='UNFORMA
TTED' と BLANK=xx
が指定されています。
FORM='FORMATT
ED' を使用するか
BLANK=xx を削除
してください。
922
READ ON
ILLEGAL RECORD
ATTEMPTED
書式付きまたは書式
なしの直接探査ファ
イルから現在のファ
イルの終端を超えて
いる記録を読み込も
うとしました。
ファイルの上下限の
範囲内の記録を読み
込んでください。
923
OPEN WITH
ILLEGAL FORM
SPECIFIER
ATTEMPTED
FORM 指定子で
'FORMATTED' また
は 'UNFORMATTED'
以外の文字列が指定
されています。
OPEN 文では FORM
指定子に
'FORMATTED' また
は
'UNFORMATTED'
を使用してください。
924
CLOSE OF
SCRATCH FILE
WITH
STATUS='KEEP'
ATTEMPTED
CLOSE 文で指定され
たファイルは、前に
STATUS 指定子で
'SCRATCH' を指定し
て開かれています。
STATUS 指定子で
'SCRATCH' 以外の
文字列を指定して
ファイルを開くか、
このスクラッチファ
イルの CLOSE 文で
は STATUS='KEEP'
を指定しないでくだ
さい。
925
OPEN WITH
ILLEGAL STATUS
SPECIFIER
ATTEMPTED
STATUS 指定子で
'OLD' 'NEW'
'UNKNOWN'
'REPLACE' または
'SCRATCH' 以外の文
字列が指定されてい
ます。
OPEN 文の STATUS
指定子には 'OLD',
'NEW',
'UNKNOWN',
'REPLACE' または
'SCRATCH' を使用
してください。
付録 A
669
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
926
CLOSE WITH
ILLEGAL STATUS
SPECIFIER
ATTEMPTED
STATUS 指定子で
'KEEP' または
'DELETE' 以外の文字
列が指定されていま
す。
CLOSE 文の
STATUS 指定子には
'KEEP' または
'DELETE' を使用し
てください。
927
OPEN WITH
ILLEGAL ACCESS
SPECIFIER
ATTEMPTED
ACCESS 指定子で
'SEQUENTIAL' また
は 'DIRECT' 以外の文
字列が指定されてい
ます。
OPEN 文の
ACCESS 指定子には
'SEQUENTIAL' また
は 'DIRECT' を使用
してください。
929
OPEN OF DIRECT
FILE WITH NO
RECL SPECIFIER
ATTEMPTED
OPEN 文で
ACCESS='DIRECT'
が指定されています
が、RECL 指定子が
ありません。
OPEN 文に RECL 指
定子を追加するか、
または ACCESS=
'SEQUENTIAL' を指
定してください。
930
OPEN WITH RECL
LESS THAN 1
ATTEMPTED
OPEN 文で 0 以下の
RECL 指定子が指定
されています。
OPEN 文の RECL 指
定子には正の数を指
定してください。
931
OPEN WITH
ILLEGAL BLANK
SPECIFIER
ATTEMPTED
BLANK 指定子に
'NULL' または
'ZERO' 以外の文字列
が指定されています。
OPEN 文の BLANK
指定子には 'NULL'
または 'ZERO' を使
用してください。
933
END (OR BEGIN)
OF FILE WITH NO
END=x SPECIFIER
ジャンプ先の文番号
を示す END 指定子が
指定されていない
READ 文で、ファイ
ルの終端マークが読
み込まれました。
END 指定子を使用し
て EOF を処理する
か、またはロジック
をチェックしてくだ
さい。
937
ILLEGAL RECORD
NUMBER
SPECIFIED
直接入出力用に 1 よ
り小さい記録番号が
指定されています。
0 より大きい記録番
号を使用してくださ
い。
670
付録 A
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
942
ERROR IN
LIST-DIRECTED
READ CHARACTER
DATA READ FOR
ASSIGNMENT TO
NONCHARACTER
VARIABLE
数値変数または論理
変数に文字列が読み
込まれました。
入力データと入力変
数の型をチェックし
てください。
944
RECORD TOO
LONG IN DIRECT
UNFORMATTED
I/O
要求された出力は長
すぎて、指定された
( または既存の ) 記録
長には収まりません。
WRITE の出力バイ
ト数を、ファイル記
録の大きさ以下にし
てください。
945
ERROR IN
FORMATTED I/O
現在の記録に存在す
るより多数の入出力
バイトが要求されま
した。
形式をデータ記録と
一致させてください。
953
NO REPEATABLE
EDIT
DESCRIPTOR IN
FORMAT STRING
入出力項目と一致す
る編集記述子が見つ
かりませんでした。
FORMAT 文に最低 1
つは反復可能編集記
述子を追加してくだ
さい。
956
FILE SYSTEM
ERROR
入出力処理中にファ
イルシステムからエ
ラー状態が返されま
した。
結合しているファイ
ルシステムのエラー
メッセージを参照し
てください。
957
FORMAT
DESCRIPTOR
INCOMPATIBLE
WITH NUMERIC
ITEM IN I/O LIST
入出力並び内の数値
型項目が数値以外の
編集記述子と照合さ
れました。
入出力並び項目に編
集記述子を一致させ
てください。
付録 A
671
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
958
FORMAT
DESCRIPTOR
INCOMPATIBLE
WITH
CHARACTER ITEM
IN I/O LIST
入出力並び内の文字
型項目が、A または R
以外の編集記述子と
照合されました。
入出力並び項目に編
集記述子を一致させ
てください。
959
FORMAT
DESCRIPTOR
INCOMPATIBLE
WITH LOGICAL
ITEM IN I/O LIST
入出力並び内の論理
型項目が、L 以外の編
集記述子と照合され
ました。
入出力並び項目に編
集記述子を一致させ
てください。
973
RECORD LENGTH
DIFFERENT IN
SUBSEQUENT
OPEN
2 番目の OPEN 文で
指定された記録長が、
開くときの値と競合
しています。
冗長な OPEN 文で変
更できるのは、
BLANK, DELIM, お
よび PAD 指定子だ
けです。
974
RECORD
ACCESSED PAST
END OF
INTERNAL FILE
RECORD
(VARIABLE)
内部ファイル長より
も多数の文字を転送
しようとしました。
READ 文または
WRITE 文を内部
ファイルの大きさと
一致させてください。
975
ILLEGAL NEW
FILE NUMBER
REQUESTED IN
FSET FUNCTION
設定するように要求
されたファイル番号
は、正当なファイル
システムのファイル
番号ではありません
でした。
OPEN が正常に実行
したかどうかとファ
イル番号が正しいか
どうかをチェックし
てください。
672
付録 A
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
976
UNEXPECTED
CHARACTER IN
”NAMELIST” READ
変数群入力に不正な
文字が見つかりまし
た。
入力データが変数群
入力の構文規則に適
合しているかどうか
を確認するか、また
はデータから不正な
文字を削除してくだ
さい。
977
ILLEGAL
SUBSCRIPT OR
SUBSTRING IN
”NAMELIST” READ
変数群入力に不正な
添え字または部分列
指定子が見つかりま
した。原因として、
構文の誤り、範囲外
の添え字 / 部分列の成
分、文字でない変数
の添え字数または部
分列数の誤りが考え
られます。
入力データの構文エ
ラーをチェックして
ください。添え字 /
部分列の指定子が
データ型と合ってい
るかどうかを確認し
ます。読み込む配列
の上下限内の配列要
素のみを指定してく
ださい。
978
TOO MANY
VALUES IN
“NAMELIST" READ
変数群の READ 中に
見つかった入力値の
数が多すぎます。こ
のメッセージは、メ
モリー制限を超えて
変数を入力しようと
すると生成されます。
配列の長さに収まる
数の値のみを指定し
てください。
979
VARIABLE NOT IN
NAMELIST GROUP
入力ストリーム中で、
現在の変数群の一部
として宣言されてい
ない変数名が見つか
りました。
この変数群に含まれ
る変数のみを読み込
んでください。
付録 A
673
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
980
NAMELIST I/O
ATTEMPTED ON
UNFORMATTED
FILE
書式なし ( バイナリ )
ファイルに対して、
不正な変数群入出力
処理が試行されまし
た。
OPEN 文で
FORM='FORMATT
ED' を指定するか、
書式付きファイルに
対してのみ変数群入
出力を使用してくだ
さい。
1010
OPEN WITH
ILLEGAL PAD
SPECIFIER
ATTEMPTED
PAD 指定子に対して
不正な値を指定して
ファイルを開こうと
しました。
PAD='YES' または
PAD='NO' を指定し
てください。
1011
OPEN WITH
ILLEGAL
POSITION
SPECIFIER
ATTEMPTED
POSITION 指定子に
対して不正な値を指
定して、ファイルを
開こうとしました。
POSITION='ASIS',
POSITION='REWI
ND' または
POSITION='APPEN
D' を指定してくださ
い。
1012
OPEN WITH
ILLEGAL DELIM
SPECIFIER
ATTEMPTED
DELIM 指定子に対し
て不正な値を指定し
て、ファイルを開こ
うとしました。
DELIM=
'APOSTROPHE',
DELIM='QUOTE' ま
たは
DELIM='NONE' を
指定してください。
1013
OPEN WITH
ILLEGAL ACTION
SPECIFIER
ATTEMPTED
ACTION 指定子に対
して不正な値を指定
して、ファイルを開
こうとしました。
ACTION='READ',
ACTION='WRITE'
または
ACTION='READWR
ITE' を指定してくだ
さい。
674
付録 A
入出力実行時エラーメッセージ
実行時入出力エラー
表 A-1 実行時入出力エラー ( 続き )
エラー
番号
エラーメッセージ
説明
処置
1014
WRITE PAST 2GIG
LIMIT FAILED, IS
HUGE FOR ENTRY
ちょうど 2 GB のファ
イルマークで、
Fortran の I/O 操作が
失敗しました。これ
は通常、I/O 操作が行
われたファイルシス
テムがラージファイ
ルに対応していない
ことが原因で起こり
ます。
I/O 操作を実行して
いるファイルシステ
ムがラージファイル
対応でなければ、
fsadm (1M) コマンド
を使用してラージ
ファイル対応に設定
するよう、管理者に
依頼してください。
1015
CONVERT
SPECIFIER NOT
ALLOWED WITH
FORMATTED
OPEN
このエラーは、ユー
ザーが FORMATTED
ファイルに対してバ
イナリ変換 (OPEN 文
で CONVERT 引き数
を指定して ) を実行し
ようとしている場合
にのみ起こります。
FORMATTED ファ
イルに対する変換は
メッセージなしで無
視するよう、環境変
数で設定することが
できます。
1016
CONVERT
SPECIFIER NOT
ALLOWED WITH
DIRECT OPEN
このエラーは、ユー
ザーが DIRECT ファ
イルに対してバイナ
リ変換 (OPEN 文で
CONVERT 引き数を
指定して ) を実行しよ
うとしている場合に
のみ起こります。
DIRECT ファイルに
対する変換はメッ
セージなしで無視す
るよう、環境変数で
設定することができ
ます。
付録 A
675
入出力実行時エラーメッセージ
実行時入出力エラー
676
付録 A
用語集
大きさ引き継ぎ配列
用語集
B
BOZ 定数
2 進数、8 進数、または 16 進数に編集できる定数表現。「型なし定数」も参照してください。
E
EQUIVALENCE 結合
EQUIVALENCE 文を使用して複数のデータオブジェクト間で記憶単位を共有する作用。
H
HPF (High Performance Fortran)
ユーザー指向のデータ分散および割り付け境界を提供する、Fortran 90 規格の拡張機能。HPF は
規格に定められてはいませんが、並列プログラミングに適した機能の集合です。
ア
アーカイブライブラリ
リンク時に実行可能プログラムにリンクされるルーチンのライブラリ。
「共有ライブラリ」も参
照してください。
演算子
式の中で演算を指定する 1 文字以上の文字の列。たとえば、a + b の場合は、+ が演算子です。
演算対象
前または後に演算子が付いている式。たとえば、a + b の場合、a と b はどちらも演算対象で
す。
大きさ
配列内の要素の総数。そのすべての寸法の積です。
大きさゼロの配列
最低 1 つの次元の最低 1 つの寸法がゼロになっている配列。大きさゼロの配列は、大きさがゼロ
であり、要素は含まれていません。
大きさ引き継ぎ配列
用語集
677
用語集
オプション
旧 FORTRAN 77 の機能。手続きの仮引き数であり、結合している実引き数からその大きさを引
き継ぐ ( 取り出す ) 配列 ( ただし、その形状を引き継ぐとは限りません )。大きさ引き継ぎ配列の
最後の次元の上限は、アスタリスク (*) で指定します。「形状引き継ぎ配列」も参照してくださ
い。
オプション
「コンパイル行オプション」を参照してください。
親子結合
内部手続き、モジュール手続き、または構造型定義が、その親プログラムの言語要素を参照する
作用。
親プログラム
内部手続きまたはモジュールを含むプログラム単位または副プログラム。
カ
外部手続き
主プログラム、モジュール、または別の副プログラムには含まれていない手続き。
外部ファイル
実行中のプログラムの外部にある媒体に保存されるファイル。
外部名
リンカーに対して指定されると、プログラム単位によって引用されるオブジェクト名。Fortran の
ソースファイルに指定される名前は英字の大文字と小文字を区別しませんが、外部名では区別し
ます。
拡張演算子
「利用者定義演算子」を参照してください。
下限
「上下限」を参照してください。
型
「データ型」を参照してください。
型宣言文
1 つ以上の定数、関数または変数のデータ型と、省略可能な属性を指定する文。
型なし定数
678
用語集
用語集
行順
ビットパターンを示すように編集される定数表現。したがって、定数の型を含みません。BOZ
定数およびホレリス定数は両方とも型なし定数です。
仮配列
形状明示配列である仮引き数。
仮引き数
名前が手続きまたは ENTRY 文の引き数並びに現れる言語要素。仮引き数は、手続きの呼び出し
時に実引き数と結合されます。仮引き数は、呼び出された手続きのソースに現れます。
関数
値 ( 関数結果 ) を返し、式内で引用できる手続き。
関数結果
関数の呼び出しから返されるデータオブジェクト。
記憶列
Fortran オブジェクトがメモリーで配置される順番。プログラマーは、共通ブロックや
EQUIVALENCE 結合を使用したり、列構造型を定義することによって記憶列を制御できます。
配列の記憶列は、配列要素順序によって決まります。
記憶列結合
異なる Fortran オブジェクトと同じ記憶領域との結合。共通ブロックや EQUIVALENCE 結合に
よって記憶列結合されます。
刻み幅
添え字三つ組に指定できる省略可能な増分値。添え字三つ組に指定しなければ、刻み幅の値は 1
になります。
共通ブロック
変数を保存するためのメモリーブロック。共通ブロックは、1 つ以上のプログラム単位で引用で
きる大域要素です。
共有ライブラリ
実行時に実行可能プログラムにリンクされ、同時に複数のプログラムによって使用可能になる
ルーチンのライブラリ。
「アーカイブライブラリ」も参照してください。
行順
用語集
679
用語集
記録
C における配列のデフォルトの保存方法。メモリー表現では、配列の行は連続して保存されま
す。たとえば、配列 a[3][2] の場合、要素 a[0][0] は 1 番目に、要素 a[0][1] は 2 番目に、
要素 a[1][0] は 3 番目の位置に格納されます。「列順」も参照してください。
記録
ファイル内でひとまとまりとして扱われる値の列。
キロバイト
1024 バイト (210 バイト )。
「バイト」も参照してください。
キーワードオプション
手続き引用に対して、実引き数が引き数並びのいずれの場所にも指定可能になる Fortran 90 の機
能。
空状態
指示先を指さない空状態のポインター。ポインターは、それが指定された DEALLOCATE または
NULLIFY 文の実行後、または空状態のポインターと結合されている ( を指す ) ポインターによっ
て空状態になります。
組み込み
代入文、データ型、演算および手続きは、Fortran 90 規格で定義されている場合は組み込みであ
り、定義しなくても任意の有効域内で使用することができます。
組み込み関数 %REF および %VAL
手続き引用で引き数渡し規則を変更するために使用する HP 拡張機能です。
形状
各次元の配列の寸法 ( 要素の数 ) と次元数 ( 次元の数 )。
形状適合
2 つの配列は、どちらも同じ次元数 ( 次元の数 ) と同じ寸法 ( 各次元の要素の数 ) を持つ場合に、
形状適合しているといいます。スカラは、いかなる配列とも形状適合します。
形状引き継ぎ配列
手続きの仮引き数であり、結合している実引き数からその形状を引き継ぐ ( 取り出す ) 配列。各
次元の形状引き継ぎ配列の上限は、コロン (:) で表されます。
「大きさ引き継ぎ配列」も参照して
ください。
形状無指定配列
680
用語集
用語集
サブルーチン
割り付け配列またはポインター配列 (ALLOCATABLE または POINTER 属性を持つ配列 )。
形状明示配列
次元ごとに明示的に宣言された上下限を持つ配列。
構造型
1 つ以上の成分で構成される利用者定義の ( 非組み込み ) データ型。構造型の各成分は、組み込
みデータ型または別の構造型です。
結合
同じ要素を複数の名前で参照できる機構。「引き数結合」、
「親子結合」、
「ポインター結合」、「順
序結合」、
「記憶列結合」
、および「参照結合」も参照してください。
構文
SELECT CASE 文、DO 文、IF 文または WHERE 文で始まり、それに対応する END SELECT 文、END
DO 文、END IF 文または END WHERE 文で終わる一連の文。
構造体
スカラである構造型のデータオブジェクト。
構造体成分
「成分」を参照してください。
個別手続き
各実引き数が特定のデータ型でなければならない手続き。「総称手続き」も参照してください。
コンパイラ指令
ソースプログラムに含まれ、そのプログラムのコンパイル方法に影響する特殊書式による注釈。
コンパイラ指令は、Fortran 90 規格の一部ではありません。HP Fortran 90 では、コンパイラ指令
を使用してソースのリスト出力や、最適化などの機能を制御できます。
コンパイル行オプション
HP Fortran コンパイラのデフォルトの動作を無効にするために、f90 コマンド行で指定できるフ
ラグ。
サ
サブルーチン
CALL 文によって引用される手続き。通常、サブルーチンから返される値は、そのサブルーチン
の引き数によって与えられます。
用語集
681
用語集
参照結合
参照結合
USE 文で指定された異なる有効域間の名前の結合。「モジュール」も参照してください。
式
データの引用または計算を形成する、一連の演算対象、( 省略可能な ) 演算子およびかっこ。「定
数式」、「初期値式」および「宣言式」も参照してください。
次元
配列の各添え字は、その配列の次元に対応します。1 ~ 7 次元の配列を使用することができま
す。次元の数は、配列の次元数です。「寸法」も参照してください。
次元数
配列の次元の数。スカラの次元数は 0 です。
指示先
ポインターと結合できる名前付きデータオブジェクト。指示先は、TARGET 文中、または TARGET
属性を持つ型宣言文中に指定します。
事前接続された
3 つの入出力装置がオペレーティングシステムによってファイルに事前接続されており、OPEN
文によって接続する必要がありません。事前接続されている装置は、次のとおりです。
•
装置 5 ( 標準入力 )
•
装置 6 ( 標準出力 )
•
装置 7 ( 標準エラー )
実行文
プログラムに 1 つ以上の計算処理動作または飛び越し動作を実行させる命令。
実引き数
手続き ( 関数またはサブルーチン ) の呼び出しによって渡される値、変数または手続き。実引き
数は、呼び出し側手続きのソースに現れます。「仮引き数」も参照してください。
自動割り付けデータオブジェクト
副プログラム内で宣言され、その記憶領域が副プログラムの呼び出し時に動的に割り付けられる
データオブジェクト。記憶領域は、副プログラムから戻るときに解放されます。Fortran 90 は、
自動割り付け配列と自動割り付け文字列変数をサポートします。
682
用語集
用語集
指令
自動割り付け配列
手続きに対して局所的で、仮引き数ではない形状明示配列。1 つ以上の自動割り付け配列の上下
限が手続きへ入るときに決定されるので、自動割り付け配列の大きさと形状は手続きが呼び出さ
れるたびに異なる可能性があります。
授受特性
引き数が手続きへのデータ転送に使用されるか、手続きの外へのデータ転送に使用されるか、ま
たはその両方に使用されるかを示す仮引き数の属性。
主プログラム
プログラムの実行時に最初に実行が開始されるプログラム単位。通常、主プログラムの最初の文
は、PROGRAM 文です。
種別型パラメータ
値によって組み込みデータ型の範囲が決まる整数パラメータ。たとえば、INTEGER(KIND=2) な
どです。また、種別型パラメータでは、複素数および実数データ型の有効桁数も指定します。
順序結合
次元数または文字長において仮引き数と実引き数が異なる場合に発生する、両者間の結合。仮引
き数と実引き数は、最初から順番に要素単位に一致する要素または文字単位に一致する文字で
す。「配列要素順序」および「列順」も参照してください。
上下限
各次元の配列の添え字として許される最小値と最大値。各次元には、上限と下限があり、添え字
の値の範囲を定義します。
上限
「上下限」を参照してください。
省略可能な引き数
手続きの呼び出し時に、対応する実引き数を必要としない仮引き数。
初期値式
データを初期化するために使用される定数式のより制限された形式。
初期値設定副プログラム
名前付き共通ブロック内の変数の初期値を設定し、実行文を含まない手続き。初期値設定副プロ
グラムは、BLOCK DATA 文で始まります。
指令
「コンパイラ指令」を参照してください。
用語集
683
用語集
数値型
数値型
複素数型、倍精度実数型、整数型、または実数型のデータ型。
スカラ
次元数が 0 のため、配列ではないデータ項目。
寸法
配列の 1 次元に含まれる要素の数。
整合配列
少なくとも 1 つの非定数の次元を持つ配列の仮引き数。
成分
構造型の一部である要素。構造型は、1 つ以上の成分で構成できます。たとえば、time%hour は
time の hour 成分を指します ( また、time は変数であり、そのデータ型は、プログラム内で定
義された構造型です )。
接続されている
(1) 装置は、外部ファイルを参照する場合に、接続されていることになります。
(2) 外部ファイルは、装置によって参照される場合に、接続されていることになります。
どちらの場合も、接続は OPEN 文または事前接続によって確立されます。「事前接続されている」
も参照してください。
宣言式
単純宣言文で指定可能であり、手続きに対してエントリーで評価される式の制限された形式 ( た
とえば、型宣言文 )。
全体配列
添え字がなく、配列名だけが指定された、配列の ( たとえば、型宣言文における ) 引用。全体配
列の演算は、単一の添え字付き要素だけでなく、配列のすべての要素に影響を与えます。
総称手続き
少なくても 1 つの実引き数が複数のデータ型を持つことができる手続き。総称手続きは、組み込
み手続きでも利用者定義手続きでもかまいません。
装置番号
入出力文でファイルを引用できるように、ファイルに接続できる論理番号。
684
用語集
用語集
デマンドロード可能
添え字
配列の 1 次元の上下限の範囲内にあるスカラ値。1 つの配列要素を指定するには、その配列の各
次元の添え字を指定しなければなりません。
添え字三つ組
開始要素、終了要素、および ( 省略可能な ) 刻み幅をコロン (:) で区切ったもので構成される部
分配列仕様。
属性
型宣言文で指定できる定数または変数の特性。ほとんどの属性は、型宣言文の代わりに別の文で
指定できます。たとえば、ALLOCATABLE 文は、型宣言文に使用される ALLOCATABLE 属性と同じ
意味を持ちます。
タ
大域要素
実行可能プログラム全体が有効範囲となるプログラム単位、共通ブロックまたは外部手続き。
定数
プログラムの実行中に同じ値を保持するデータオブジェクト。定数の値は、プログラムのコンパ
イル時に設定されます。定数は、定数表現または名前付き定数です。
定数式
プログラムの実行中に値が変わらない式。定数式の演算対象は、すべて定数です。
定数表現
名前を持たない定数。定数表現の値は、直接プログラムに書きます。「名前付き定数」も参照し
てください。
データ型
値の集合、それらの値の表現方法およびそれらの値を解釈し操作する演算の集合によって特徴付
けられる、データの名前付き分類区分。Fortran 90 の組み込みデータ型には、文字型、複素数型、
倍精度実数型、整数型、論理型および実数型があります。また、HP Fortran 90 には、バイト型お
よび倍精度複素数型というデータ型も拡張として用意されています。「構造型」も参照してくだ
さい。
手続き
呼び出し可能なプログラムコードの単位。手続きは、関数でもサブルーチンでもかまいません。
デマンドロード可能
用語集
685
用語集
問い合わせ関数
プロセスがデマンドロード可能になるのは、そのページがアクセス時にのみ物理メモリーに入れ
られる場合です。
問い合わせ関数
主要な引き数の値ではなくその特性に基づいて戻り値で情報が返される組み込み関数。
ナ
内部手続き
主プログラムまたは別の副プログラムに含まれている手続き。
内部ファイル
書式付き入出力用のファイル記憶媒体として使用される変数。内部ファイルはメモリーに保存さ
れ、通常は編集記述子を使用して内部表現形式から文字表現にデータを変換するために使用され
ます。
名前
英字 1 文字と後続の 254 文字以内の英数字 ( 英字、数字、下線および $) で構成され、
HP Fortran 90 のプログラム単位内で共通ブロック、仮引き数、手続き、プログラム単位または変
数などの言語要素を識別するためのもの。
名前付き定数
名前が付いている定数。「定数表現」も参照してください。
ハ
廃止予定事項
FORTRAN 77 規格で定義されており、まだ共通に使用されているが冗長とみなされる、算術 IF
文などの機能。
廃止予定事項の使用はお勧めできません。Fortran 90 規格には、廃止予定事項がまとめられてい
ます。
バイト
アドレス指定可能な境界上で始まる連続するビットのグループ。HP マシンでは、1 バイトの長
さは 8 ビットです。「ギガバイト」、
「キロバイト」、
「メガバイト」および「テラバイト」も参照
してください。
配列
686
用語集
用語集
ファイル
同じデータ型を持つ要素が四角形に配列されたもの。配列の特性には、その次元数、形状、寸法
およびデータ型が含まれます。「上下限」および「次元」も参照してください。
配列構成子
スカラまたは配列の値の列として表される 1 次元の配列。値は、定数や変数でもかまいません。
配列値
配列であるという特性を持つこと。たとえば、配列値関数は、戻り値が配列です。
配列ポインター
POINTER 属性を持ち、したがって指示先オブジェクトへポイントするために使用される配列。
配列要素
配列名と、配列内の要素位置を識別する 1 つ以上の添え字をかっこで囲んだもので指定される、
配列の個々のスカラ成分。
配列要素順序
メモリーに配置される配列の順序。HP Fortran 90 配列の配列要素順序は、列順です。配列要素順
序は、順序結合を判定するためにも使用されます。
引き数
(1) 手続きまたは ENTRY 文の引き数並び内で宣言される変数。手続きが呼び出されるときに、値
を受け取ります ( 仮引き数 )。
(2) 手続きの呼び出しによって渡される変数、式または手続き ( 実引き数 )。
引き数キーワード
仮引き数の名前。引き数キーワードを使用すると、手続きが明示的引用仕様を持つ場合に、手続
きに実引き数を任意の順序で渡すことができます。
引き数結合
手続き引用が実行されるときの実引き数と仮引き数との対応関係。
ビット
2 進数の 1 または 0。「バイト」も参照してください。
ファイル
記録 (1 単位として処理される文字または値 ) の列。
「外部ファイル」および「内部ファイル」も参照してください。
用語集
687
用語集
副プログラム
副プログラム
「手続き」を参照してください。
部分配列
1 次元以上の添え字三つ組またはベクトル添え字で指定される配列の部分集合。配列 a(4,4) の
場合、a(2:4:2,2:4:2) は、偶数番にインデックス付けされた要素 a(2,2), a(4,2), a(2,4) お
よび a(4,4) だけを含む部分配列です。
部分列
スカラ文字列の連続的な一部分。部分列は部分配列ではないので注意してください。
古いプログラム
FORTRAN 77 以前の旧プログラム。パンチカードに保存され、それ以後は変更がないので、「古
い」プログラムと呼ばれています。通常、この種のプログラムは GO TO 文などの非構造化プロ
グラミング技法に依存します。
プログラム
特定のタスクを実行するためにコンピュータによって実行される一連の命令。「実行可能プログ
ラム」も参照してください。
プログラム単位
主プログラム、モジュール、外部手続き、または初期値設定副プログラム。
ブロック
1 つのまとまった 1 単位として扱われ、SELECT CASE, DO, IF または WHERE 構文に含まれる連続
する文の列。
文
プログラム内の命令またはステップを表す文字の列。通常、1 つの文はプログラムでも 1 行で表
しますが、複数行にまたがる場合もあります。
アンパサンド (&) 継続文字を使用すると、文を複数行から構成できます。また、複数の文をセミ
コロン (;) で区切って 1 行の中に書くこともできます。
文関数
スカラ値を返し、単一のスカラ式で定義される関数。
文番号
688
用語集
用語集
明示的引用仕様
文の前にあって文を一意の番号で識別する、長さ 1 ~ 5 桁の整数。文の文番号を使用すると、そ
の文に制御を移行したり、その文を FORMAT 文として引用できます。
ベクトル添え字
1 次元の整数値配列を添え字として使用して、1 つの配列の複数の要素を引用する方法。この場
合、各要素は連続していなくてもかまいません。
変数
プログラムの実行中に値を定義し、再定義できるデータオブジェクト。たとえば、配列要素また
は部分配列、名前付きデータオブジェクト、構造体成分、および部分列は、いずれも変数として
指定できます。
ポインター
POINTER 属性を持つ変数。指定したデータ型の変数を引用する ( 指す ) ことができます ( データ
自体は格納されません )。
ポインター結合
ポインターがその指示先の記憶領域と結合状態になる作用。ポインター結合は、ポインター代入
時、または有効な ALLOCATE 文の実行時に発生します。
マ
無名共通ブロック
名前と結合していない共通ブロック。
名称変更機能
参照結合によって要素にアクセス可能なプログラム単位内で、モジュール要素によって名称変更
が可能になる USE 文の機能。
明示的引用仕様
呼び出し側のプログラム単位によって特性 ( 手続きの名前と属性、およびその引き数の順序と属
性など ) が認識される手続きの引用仕様。次のいずれかの場合に、手続きの有効域内に明示的引
用仕様を使用することができます。
•
引用仕様宣言で記述する場合
•
内部手続きの場合
•
モジュール手続きの場合
•
文関数の場合
用語集
689
用語集
文字
文字
文字集合に含まれる数字、英字またはその他の記号。
モジュール
他のプログラム単位でのアクセスを可能にする構造型、手続き、変数群および変数の定義が入っ
ているプログラム単位。モジュールは、MODULE 文で始まり、その公開定義は USE 文によって他
のプログラム単位に使用可能になります。
モジュール手続き
モジュールに含まれ、内部手続きでない手続き。
文字列
0 個以上の連続する文字の列。
戻り値
「関数結果」を参照してください。
ヤ
有効域
構造型定義、引用仕様本体 ( これらに含まれている構造型定義または引用仕様本体は除く )、あ
るいはプログラム単位または副プログラム ( これらに含まれている構造型定義、引用仕様本体ま
たは副プログラムは除く )。
有効範囲
実行可能プログラム内で、名前または宣言の解釈が 1 つしかない部分。
要素
「配列要素」を参照してください。
要素別処理
要素別処理を行うには、組み込み演算、手続きまたは代入を配列のすべての要素に個別に適用す
るか、形状適合配列とスカラの対応する要素に個別に適用しなければなりません。
ラ
ライブラリ
他の言語だけでなく、Fortran 90 で書かれたプログラムで使用可能なサブルーチンとデータのオ
ブジェクトコードを含むファイル。
「リンカー」も参照してください。
690
用語集
用語集
割り付け配列
利用者定義演算子
INTERFACE 文中に指定され、その演算が 1 つ以上の利用者定義関数によって実行される演算子。
利用者定義代入
ASSIGNMENT(=) 引用仕様宣言とサブルーチンによって定義される非組み込み代入文。
リンカー
ld ユーティリティ。リンカーによって、プログラムのソース中のコンパイル対象のソースファ
イルに含まれていないルーチンの引用が解決されます。リンカーは、可能であれば、各引用をそ
れに対応するライブラリルーチンと照合します。
列順
Fortran 90 での配列のデフォルトの格納方法。配列のメモリー表現では、各列が連続して保存さ
れます。たとえば、配列 a(2,3) の場合、要素 a(1,1) は 1 番目に、要素 a(2,1) は 2 番目に、
要素 a(1,2) は 3 番目の位置に格納されます。「行順」も参照してください。「行順」も参照して
ください。
列構造型
定義に SEQUENCE 文を含む構造型。列構造型の成分は、構造型の定義で指定されているように、
記憶列にあります。
ワ
割り付け配列
ALLOCATABLE 属性を持つ名前付き配列。その次元数はコンパイル時に指定しますが、上下限は
実行時に決定されます。配列の領域は、その配列を引用する前に明示的に割り付けなければなり
ません。
用語集
691
用語集
利用者定義演算子
692
用語集
索引
数字
16 進
定数 , 108
編集記述子 , 259
2000 年 , 647
2 重コロン区切り記号 , 104
2進
定数 , 108
編集記述子 , 243
8進
定数 , 108
編集記述子 , 255
A
ABORT 句
ON 文 , 407
ABORT 組み込みサブルーチン , 521
ABS 組み込み関数 , 521
ACCEPT 文 , 269
入出力項目並び , 219
ACCESS 指定子
INQUIRE 文 , 376
OPEN 文 , 411
エラー , 670
ACCESS ルーチン , 650
ACHAR 組み込み関数 , 522
ACOSD 組み込み関数 , 523
ACOSH 組み込み関数 , 524
ACOS 組み込み関数 , 523
ACTION 指定子
INQUIRE 文 , 376
OPEN 文 , 412
エラー , 674, 675
ADJUSTL 組み込み関数 , 525
ADJUSTR 組み込み関数 , 525
ADVANCE 指定子
READ 文 , 443
WRITE 文 , 504
停留入出力 , 213
AIMAG 組み込み関数 , 526
AIMAXO 組み込み関数 , 595
AIMINO 組み込み関数 , 600
AINT 組み込み関数 , 526
AJMAXO 組み込み関数 , 595
AJMINO 組み込み関数 , 600
AKMAXO 組み込み関数 , 595
AKMINO 組み込み関数 , 600
ALARM ルーチン , 651
索引
ALLOCATABLE 文および属性 , 271
TARGET 文 , 481
形状無指定配列 , 58
割り付け配列 , 59
ALLOCATED 組み込み関数 , 528
DEALLOCATE 文 , 316
式における~ , 88
配列 , 76
割り付け配列 , 59
ALLOCATE 文 , 273
ALLOCATABLE 文 , 272
POINTER 文 , 430
配列ポインター , 58
割り付け配列 , 59
ALL 組み込み関数 , 527
ALOG10 組み込み関数 , 591
ALOG 組み込み関数 , 591
AMAX1 組み込み関数 , 595
AMAXO 組み込み関数 , 595
AMIN1 組み込み関数 , 600
AMINO 組み込み関数 , 600
AMOD 組み込み関数 , 603
AND 演算子 , 81
AND 組み込み関数 , 528
ANINT 組み込み関数 , 529
ANY 組み込み関数 , 530
ASA 復帰制御 , 225
asa コマンド , 225
空白 , 209
ASCII 大小順序
ACHAR 組み込み関数 , 522
IACHAR 組み込み関数 , 562
LGE 組み込み関数 , 587, 588
LGT 組み込み関数 , 588
LLT 組み込み関数 , 589
ASIND 組み込み関数 , 532
ASINH 組み込み関数 , 532
ASIN 組み込み関数 , 531
ASK COMMON 文 , 484
ASSIGNMENT 句 , 435, 439
INTERFACE 文 , 391
USE 文 , 493
引用仕様宣言構文 , 179
定義代入 , 184
ASSIGN 文 , 276
割り当て形 GO TO 文 , 365
ASSOCIATED 組み込み関数 , 533
DEALLOCATE 文 , 316
空状態のポインター , 127
693
索引
式における~ , 88
ATAN2D 組み込み関数 , 535
ATAN2 組み込み関数 , 535
ATAND 組み込み関数 , 536
ATANH 組み込み関数 , 537
ATAN 組み込み関数 , 534
+autodbl4 オプション
型宣言文 , 102
+autodbl オプション
型宣言文 , 102
AUTOMATIC 文および属性 , 278
手続き定義構文 , 159
A 編集記述子 , 241
エラー , 672
B
BABS 組み込み関数 , 522
BACKSPACE 文 , 280
BADDRESS 組み込み関数 , 537
Basic Linear Algebra Subroutine ライブラリ
, 645
BBCLR 組み込み関数 , 565
BBITS 組み込み関数 , 566
BBTEST 組み込み関数 , 539
BDIM 組み込み関数 , 551
BIAND 組み込み関数 , 564
BIEOR 組み込み関数 , 569
BIOR 組み込み関数 , 576
BITEST 組み込み関数 , 539
BIT_SIZE 組み込み関数 , 538
BIXOR 組み込み関数 , 582
BJTEST 組み込み関数 , 539
BKTEST 組み込み関数 , 539
BLANK 指定子 , 260
BN および BZ 編集記述子 , 245
B 編集記述子 , 244
INQUIRE 文 , 376
OPEN 文 , 412
エラー , 669, 670
BLAS
エラー , 662
BLAS ルーチン , 645
CAXPY, 660
CCOPY, 660
CDOTC, 660
CDOTU, 660
CGBMV, 660
CGEMM, 660
694
CGEMV, 660
CGERC, 660
CGERU, 660
CHBMV, 661
CHEMM, 661
CHEMV, 661
CHER, 661
CHER2, 661
CHER2K, 661
CHERK, 661
CHPMV, 661
CHPR, 661
CHPR2, 661
CROT, 660
CROTG, 660
CSCAL, 661
CSSCAL, 661
CSWAP, 661
CSYMM, 661
CSYR2K, 661
CSYRK, 661
CTBMV, 661
CTBSV, 661
CTPMV, 661
CTPSV, 661
CTRMM, 661
CTRMV, 661
CTRSM, 662
CTRSV, 662
DASUM, 660
DAXPY, 660
DCOPY, 660
DDOT, 660
DGBMV, 660
DGEMM, 660
DGEMV, 660
DGER, 660
DNRM2, 660
DROT, 660
DROTG, 660
DROTM, 660
DROTMG, 660
DSBMV, 661
DSCAL, 661
DSPMV, 661
DSPR, 661
DSPR2, 661
DSTRSV, 662
DSWAP, 661
索引
索引
DSYMM, 661
DSYMV, 661
DSYR, 661
DSYR2, 661
DSYR2K, 661
DSYRK, 661
DTBMV, 661
DTBSV, 661
DTPMV, 661
DTPSV, 661
DTRMM, 661
DTRMV, 661
DTRSM, 662
DZASUM, 660
DZNRM2, 660
ICAMAX, 660
IDAMAX, 660
ISAMAX, 660
IZAMAX, 660
-lblas オプション , 646
SASUM, 660
SAXPY, 660
SCASUM, 660
SCNRM2, 660
SCOPY, 660
SDOT, 660
SGBMV, 660
SGEMM, 660
SGEMV, 660
SGER, 660
SNRM2, 660
SROT, 660
SROTG, 660
SROTM, 660
SROTMG, 660
SSBMV, 661
SSCAL, 661
SSPMV, 661
SSPR, 661
SSPR2, 661
SSWAP, 661
SSYMM, 661
SSYMV, 661
SSYR, 661
SSYR2, 661
SSYR2K, 661
SSYRK, 661
STBMV, 661
STBSV, 661
索引
STPMV, 661
STPSV, 661
STRMM, 661
STRMV, 661
STRSM, 662
STRSV, 662
XERBLA, 662
ZAXPY, 660
ZCOPY, 660
ZDOTC, 660
ZDOTU, 660
ZDSCAL, 661
ZGBMV, 660
ZGEMM, 660
ZGEMV, 660
ZGERC, 660
ZGERU, 660
ZHBMV, 661
ZHEMM, 661
ZHEMV, 661
ZHER, 661
ZHER2, 661
ZHER2K, 661
ZHERK, 661
ZHPMV, 661
ZHPR, 661
ZHPR2, 661
ZROT, 660
ZROTG, 660
ZSCAL, 661
ZSWAP, 661
ZSYMM, 661
ZSYR2K, 661
ZSYRK, 661
ZTBMV, 661
ZTBSV, 661
ZTPMV, 661
ZTPSV, 661
ZTRMM, 661
ZTRMV, 661
ZTRSM, 662
ZTRSV, 662
アクセスする , 646
引き数としてルーチンを渡す , 648
分類 , 660
マニュアルページ , 649
リスト , 660
BLOCK DATA 文 , 282
END 文 , 340
695
索引
初期値設定プログラム単位構文 , 196
文の順序 , 43
BMOD 組み込み関数 , 603
BMVBITS 組み込み関数 , 605
BNOT 組み込み関数 , 607
BN 編集記述子 , 245
bold monospace ( 太字のモノスペースフォン
ト ), 27
BOZ 定数 , 108
型規則 , 110, 111
型なし定数 , 110
用語集 , 677
BSHFT 組み込み関数 , 579
BSIGN 組み込み関数 , 627
BTEST 組み込み関数 , 538
BUFFER IN 文 , 283
BUFFER OUT 文 , 285
BYTE 文 , 287
型宣言文 , 103
BZ 編集記述子 , 245
B 編集記述子 , 243
C
CABS 組み込み関数 , 522
CALL 句
ON 文 , 407
CALL 文 , 289
サブルーチン引用構文 , 159
選択戻り , 160
CASE 構文 , 134
CASE 文 , 292
END SELECT 文 , 342
SELECT CASE 文 , 463
CASE 文 , 292
CASE 構文 , 134
初期値式 , 87
CAXPY ルーチン , 660
CCOPY ルーチン , 660
CCOS 組み込み関数 , 543
CDABS 組み込み関数 , 522
CDCOS 組み込み関数 , 543
CDEXP 組み込み関数 , 557
CDLOG 組み込み関数 , 591
CDOTC ルーチン , 660
CDOTU ルーチン , 660
CDSIN 組み込み関数 , 628
CDSQRT 組み込み関数 , 632
CEILING 組み込み関数 , 539
696
CEXP 組み込み関数 , 557
CGBMV ルーチン , 660
CGEMM ルーチン , 660
CGEMV ルーチン , 660
CGERC ルーチン , 660
CGERU ルーチン , 660
CHARACTER 文 , 295
型宣言文 , 103
CHAR 組み込み関数 , 540
CHBMV ルーチン , 661
CHDIR ルーチン , 651
CHECK_OVERFLOW 指令
ON 文 , 409
CHEMM ルーチン , 661
CHEMV ルーチン , 661
CHER2K ルーチン , 661
CHER2 ルーチン , 661
CHERK ルーチン , 661
CHER ルーチン , 661
CHMOD ルーチン , 651
CHPMV ルーチン , 661
CHPR2 ルーチン , 661
CHPR ルーチン , 661
CLOG 組み込み関数 , 591
CLOSE 文 , 298
エラー , 669, 670
CMPLX 組み込み関数 , 541
COMMON 文 , 300
SEQUENCE 文 , 464
記憶列結合 , 154
クレイ形式ポインター , 427
初期値設定プログラム単位 , 196
COMPLEX 文 , 304
型宣言文 , 103
CONJG 組み込み関数 , 541
CONTAINS 文 , 307
主プログラム単位構文 , 156
手続き定義構文 , 159
内部手続き , 164
文の順序 , 43
モジュール構文 , 189
有効域 , 44
CONTINUE 文 , 309
実行制御 , 142
COSD 組み込み関数 , 543
COSH 組み込み関数 , 543
COS 組み込み関数 , 542
COUNT 組み込み関数 , 544
CROTG ルーチン , 660
索引
索引
CROT ルーチン , 660
CSCAL ルーチン , 661
CSHIFT 組み込み関数 , 545
CSIN 組み込み関数 , 628
CSQRT 組み込み関数 , 632
CSSCAL ルーチン , 661
CSWAP ルーチン , 661
CSYMM ルーチン , 661
CSYR2K ルーチン , 661
CSYRK ルーチン , 661
CTAN 組み込み関数 , 636
CTBMV ルーチン , 661
CTBSV ルーチン , 661
CTIME ルーチン , 651
CTPMV ルーチン , 661
CTPSV ルーチン , 661
CTRMM ルーチン , 661
CTRMV ルーチン , 661
CTRSM ルーチン , 662
CTRSV ルーチン , 662
CYCLE 文 , 310
実行制御 , 143
C 言語
引き数渡し規約 , 176
C のエスケープ文字 , 113
C プリプロセッサ
指令 , 38, 49
D
DABS 組み込み関数 , 522
DACOSD 組み込み関数 , 524
DACOSH 組み込み関数 , 524
DASINH 組み込み関数 , 533
DASIN 組み込み関数 , 532
DASUM ルーチン , 660
DATAN2D 組み込み関数 , 536
DATAN2 組み込み関数 , 535
DATAND 組み込み関数 , 537
DATANH 組み込み関数 , 537
DATAN 組み込み関数 , 534
DATA 文 , 104, 312
BLOCK DATA 文 , 282
BOZ 定数 , 108
IMPLICIT 文 , 371
PARAMETER 文 , 424
クレイ形式ポインター , 427
自動割り付け変数 , 278
初期値式 , 87
索引
配列構成子 , 71
文の順序 , 43
有効域 , 44
DATE_AND_TIME 組み込みサブルーチン ,
546
DATEY2K, 651
DATE 組み込みサブルーチン , 546
DAXPY ルーチン , 660
DBLEQ 組み込み関数 , 549
DBLE 組み込み関数 , 548
DCMPLX 組み込み関数 , 549
DCONJG 組み込み関数 , 542
DCOPY ルーチン , 660
DCOSD 組み込み関数 , 543
DCOSH 組み込み関数 , 544
DCOS 組み込み関数 , 523, 543
DDIM 組み込み関数 , 551
DDINT 組み込み関数 , 527
DDOT ルーチン , 660
DEALLOCATE 文 , 316
ALLOCATE 文 , 274
割り付け配列 , 59
DECODE 文 , 318
ENCODE 文 , 338
DEFAULT 句
CASE 文 , 292
DELIM 指定子
INQUIRE 文 , 377
OPEN 文 , 412
エラー , 674
並び出力 , 208
並び入出力 , 208
DEXP 組み込み関数 , 557
DFLOAT 組み込み関数 , 549
DFLOTI 組み込み関数 , 550
DFLOTJ 組み込み関数 , 550
DFLOTK 組み込み関数 , 550
DGBMV ルーチン , 660
DGEMM ルーチン , 660
DGEMV ルーチン , 660
DGER ルーチン , 660
DIGITS 組み込み関数 , 550
DIMENSION 文および属性 , 321
ALLOCATABLE 文 , 272
構造型 , 118
配列宣言 , 54
DIM 組み込み関数 , 550
DINT 組み込み関数 , 527
DIRECT 指定子および INQUIRE 文 , 377
697
索引
+dlines オプション
デバッグ行 , 49
DLOG10 組み込み関数 , 591
DLOG 組み込み関数 , 591
DMAX1 組み込み関数 , 595
DMIN1 組み込み関数 , 600
DMOD 組み込み関数 , 603
DNINT 組み込み関数 , 530
DNRM2 ルーチン , 660
DNUM 組み込み関数 , 551
DOT_PRODUCT 組み込み関数 , 551
DOUBLE COMPLEX 文 , 329
型宣言文 , 103
DOUBLE PRECISION 文 , 331
型宣言文 , 103
DO 形反復
入出力 , 220
配列構成 , 70, 71, 88
有効範囲 , 153
DO 文 , 325
DO 構文 , 136
DO ループ , 136
CONTINUE 文 , 309
CYCLE 文 , 310
DO 文構文 , 325
END DO 文 , 342
EXIT 文 , 356
FORTRAN77 形式 , 137, 142, 309, 310, 327
WHILE 句 , 325
拡張範囲 , 326
条件付き , 138
制御カウンター , 137
端末文 , 138
無限 , 139
DO ループの端末文 , 138
DPROD 組み込み関数 , 552
DREAL 組み込み関数 , 553
DROTG ルーチン , 660
DROTMG ルーチン , 660
DROTM ルーチン , 660
DROT ルーチン , 660
DSBMV ルーチン , 661
DSCAL ルーチン , 661
DSIGN 組み込み関数 , 627
DSIN 組み込み関数 , 628
DSPMV ルーチン , 661
DSPR2 ルーチン , 661
DSPR ルーチン , 661
DSQRT 組み込み関数 , 632
698
DSTRSV ルーチン , 662
DSWAP ルーチン , 661
DSYMM ルーチン , 661
DSYMV ルーチン , 661
DSYR2K ルーチン , 661
DSYR2 ルーチン , 661
DSYRK ルーチン , 661
DSYR ルーチン , 661
DTAND 組み込み関数 , 636
DTANH 組み込み関数 , 637
DTAN 組み込み関数 , 636
DTBMV ルーチン , 661
DTBSV ルーチン , 661
DTIME ルーチン , 651
DTPMV ルーチン , 661
DTPSV ルーチン , 661
DTRMM ルーチン , 661
DTRMV ルーチン , 661
DTRSM ルーチン , 662
DZASUM ルーチン , 660
DZNRM2 ルーチン , 660
D 編集記述子 , 246
E
ELSE IF 文 , 334
ELSEWHERE 文 , 336
WHERE 構文 , 95
ELSE 文 , 333
ENCODE 文 , 337
DECODE 文 , 319
END BLOCK DATA 文 , 340
END DO 文 , 342
END FUNCTION 文 , 340
手続き定義構文 , 159
END IF 文 , 342
END MODULE 文 , 340
モジュール構文 , 188
END PROCEDURE 文
引用仕様宣言 , 179
END PROGRAM 文 , 340
主プログラム単位構文 , 155
END SELECT CASE 文 , 342
END SUBROUTINE 文 , 340
手続き定義構文 , 159
END TYPE 文 , 345
END WHERE 文 , 342
ENDFILE 文 , 346
ファイル終了記録 , 200
索引
索引
END 指定子
READ 文 , 443
エラー , 670
END 文
CASE 構文 , 342
DO 構文 , 342
IF 構文 , 342
WHERE 構文 , 342
引用仕様宣言 , 344
共用体 , 343
構造体定義 , 343
内部手続き , 340
プログラム単位 , 340
文の順序 , 43
マップ , 343
モジュール手続き , 340
唯一必要な文 , 157
ENTRY 文 , 348
OPTIONAL 文 , 418
RETURN 文 , 456
代替入口点 , 163
手続き定義構文 , 159
内部手続き , 164
文の順序 , 43
有効域 , 44
EN 編集記述子 , 246
EOF エラー , 669, 670
EOR 指定子 , 444
EOSHIFT 組み込み関数 , 553
EPSILON 組み込み関数 , 555
EQUIVALENCE 結合
用語集 , 677
EQUIVALENCE 結合する , 352
DATA 文 , 313
VOLATILE 文 , 497
共通ブロック , 355
共用体の拡張機能 , 477
結果変数 , 349
構造型 , 119
自動割り付け変数 , 278
データの割り付け境界 , 353
配列 , 354
文字データ , 353
列構造型 , 464
EQUIVALENCE 文 , 352
DATA 文 , 313
SEQUENCE 文 , 464
VOLATILE 文 , 497
記憶列結合 , 154
索引
クレイ形式ポインター , 427
自動割り付け変数 , 278
初期値式 , 87
初期値設定プログラム単位 , 196
EQV 演算子 , 81
ERR 指定子
BACKSPACE 文 , 280
CLOSE 文 , 298
DECODE 文 , 318, 337
ENDFILE 文 , 346
INQUIRE 文 , 377
OPEN 文 , 413
REWIND 文 , 458
WRITE 文 , 504
+escape オプション
エスケープ文字 , 113
ES 編集記述子 , 246
ETIME ルーチン , 651
EUC, 38
EXIST 指定子
INQUIRE 文 , 377
EXIT 組み込みサブルーチン , 556
EXIT 文 , 327, 356
実行制御 , 144
EXPONENT 組み込み関数 , 557
EXP 組み込み関数 , 556
+extend_source オプション
固定形式 , 47
自由形式 , 45
EXTERNAL 文および属性 , 357, 510
INTRINSIC 文 , 394
手続き仮引き数 , 170
見本プログラム , 171
ライブラリルーチン , 648
E 編集記述子 , 246
F
FALLOC ルーチン , 652
FALSE の値 , 82, 114
FDATE ルーチン , 652
FGETC ルーチン , 652
FILE 指定子
INQUIRE 文 , 378
OPEN 文 , 413
%FILL ファイル名 , 472
FLOATI 組み込み関数 , 618
FLOATJ 組み込み関数 , 618
FLOATK 組み込み関数 , 618
699
索引
FLOAT 組み込み関数 , 618
FLOOR 組み込み関数 , 557
FLUSH
組み込みサブルーチン , 558
FLUSH ルーチン , 652
FMT 指定子
READ 文 , 442
WRITE 文 , 503
FNUM 組み込み関数 , 558
FORK ルーチン , 652
FORMATTED 指定子
INQUIRE 文 , 378
FORMAT 文 , 360
エラー , 664
書式付き入出力 , 234
文の順序 , 43
文番号 , 42
モジュール構文 , 188, 189
有効域 , 44
FORM 指定子
INQUIRE 文 , 378
OPEN 文 , 413
エラー , 669
FORTRAN 77
DO ループ , 137, 309, 310, 327
ENTRY 文 , 350, 418
クレイ形式ポインター , 427
初期値設定プログラム単位 , 282
文関数 , 166, 307
Fortran の新機能 , 32
FPUTC ルーチン , 652
FRACTION 組み込み関数 , 558
FREE 組み込み関数 , 559
クレイ形式ポインター , 428
FREE ルーチン , 653
FSEEK ルーチン , 653
FSET 組み込みサブルーチン , 559
エラー , 672
FSTAT ルーチン , 653
FSTREAM 組み込み関数 , 559
FTELL ルーチン , 653
ftnXX, 205
FUNCTION 文 , 362
END 文 , 340
ENTRY 文 , 348
OPTIONAL 文 , 418
RETURN 文 , 456
再帰的手続き , 161
手続き定義 , 158
700
文の順序 , 43
モジュール構文 , 189
F 編集記述子 , 246
G
GERROR ルーチン , 653
GETARG
組み込みサブルーチン , 560
GETARG ルーチン , 653
GETCWD ルーチン , 654
GETC ルーチン , 653
GETENV
組み込みサブルーチン , 560
GETENV ルーチン , 654
GETGID ルーチン , 654
GETLOG ルーチン , 654
GETPID ルーチン , 654
GETUID ルーチン , 654
GMTIME ルーチン , 654
GO TO 文
計算形 , 145, 366
単純 , 146, 367
割り当て形 , 144, 365
GRAN 組み込み関数 , 560
G 編集記述子 , 250
H
HABS 組み込み関数 , 522
HBCLR 組み込み関数 , 565
HBITS 組み込み関数 , 566
HBSET 組み込み関数 , 567
HDIM 組み込み関数 , 551
HFIX 組み込み関数 , 561
HIAND 組み込み関数 , 564
HIEOR 組み込み関数 , 569
HIOR 組み込み関数 , 576
HIXOR 組み込み関数 , 582
HMOD 組み込み関数 , 603
HMVBITS 組み込み関数 , 605
HNOT 組み込み関数 , 607
HOSTNM ルーチン , 654
$HP$ CHECK_OVERFLOW 指令
ON 文 , 409
HPF (High Performance Fortran), 677
HP 文字集合 , 38
HSHFTC 組み込み関数 , 580
HSHFT 組み込み関数 , 579
HSIGN 組み込み関数 , 627
索引
索引
HTEST 組み込み関数 , 539
HUGE 組み込み関数 , 561
H 編集記述子 , 251
I
I/O 指定子
ACCESS=, 376
ACTION=, 376, 412
ADVANCE=, 443, 504
BLANK=, 376, 412
DELIM=, 377, 412
DIRECT=, 377
END=, 443
EOR=, 444
ERR=, 280, 298, 318, 337, 346, 377, 413,
458, 504
EXIST=, 377
FILE=, 378, 413
FMT=, 318, 442, 503
FORMATTED=, 378
FORM=, 378, 413
IOSTAT=, 280, 298, 319, 338, 346, 379, 413,
444, 458, 504, 663
NAMED=, 379
NAME=, 379
NEXTREC=, 379
NML=, 443, 504
NUMBER=, 379
OPENED=, 379
PAD=, 380, 414
POSITION=, 380, 414
READWRITE=, 381
READ=, 380
RECL=, 381, 414
REC=, 444, 505
SEQUENTIAL=, 381
SIZE=, 444
STATUS=, 298, 415
STAT=, 273, 316
UNFORMATTED=, 382
UNIT=, 280, 298, 318, 337, 346, 375, 411,
442, 458, 503
WRITE=, 382
IACHAR 組み込み関数 , 562
IADDR 組み込み関数 , 563
IAND 組み込み関数 , 563
IARGC
組み込み関数 , 564
索引
IARGC ルーチン , 654
IBCLR 組み込み関数 , 565
IBITS 組み込み関数 , 565
IBSET 組み込み関数 , 566
ICAMAX ルーチン , 660
ICHAR 組み込み関数 , 567
IDAMAX ルーチン , 660
IDATE
組み込みサブルーチン , 567
IDATEY2K, 655
IDATE ルーチン , 655
IDIM 組み込み関数 , 568
IDINT 組み込み関数 , 574
IDNINT 組み込み関数 , 606
IEOR 組み込み関数 , 568
IERRNO ルーチン , 655
IF THEN 文 , 369
IFIX 組み込み関数 , 573
IF 構文 , 140
ELSE IF 文 , 334
ELSE 文 , 333
END IF 文 , 342
IF 文 , 369
WHERE 構文 , 95
IF 文
ELSE IF 文 , 334
ELSE 文 , 333
IF 構文 , 140
算術 , 147, 368
ブロック , 140, 369
論理型 , 147, 370
IGETARG 組み込み関数 , 569
IGNORE 句
ON 文 , 407
IIAND 組み込み関数 , 564
IIBCLR 組み込み関数 , 565
IIBITS 組み込み関数 , 566
IIBSET 組み込み関数 , 567
IIDIM 組み込み関数 , 568
IIDNNT 組み込み関数 , 606
IIEOR 組み込み関数 , 569
IIFIX 組み込み関数 , 573
IINT 組み込み関数 , 573
IIOR 組み込み関数 , 576
IIQINT 組み込み関数 , 577
IIQNNT 組み込み関数 , 606
IISHFT 組み込み関数 , 579
IISIGN 組み込み関数 , 627
IIXOR 組み込み関数 , 582
701
索引
IJINT 組み込み関数 , 570
IMAG 組み込み関数 , 570
IMAX1 組み込み関数 , 595
IMAXO 組み込み関数 , 595
IMIN1 組み込み関数 , 600
IMINO 組み込み関数 , 600
IMOD 組み込み関数 , 603
+implicit_none オプション
IMPLICIT 文 , 107, 372
IMPLICIT 文 , 371
NONE 句 , 372
PARAMETER 文 , 424
型規則 , 107
文の順序 , 43
有効域 , 44
INCLUDE 行 , 50, 373
文の順序 , 43
文番号 , 42
INDEX 組み込み関数 , 571
ININT 組み込み関数 , 606
INOT 組み込み関数 , 607
INOUT 句
INTENT 文 , 388
アクセス制御 , 175
定義代入 , 184
INQUIRE 文 , 375
INT1 組み込み関数 , 573
INT2 組み込み関数 , 573
INT4 組み込み関数 , 574
INT8 組み込み関数 , 574
INTEGER 文 , 385
型宣言文 , 103
INTENT 文および属性 , 388
宣言式 , 88
定義代入 , 184
引き数 , 175
ベクトル添え字 , 65
利用者定義演算子 , 182
INTERFACE 文 , 391
END INTERFACE 文 , 344
MODULE PROCEDURE 文 , 401
引用仕様宣言構文 , 179
総称名を宣言する , 181
定義された演算子 , 182
定義代入 , 184
見本プログラム , 180
INTRINSIC 属性および文 , 510
INTRINSIC 文および属性 , 393
EXTERNAL 文 , 358
702
組み込み仮引き数 , 171
見本プログラム , 171
INT 組み込み関数 , 572
INUM 組み込み関数 , 575
IN 句
INTENT 文 , 388
アクセス制御 , 175
定義代入 , 184
IN 授受特性
利用者定義演算子 , 182
IOLENGTH 指定子
INQUIRE 文 , 375, 384
IOMSG 組み込みサブルーチン , 575
IOR 組み込み関数 , 575
IOSTAT 指定子
BACKSPACE 文 , 280
CLOSE 文 , 298
DECODE 文 , 319, 338
ENDFILE 文 , 346
INQUIRE 文 , 379
OPEN 文 , 413
READ 文 , 444
REWIND 文 , 458
WRITE 文 , 504
戻りコード , 663
IQINT 組み込み関数 , 576
IQNINT 組み込み関数 , 606
IRAND 組み込み関数 , 577
IRANP 組み込み関数 , 577
ISAMAX ルーチン , 660
ISATTY ルーチン , 655
ISHFTC 組み込み関数 , 579, 580
ISHFT 組み込み関数 , 578
ISIGN 組み込み関数 , 580
ISNAN 組み込み関数 , 580
italic ( イタリック ), 27
ITIME ルーチン , 655
IXOR 組み込み関数 , 581
IZAMAX ルーチン , 660
IZEXT 組み込み関数 , 582
-I オプション
INCLUDE 行 , 373
INCLUDE による相互作用 , 50
I 編集記述子 , 252
I/O 指定子 , 216
BLANK=, 244, 245, 260
索引
索引
J
JIAND 組み込み関数 , 564
JIBCLR 組み込み関数 , 565
JIBITS 組み込み関数 , 566
JIBSET 組み込み関数 , 567
JIDIM 組み込み関数 , 568
JIDNNT 組み込み関数 , 606
JIEOR 組み込み関数 , 569
JIFIX 組み込み関数 , 573
JINT 組み込み関数 , 573
JIOR 組み込み関数 , 576
JIQINT 組み込み関数 , 577
JIQNNT 組み込み関数 , 606
JISHFTC 組み込み関数 , 580
JISHFT 組み込み関数 , 579
JIXOR 組み込み関数 , 582
JMAX1 組み込み関数 , 595
JMAXO 組み込み関数 , 595
JMIN0 組み込み関数 , 600
JMIN1 組み込み関数 , 600
JMOD 組み込み関数 , 603
JNINT 組み込み関数 , 606
JNOT 組み込み関数 , 607
JNUM 組み込み関数 , 582
JSIGN 組み込み関数 , 627
JZEXT 組み込み関数 , 583
K
KCOUNT, 545
KCSHIFT, 546
KEOSHIFT, 555
KIAND 組み込み関数 , 564
KIBCLR 組み込み関数 , 565
KIBITS 組み込み関数 , 566
KIBSET 組み込み関数 , 567
KIDIM 組み込み関数 , 568
KIDNNT 組み込み関数 , 606
KIEOR 組み込み関数 , 569
KIFIX 組み込み関数 , 573
kill コマンド , 149
KILL ルーチン , 655
KINDEX, 572
KIND 組み込み関数 , 583
KINT 組み込み関数 , 573
KIOR 組み込み関数 , 576
KIQINT 組み込み関数 , 577
KIQNNT 組み込み関数 , 606
KISHFTC 組み込み関数 , 580
索引
KISHFT 組み込み関数 , 579
KLBOUND, 585
KLEN, 586
KLEN_TRIM, 587
KMAX1 組み込み関数 , 595
KMAXLOC, 597
KMAXO 組み込み関数 , 595
KMIN0 組み込み関数 , 600
KMIN1 組み込み関数 , 600
KMINLOC, 601
KMOD 組み込み関数 , 603
KNINT 組み込み関数 , 606
KNOT 組み込み関数 , 607
KPACK, 609
KREPEAT, 619
KRESHAPE, 620
KSHAPE, 626
KSIGN 組み込み関数 , 627
KSIZE, 630
KUBOUND, 641
KZEXT 組み込み関数 , 584
L
-lblas オプション
BLAS ルーチンにアクセスする , 646
LBOUND 組み込み関数 , 584
配列 , 76
LEN_TRIM 組み込み関数 , 586
LEN 組み込み関数 , 586
LGE 組み込み関数 , 587
LGT 組み込み関数 , 588
+libU77 オプション
+ppu オプション , 646
+uppercase オプション , 646
libU77 ルーチン , 645
2000 年 , 647
ACCESS, 650
ALARM, 651
CHDIR, 651
CHMOD, 651
CTIME, 651
DATEY2K, 651
DTIME, 651
ETIME, 651
FALLOC, 652
FDATE, 652
FGETC, 652
FLUSH, 652
703
索引
FORK, 652
FPUTC, 652
FREE, 653
FSEEK, 653
FSTAT, 653
FTELL, 653
GERROR, 653
GETARG, 653
GETC, 653
GETCWD, 654
GETENV, 654
GETGID, 654
GETLOG, 654
GETPID, 654
GETUID, 654
GMTIME, 654
HOSTNM, 654
IARGC, 654
IDATE, 655
IDATEY2K, 655
IERRNO, 655
ISATTY, 655
ITIME, 655
KILL, 655
LINK, 655
LOC, 428, 655
LSTAT, 656
LTIME, 656
MALLOC, 656
NUM_PROC, 656
NUM_THREADS, 656
PERROR, 656
PUTC, 656
QSORT, 657
RENAME, 657
SIGNAL, 657
SLEEP, 657
STAT, 657
SYMLNK, 657
SYSTEM, 657
TCLOSE, 657
TIME, 658
TOPEN, 658
TREAD, 658
TREWIN, 658
TSKIPF, 658
TSTATE, 658
TTYNAM, 647, 658
TWRITE, 659
704
+U77 オプション , 646
UNLINK, 659
WAIT, 659
Y2K, 647
アクセスする , 646
エラー処理ルーチン , 650
組み込み手続き名 , 648
情報検索ルーチン , 650
テープ入出力ルーチン , 650
名前の競合 , 648
入出力ルーチン , 650
引き数として渡す , 648
日付および時刻ルーチン , 650
ファイルシステム ルーチン , 650
プロセス制御ルーチン , 650
分類 , 650
マニュアルページ , 649
見本プログラム , 647
メモリー割り付けルーチン , 650
リスト , 650
LINK ルーチン , 655
LLE 組み込み関数 , 588
LLT 組み込み関数 , 589
LOC
libU77 ルーチン , 428
組み込み関数 , 590
LOC ルーチン , 655
LOG10 組み込み関数 , 591
LOGICAL 組み込み関数 , 591
LOGICAL 文 , 395
型宣言文 , 103
LOG 組み込み関数 , 590
LSHFT 組み込み関数 , 592
LSHIFT 組み込み関数 , 592
LSTAT ルーチン , 656
LTIME ルーチン , 656
L 編集記述子 , 254
M
MALLOC
組み込み関数 , 428, 593
MALLOC ルーチン , 656
MAP 文 , 398, 474
END 文 , 343
MATMUL 組み込み関数 , 593
MAX0 組み込み関数 , 595
MAX1 組み込み関数 , 595
MAXEXPONENT 組み込み関数 , 595
索引
索引
MAXLOC 組み込み関数 , 595
MAXVAL 組み込み関数 , 597
MAX 組み込み関数 , 594
MCLOCK 組み込み関数 , 598
MERGE 組み込み関数 , 598
MIN0 組み込み関数 , 600
MIN1 組み込み関数 , 600
MINEXPONENT 組み込み関数 , 600
MINLOC 組み込み関数 , 600
MINVAL 組み込み関数 , 602
MIN 組み込み関数 , 599
MODULE PROCEDURE 文 , 401
引用仕様宣言 , 179
個別手続きの並び , 181
MODULE 文 , 399
END 文 , 340
文の順序 , 43
モジュール構文 , 188
MODULO 組み込み関数 , 603
MOD 組み込み関数 , 603
monospace ( モノスペースフォント ), 27
MVBITS 組み込みサブルーチン , 604
要素別処理 , 511
N
NAMED 指定子 , 379
NAMELIST 文 , 403
ACCEPT 文 , 269
PRINT 文 , 433
READ 文 , 445
WRITE 文 , 504
クレイ形式ポインター , 427
NAME 指定子 , 379
NaN ( 非数値 ), 580
NEAREST 組み込み関数 , 605
NEQV 演算子 , 81
NEXTREC 指定子および INQUIRE 文 , 379
NINT 組み込み関数 , 606
NML 指定子
READ 文 , 443
WRITE 文 , 504
変数群入出力 , 210
NONE 句
IMPLICIT 文 , 371, 372
NOT 演算子 , 81
NOT 組み込み関数 , 606
NULLIFY 文 , 405
空状態のポインター , 126
索引
ポインターを解除する , 316
NUMBER 指定子
INQUIRE 文 , 379
NUM_PROC ルーチン , 656
NUM_THREADS ルーチン , 656
O
+onetrip オプション
DO ループ , 138
ONLY 句
USE 文 , 493
モジュールアクセス制御 , 191
ON 文 , 407
OPENED 指定子
INQUIRE 文 , 379
OPEN 文 , 411
INQUIRE 文 , 375
エラー , 665, 667, 668, 669, 670, 672, 674,
675
OPERATOR 句 , 435, 439
INTERFACE 文 , 391
USE 文 , 493
引用仕様宣言構文 , 179
定義された演算子 , 182
OPTIONAL 文および属性 , 418
省略可能な引き数 , 173
宣言式 , 88
明示的引用仕様 , 178
OR 演算子 , 81
OR 組み込み関数 , 607
OUT 句
INTENT 文 , 388
アクセス制御 , 175
定義代入 , 184
O 編集記述子 , 255
P
PACK 組み込み関数 , 608
PAD 指定子
INQUIRE 文 , 380
OPEN 文 , 414
エラー , 674
PARAMETER 文および属性 , 422
CHARACTER 文 , 296
IMPLICIT 文 , 371
クレイ形式ポインター , 427
初期値式 , 86
名前付き定数 , 108
705
索引
文の順序 , 43
有効域 , 44
PAUSE 文 , 425
実行制御 , 148
PERROR ルーチン , 656
POINTER 文および属性 , 430
ALLOCATE 文 , 274
DEALLOCATE 文 , 317
POINTER 文 , 481
形状引き継ぎ配列 , 56
形状無指定配列 , 58
構造型 , 118
配列ポインター , 58
ポインター仮引き数 , 170
ポインター代入 , 92
ポインターとしての演算対象 , 78
ポインターを宣言する , 125
POSITION 指定子
INQUIRE 文 , 380
OPEN 文 , 414
エラー , 674
+ppu オプション
libU77 ルーチン , 646
PRECISION 組み込み関数 , 609
PRESENT 組み込み関数 , 418, 610
式における~ , 88
省略可能な引き数 , 173
例 , 173
PRINT 文 , 433
書式仕様 , 434
書式付き入出力 , 434
並び入出力 , 208, 434
入出力項目並び , 219
変数群入出力 , 434
PRIVATE 文および属性 , 435
PUBLIC 文 , 439
TYPE 文 , 489
構造型定義 , 118
モジュールアクセス制御 , 191
モジュール構文 , 189
PRODUCT 組み込み関数 , 610
PROGRAM 文 , 438
END 文 , 340
主プログラム単位構文 , 155
文の順序 , 43
PUBLIC 文および属性 , 439
PRIVATE 文 , 436
TYPE 文 , 489
構造型定義 , 118
706
モジュールアクセス制御 , 191
モジュール構文 , 189
PUTC ルーチン , 656
P 編集記述子 , 257
Q
QABS 組み込み関数 , 522
QACOSD 組み込み関数 , 524
QACOS 組み込み関数 , 523
QASIND 組み込み関数 , 532
QASIN 組み込み関数 , 532
QATAN2D 組み込み関数 , 536
QATAN2 組み込み関数 , 535
QATAND 組み込み関数 , 537
QATANH 組み込み関数 , 537
QATAN 組み込み関数 , 534
QCOSD 組み込み関数 , 543
QCOSH 組み込み関数 , 544
QCOS 組み込み関数 , 543
QDIM 組み込み関数 , 551
QEXP 組み込み関数 , 557
QEXTD 組み込み関数 , 612
QEXT 組み込み関数 , 612
QFLOATI 組み込み関数 , 612
QFLOAT 組み込み関数 , 612
QFLOT1 組み込み関数 , 612
QFLOTJ 組み込み関数 , 612
QFLOTK 組み込み関数 , 612
QINT 組み込み関数 , 527
QLOG10 組み込み関数 , 591
QLOG 組み込み関数 , 591
QMAX1 組み込み関数 , 595
QMIN1 組み込み関数 , 600
QMOD 組み込み関数 , 603
QNINT 組み込み関数 , 530
QNUM 組み込み関数 , 613
QPROD 組み込み関数 , 613
QSIGN 組み込み関数 , 627
QSIND 組み込み関数 , 628
QSINH 組み込み関数 , 629
QSIN 組み込み関数 , 628
QSORT ルーチン , 657
QSQRT 組み込み関数 , 632
QTAND 組み込み関数 , 636
QTANH 組み込み関数 , 637
QTAN 組み込み関数 , 636
Q 編集記述子 , 246, 251, 258
索引
索引
R
RADIX 組み込み関数 , 613
RANDOM_NUMBER 組み込みサブルーチン
, 615
RANDOM_SEED 組み込みサブルーチン ,
616
RAND 組み込み関数 , 615
RANGE 組み込み関数 , 616
RAN 組み込み関数 , 614
READWRITE 指定子
INQUIRE 文 , 381
READ 指定子
INQUIRE 文 , 380
READ 文 , 319, 442
ACCEPT 文 , 269
書式付き入出力 , 445
書式なし入出力 , 446
停留入出力 , 213, 445
内部ファイル , 446
並び入出力 , 207, 446
入出力項目並び , 219
変数群入出力 , 446
REAL 組み込み関数 , 617
REAL 文 , 448
型宣言文 , 103
RECL 指定子
INQUIRE 文 , 381
OPEN 文 , 414
エラー , 670
RECORD 文 , 451
RECURSIVE 句
ENTRY 文 , 349
FUNCTION 文 , 362
SUBROUTINE 文 , 479
再帰的手続き , 161
手続き定義構文 , 158
REC 指定子
READ 文 , 444
WRITE 文 , 505
直接探査 , 212
%REF 組み込み関数 , 175
CALL 文 , 290
REF 組み込み関数 , 175
CALL 文 , 290
RENAME ルーチン , 657
REPEAT 組み込み関数 , 618
式における~ , 86, 88
RESHAPE 組み込み関数 , 619
索引
式における~ , 86, 88
配列構成子 , 70, 71
RESULT 句 , 348
ENTRY 文 , 349
FUNCTION 文 , 363
再帰的手続き , 161
手続き定義構文 , 158
RETURN 文 , 456
手続き定義構文 , 159
呼び出しから戻る , 161
REWIND 文 , 458
RNUM 組み込み関数 , 620
RRSPACING 組み込み関数 , 621
RSHFT 組み込み関数 , 621
RSHIFT 組み込み関数 , 621
R 編集記述子 , 241
エラー , 672
S
SASUM ルーチン , 660
+save オプション
AUTOMATIC 文 , 278
SAVE 文および属性 , 460
PARAMETER 文 , 422
STATIC 文 , 466
自動割り付け配列 , 55
自動割り付け変数 , 278
制限条項 , 461
モジュール構文 , 188, 189
割り付け配列 , 59
SAXPY ルーチン , 660
SCALE 組み込み関数 , 622
SCAN 組み込み関数 , 622
SCASUM ルーチン , 660
SCNRM2 ルーチン , 660
SCOPY ルーチン , 660
SDOT ルーチン , 660
SECNDS 組み込み関数 , 623
SELECT CASE 文 , 463
CASE 構文 , 134
SELECTED_INT_KIND 組み込み関数 , 624
式における~ , 86, 88
SELECTED_REAL_KIND 組み込み関数 ,
624
式における~ , 86, 88
SEQUENCE 文および属性 , 464
EQUIVALENCE 文 , 352
構造型定義 , 118
707
索引
列構造型 , 119
SEQUENTIAL 指定子
INQUIRE 文 , 381
SET_EXPONENT 組み込み関数 , 625
SGBMV ルーチン , 660
SGEMM ルーチン , 660
SGEMV ルーチン , 660
SGER ルーチン , 660
SHAPE 組み込みおよび関数
配列 , 76
SHAPE 組み込み関数 , 626
Shift-JIS エンコーディング , 38
SIGNAL ルーチン , 657
SIGN 組み込み関数 , 626
SIND 組み込み関数 , 628
SINH 組み込み関数 , 628
SIN 組み込み関数 , 627
SIZEOF 組み込み関数 , 630
SIZE 組み込み関数 , 629
配列 , 76
SIZE 指定子
READ 文 , 444
SLEEP ルーチン , 657
SNGLQ 組み込み関数 , 617
SNGL 組み込み関数 , 617
SNRM2 ルーチン , 660
+source オプション , 45
SPACING 組み込み関数 , 630
SPREAD 組み込み関数 , 631
SP 編集記述子 , 259
SQRT 組み込み関数 , 632
SRAND 組み込みサブルーチン , 632
SROTG ルーチン , 660
SROTMG ルーチン , 660
SROTM ルーチン , 660
SROT ルーチン , 660
SSBMV ルーチン , 661
SSCAL ルーチン , 661
SSPMVL ルーチン , 661
SSPR2 ルーチン , 661
SSPR ルーチン , 661
SSWAP ルーチン , 661
SSYMM ルーチン , 661
SSYMV ルーチン , 661
SSYR2K ルーチン , 661
SSYR2 ルーチン , 661
SSYRK ルーチン , 661
SSYR ルーチン , 661
SS 編集記述子 , 259
708
STATIC 文および属性 , 466
SAVE 文 , 460
STATUS 指定子
CLOSE 文 , 298
OPEN 文 , 415
エラー , 668, 669, 670
スクラッチファイル , 201
STAT 指定子
ALLOCATE 文 , 273
DEALLOCATE 文 , 316
STAT ルーチン , 657
STBMV ルーチン , 661
STBSV ルーチン , 661
STOP 文 , 468
実行制御 , 149
STPMV ルーチン , 661
STPSV ルーチン , 661
STRMM ルーチン , 661
STRMV ルーチン , 661
STRSM ルーチン , 662
STRSV ルーチン , 662
STRUCTURE 文 , 469
END 文 , 343
MAP 文 , 398
SUBROUTINE 文 , 479
END 文 , 340
OPTIONAL 文 , 418
RETURN 文 , 456
再帰的手続き , 161
手続き定義 , 158
文の順序 , 43
モジュール構文 , 189
SUM 組み込み関数 , 633
例 , 172
SYMLNK ルーチン , 657
SYSTEM_CLOCK 組み込みサブルーチン ,
634
SYSTEM 組み込みサブルーチン , 634
SYSTEM ルーチン , 657
S 編集記述子 , 259
T
TAND 組み込み関数 , 636
TANH 組み込み関数 , 636
TAN 組み込み関数 , 635
TARGET 文および属性 , 481
ポインター代入 , 92
TCLOSE ルーチン , 657
索引
索引
tempnam システムルーチン , 201
THEN 句
IF THEN 文 , 369
TIME
組み込みサブルーチン , 637
TIME ルーチン , 658
TINY 組み込み関数 , 637
TL 編集記述子 , 259
TOPEN ルーチン , 658
TO 句
ASSIGN 文 , 276
TRANSFER 組み込み関数 , 638
式における~ , 86, 88
TRANSPOSE 組み込み関数 , 639
TREAD ルーチン , 658
TREWIN ルーチン , 658
TRIM 組み込み関数 , 640
式における~ , 86, 88
TRUE の値 , 82, 114
TR 編集記述子 , 259
TSKIPF ルーチン , 658
TSTATE ルーチン , 658
TTYNAM ルーチン , 658
見本プログラム , 647
TWRITE ルーチン , 659
TYPE 文
END TYPE 文 , 345
構造型宣言 , 120
構造型定義 , 117
宣言 , 486
定義 , 489
入出力 , 491
T 編集記述子 , 259
U
+U77 オプション
libU77 ルーチンにアクセスする , 646
UBOUND 組み込み関数 , 640
配列 , 76
UNFORMATTED 指定子
INQUIRE 文 , 382
UNION 文 , 474, 492
END 文 , 343
MAP 文 , 398
UNIT 指定子
BACKSPACE 文 , 280
CLOSE 文 , 298
ENDFILE 文 , 346
索引
INQUIRE 文 , 375
OPEN 文 , 411
READ 文 , 442
REWIND 文 , 458
WRITE 文 , 503
エラー , 664, 667, 668
UNLINK ルーチン , 659
UNPACK 組み込み関数 , 641
+uppercase オプション
libU77 ルーチン , 646
USE 文 , 493
PRIVATE 文 , 436
PUBLIC 文 , 440
参照結合 , 154
初期値設定プログラム単位 , 196
文の順序 , 43
見本プログラム , 182, 185
名称変更機能 , 190, 689
モジュール , 188
モジュールアクセス制御 , 191
モジュール言語要素を参照する , 190
有効域 , 44
/usr/include, 373
V
%VAL 組み込み関数 , 175
CALL 文 , 290
VAL 組み込み関数 , 175
CALL 文 , 290
VERIFY 組み込み関数 , 642
VIRTUAL 文 , 496
VOLATILE 文および属性 , 497
W
WAIT ルーチン , 659
WHERE 構文 , 94
END WHERE 文 , 342
WHERE 文 , 499
WHERE 文 , 499
ELSEWHERE 文 , 336
配列選別代入 , 94
WHILE 句 , 325
WRITE 指定子
INQUIRE 文 , 382
WRITE 文 , 503
ENCODE 文 , 338
PRINT 文 , 433
書式なし入出力 , 506
709
索引
停留入出力 , 213, 504, 505
内部ファイル , 506
並び入出力 , 207, 506
入出力項目並び , 219
変数群入出力 , 504, 506
X
XERBLA ルーチン , 662
XOR 演算子 , 81
XOR 組み込み関数 , 643
X 編集記述子 , 259
Y
Y2K 問題 , 647
Z
ZABS 組み込み関数 , 522
ZAXPY ルーチン , 660
ZCOPY ルーチン , 660
ZCOS 組み込み関数 , 543
ZDOTC ルーチン , 660
ZDOTU ルーチン , 660
ZEXP 組み込み関数 , 557
ZEXT 組み込み関数 , 644
ZGBMV ルーチン , 660
ZGEMM ルーチン , 660
ZGEMV ルーチン , 660
ZGERC ルーチン , 660
ZGERU ルーチン , 660
ZHBMV ルーチン , 661
ZHEMM ルーチン , 661
ZHEMV ルーチン , 661
ZHER2K ルーチン , 661
ZHER2 ルーチン , 661
ZHERK ルーチン , 661
ZHER ルーチン , 661
ZHPMV ルーチン , 661
ZHPR2 ルーチン , 661
ZHPR ルーチン , 661
ZLOG 組み込み関数 , 591
ZROTG ルーチン , 660
ZROT ルーチン , 660
ZSCAL ルーチン , 661
ZSIN 組み込み関数 , 628
ZSQRT 組み込み関数 , 632
ZSWAP ルーチン , 661
ZSYMM ルーチン , 661
ZSYR2K ルーチン , 661
710
ZSYRK ルーチン , 661
ZTAN 組み込み関数 , 636
ZTBMV ルーチン , 661
ZTBSV ルーチン , 661
ZTPMV ルーチン , 661
ZTPSV ルーチン , 661
ZTRMM ルーチン , 661
ZTRMV ルーチン , 661
ZTRSM ルーチン , 662
ZTRSV ルーチン , 662
Z 編集記述子 , 259
あ
アーカイブライブラリ
用語集 , 677
空きスペースエラー , 667
アスタリスク (*) 文字
選択戻り , 161
注釈文字 , 48
変更可能な文字長 , 296
値、論理 , 82, 114
アンパサンド (&) 文字
継続文字 , 47
選択戻り , 160
暗黙的引用仕様 , 178
暗黙の型宣言 , 107
無効にする , 102
ライブラリルーチン , 647
い
一次代数ルーチン (BLAS), 645
位置、桁 , 47
入口点、代替 , 163, 348
入れ子になった~
DO ループ , 327
INCLUDE 行 , 373
親子結合 , 154
記録 , 451, 474
構造体 , 469, 472
初期化 DO 形反復 , 314
有効域 , 154
引用仕様
暗黙的 , 178
手続き , 178
明示的 , 178
引用仕様宣言 , 179, 401
MODULE PROCEDURE 文 , 401
構文 , 179
索引
索引
総称手続き , 181
引用仕様本体
有効域 , 44
引用する
関数 , 160
サブルーチン , 159
え
エラー
BLAS, 662
エラーコード
IOSTAT 指定子 , 663
STAT 指定子 , 273
実行時入出力 , 663
エラー処理
libU77 ルーチン , 650
演算子
引用仕様宣言 , 179
オーバーロードする , 182
関係 , 81
組み込み型 , 79
算術 , 79
定義された~ , 182
ビット単位 , 82
文字型 , 81
優先順位 , 83
用語集 , 677
連結 , 81
論理型 , 81
演算子をオーバーロードする , 182
演算対象 , 78
関数の引き数 , 85
全体配列 , 79
配列 , 72, 79
ポインター , 78
用語集 , 677
論理型 , 80
お
大きさゼロの配列 , 52, 64, 72
DATA 文 , 313
用語集 , 677
大きさ引き継ぎ配列 , 61
仮引き数 , 169
式 , 78
ポインター代入 , 93
用語集 , 678
補う
索引
空白 , 587, 588, 589, 590
オーバーフロー、整数型
ON 文 , 409
オブジェクト
解放する , 316
割り付ける , 273
オブジェクトを解放する , 316
オブジェクトを割り付ける , 274
親子
入れ子の有効域 , 154
親子結合 , 154
DATA 文 , 312, 313
内部手続き , 164
引き数 , 487
用語集 , 678
親プログラム
用語集 , 678
か
改行編集記述子 , 239
開始行 , 48
外部手続き , 153
引用する , 159
定義する , 158
有効域 , 44
用語集 , 678
外部ファイル , 201, 203
用語集 , 678
外部名
libU77 ルーチン , 646
初期化する , 87
用語集 , 678
科学表記による編集 , 248
角かっこ , 27
隠し長さパラメータ , 175
拡張
AUTOMATIC 文 , 278
拡張 UNIX コード , 38
拡張演算子
用語集 , 678
拡張機能
ACCEPT 文 , 269
AUTOMATIC 文 , 278
BUFFER IN 文 , 283
BUFFER OUT 文 , 285
BYTE 文 , 287
DECODE 文 , 318
DOUBLE COMPLEX 文 , 103, 329
711
索引
$EDIT および変数群入出力 , 211
ENCODE 文 , 337
END MAP, 343
END STRUCTURE, 343
END UNION, 343
END 構造体定義、文 , 343
I 編集記述子および他の型 , 252
MAP 文 , 398
ON 文 , 407
OPTIONS 文 , 421
POINTER 文 , 427
PRINT および変数群入出力 , 210
Q ( 実数 ) 編集記述子 , 246, 247
Q ( 残りバイト数 ) 編集記述子 , 258
RECORD 文 , 451
%REF, 175
R 編集記述子 , 241
STATIC 文および属性 , 466
STRUCTURE 文 , 469
TYPE ( 入出力 ) 文 , 491
UNION 文 , 492
%VAL, 175
VIRTUAL 文 , 496
VOLATILE 文 , 497
XOR 演算子 , 81
$ および変数群入出力 , 211
改行編集記述子 ($), 213, 239
拡張範囲 DO ループ , 326
型宣言文 , 103
型なし定数 , 110
共通ブロックでパディングする , 303
共通ブロックを初期化する , 197, 282, 302
共通ブロックを保存する , 301
行の長さ , 45, 48
組み込み手続き , 513, 518
クレイ形式 , 427
クレイ形式ポインター , 427
継続行 , 47, 48
構造型を EQUIVALENCE 結合する , 119
混合代入 , 91
算術演算子 , 80
指数演算子 , 80
実数編集記述子および整数 , 246
種別構文 , 304, 385, 395, 448
順番入出力文および直接探査 , 212
初期化の区切り記号 , 104
書式仕様としての整数型配列 , 262
制御を移行する , 134, 135, 369
整数型を初期化する , 314
712
選択戻り構文 , 160, 162
選択戻り引き数に対する接頭辞 , 160
注釈 , 48, 49
注釈文字 , 38, 49
定数 , 109
デバッグ行 , 49
トラップ機能 , 407
内部ファイルとしての数値配列 , 202
長さ指定 , 305, 386, 396, 449
名前 , 40
名前なし共通ブロックを初期化する , 197,
282, 302
名前の長さ , 40
入出力並び項目 , 241
配列構成子の区切り記号 , 71
ビット操作組み込み関数 , 82
ビット単位演算子 , 82
保存する、共通ブロック , 301
ホレリス定数 , 109
文字集合 , 38
文字データを EQUIVALENCE 結合する ,
353
隣接演算子 , 80
例外ハンドラー , 407
列構造型 , 119
論理式における整数演算対象 , 81
論理値 , 114
拡張された演算子 , 182
拡張子、ファイル名 , 45
拡張範囲 DO ループ , 326
下線文字 (_)
+libU77 によって追加 , 646
型規則
IMPLICIT 文 , 372
暗黙的 , 107
型宣言 , 103
型なし定数 , 110
混合式 , 80, 81
整数式における論理型 , 80
無効にする , 103, 372
型宣言規則
ライブラリルーチン , 647
型宣言文 , 265
BYTE, 103, 287
CHARACTER, 295
COMPLEX, 103, 304
DOUBLE COMPLEX, 103, 329
DOUBLE PRECISION, 103, 331
INTEGER, 103, 385
索引
索引
LOGICAL, 103, 395
REAL, 103, 448
RECORD, 451
TYPE ( 定義 ), 489
暗黙の型宣言 , 107
組み込み型 , 102
構造型 , 120
構文 , 102
初期化 , 104
初期値式 , 87
配列仕様 , 104
用語集 , 678
例 , 105
型なし定数 , 110
用語集 , 679
型変換
EQUIVALENCE 文 , 353
式における~ , 80, 81
代入文 , 90
型、データ
組み込み型 , 100
構造型 , 117
用語集 , 685
かっこ
演算子の優先順位 , 83
仮引き数 , 168
CALL 文 , 289
COMMON 文 , 301
DATA 文 , 312
ENTRY 文 , 348, 349
EQUIVALENCE 文 , 352
EXTERNAL 属性 , 357
FUNCTION 文 , 362
INTENT 文 , 175, 388
OPTIONAL 文 , 418, 419
RETURN 文 , 456
SEQUENCE 文 , 464
SUBROUTINE 文 , 479
TYPE 文 , 486
クレイ形式ポインター , 427
形状引き継ぎ配列 , 56
形状明示配列 , 55
実引き数との一致 , 168
初期化 , 87
スカラ , 169
宣言式 , 88
選択戻り引き数 , 161
総称手続きにおける~ , 181
手続き , 170, 357
索引
手続き定義構文 , 158
二重結合 , 174
配列 , 55, 61, 169, 679
文関数における~ , 166
ポインター , 170
用語集 , 679
関係演算子 , 81
関数 , 158
引用する , 160
組み込み , 175, 290
組み込み型 , 510
結果 , 87, 456, 679
再帰的 , 161
式における制限条項 , 85
総称および個別組み込み関数 , 510
定義された演算 , 182
定義する , 158
問い合わせ組み込み関数 , 511
配列値を持つ~ , 74
変形組み込み関数 , 511
明示的引用仕様 , 178
用語集 , 679
論理式における~ , 81
~から返す , 161, 456
感嘆符 (!) 文字
注釈文字 , 47, 48
き
記憶列
用語集 , 679
列構造型 , 464
記憶列結合 , 154
COMMON 文 , 300
EQUIVALENCE 文 , 352
構造型 , 464
モジュール , 350
用語集 , 679
規格外組み込み関数 , 513
刻み幅 , 64
用語集 , 679
規則、暗黙の型宣言 , 107
行
継続 , 47, 48
固定形式 , 45, 48
タブ形式 , 49
注釈 , 47, 48
デバッグ , 49
行順 , 680
713
索引
共通ブロック
BLOCK DATA 文 , 282
COMMON 文 , 300
EQUIVALENCE 結合する , 352, 355
SAVE 文 , 461
VOLATILE 文 , 497
仮引き数 , 301
記録の拡張機能 , 453
空白 , 197, 282, 301, 302
クレイ形式ポインター , 301
結果変数 , 349
構造型 , 119
初期化する , 282
初期値設定プログラム単位 , 196
名前なし , 197, 282, 302
ポインター , 427
保存した変数 , 460, 461
無名 , 689
有効範囲 , 153
用語集 , 679
列構造型 , 464
行の長さ
固定形式 , 48
自由形式 , 45
共有ライブラリ
用語集 , 679
共用体 , 474, 492
行列演算 , 645
切り捨て定数 , 110
記録 ( 拡張機能 )
RECORD 文 , 451
STRUCTURE 文 , 469
入れ子の~ , 451, 474
引用する , 451
合成参照 , 451
構造体 ( 拡張機能 ), 451
単純参照 , 451
入出力の制限条項 , 220
記録 ( 入出力 ), 200
アクセスエラー , 666, 672
サイズエラー , 667, 671, 672
書式付き , 200
書式なし , 200
長さを判別する , 383
番号エラー , 670
ファイル終了エラー , 669
ファイル終了記録 , 200
用語集 , 680
キロバイト、定義 , 680
714
キーワード
ON 文 , 408
空白 , 46
キーワードオプション , 172
組み込み手続きの~ , 521
省略可能な引き数 , 419
手続き引用構文 , 160
明示的引用仕様 , 178
用語集 , 680
く
句
ABORT, 407
ASSIGNMENT, 435, 439, 493
CALL, 407
DEFAULT, 292
IGNORE, 407
IN, 388
INOUT, 388
NONE, 371
ONLY, 493
OPERATOR, 435, 439, 493
OUT, 388
RECURSIVE, 349, 362, 479
RESULT, 348, 349, 363
THEN, 369
TO, 276
WHILE, 325
空状態のポインター
ASSOCIATED 組み込み関数 , 127
DEALLOCATE 文 , 316
NULLIFY 文 , 405
用語集 , 680
空白 , 38
補う , 81, 587, 588, 589, 590
固定形式 , 48
自由形式 , 46
注釈行 , 48
空白共通ブロック
COMMON 文 , 301
空白で共通な
BLOCK DATA 文 , 282
COMMON 文 , 302
初期値設定プログラム単位 , 197
空白編集記述子 , 245
組み込み
用語集 , 680
組み込み型
索引
索引
演算子 , 79
関数 , 509
代入 , 90
データ型 , 100
手続き , 509
名前を初期化する , 87
組み込み関数 , 175
CALL 文による参照 , 290
引き数渡し規約 , 175
用語集 , 680
組み込み手続き , 509
ABORT, 521
ABS, 521
ACHAR, 522
ACOS, 523
ACOSD, 523
ACOSH, 524
ADJUSTL, 525
ADJUSTR, 525
AIMAG, 526
AIMAXO, 595
AIMINO, 600
AINT, 526
AJMAXO, 595
AJMINO, 600
AKMAXO, 595
AKMINO, 600
ALL, 527
ALLOCATED, 59, 528
ALOG, 591
ALOG10, 591
AMAX1, 595
AMAXO, 595
AMIN1, 600
AMINO, 600
AMOD, 603
AND, 528
ANINT, 529
ANY, 530
ASIN, 531
ASIND, 532
ASINH, 532
ASSOCIATED, 533
ATAN, 534
ATAN2, 535
ATAN2D, 535
ATAND, 536
ATANH, 537
BABS, 522
索引
BADDRESS, 537
BBCLR, 565
BBITS, 566
BBTEST, 539
BDIM, 551
BIAND, 564
BIEOR, 569
BIOR, 576
BITEST, 539
BIT_SIZE, 538
BIXOR, 582
BJTEST, 539
BKTEST, 539
BMOD, 603
BMVBITS, 605
BNOT, 607
BOZ 定数 , 110
BSHFT, 579
BSIGN, 627
BTEST, 538
CABS, 522
CCOS, 543
CDABS, 522
CDCOS, 543
CDEXP, 557
CDLOG, 591
CDSIN, 628
CDSQRT, 632
CEILING, 539
CEXP, 557
CHAR, 540
CLOG, 591
CMPLX, 541
CONJG, 541
COS, 542
COSD, 543
COSH, 543
COUNT, 544
CSHIFT, 545
CSIN, 628
CSQRT, 632
CTAN, 636
DABS, 522
DACOSD, 524
DACOSH, 524
DASIN, 532
DASIND, 532
DASINH, 533
DATAN, 534
715
索引
DATAN2, 535
DATAN2D, 536
DATAND, 537
DATANH, 537
DATE, 546
DATE_AND_TIME, 546
DBLE, 548
DBLEQ, 549
DCMPLX, 549
DCONJG, 542
DCOS, 523, 543
DCOSD, 543
DCOSH, 544
DDIM, 551
DDINT, 527
DEXP, 557
DFLOAT, 549
DFLOTI, 550
DFLOTJ, 550
DFLOTK, 550
DIGITS, 550
DIM, 550
DINT, 527
DLOG, 591
DLOG10, 591
DMAX1, 595
DMIN1, 600
DMOD, 603
DNINT, 530
DNUM, 551
DOT_PRODUCT, 551
DPROD, 552
DREAL, 553
DSIGN, 627
DSIN, 628
DSQRT, 632
DTAN, 636
DTAND, 636
DTANH, 637
EOSHIFT, 553
EPSILON, 555
EXIT, 556
EXP, 556
EXPONENT, 557
EXTERNAL 文 , 358, 510
FLOAT, 618
FLOATI, 618
FLOATJ, 618
FLOATK, 618
716
FLOOR, 557
FLUSH, 558
FNUM, 558
FRACTION, 558
FREE, 559
FSET, 559
FSTREAM, 559
GETARG, 560
GETENV, 560
GRAN, 560
HABS, 522
HBCLR, 565
HBITS, 566
HBSET, 567
HDIM, 551
HFIX, 561
HIAND, 564
HIEOR, 569
HIOR, 576
HIXOR, 582
HMOD, 603
HMVBITS, 605
HNOT, 607
HSHFT, 579
HSHFTC, 580
HSIGN, 627
HTEST, 539
HUGE, 561
IACHAR, 562
IADDR, 563
IAND, 563
IARGC, 564
IBCLR, 565
IBITS, 565
IBSET, 566
ICHAR, 567
IDATE, 567
IDIM, 568
IDINT, 574
IDNINT, 606
IEOR, 568
IFIX, 573
IGETARG, 569
IIAND, 564
IIBCLR, 565
IIBITS, 566
IIBSET, 567
IIDIM, 568
IIDNNT, 606
索引
索引
IIEOR, 569
IIFIX, 573
IINT, 573
IIOR, 576
IIQINT, 577
IIQNNT, 606
IISHFT, 579
IISIGN, 627
IIXOR, 582
IJINT, 570
IMAG, 570
IMAX1, 595
IMAXO, 595
IMIN1, 600
IMINO, 600
IMOD, 603
INDEX, 571
ININT, 606
INOT, 607
INT, 572
INT1, 573
INT2, 573
INT4, 574
INT8, 574
INTRINSIC 文 , 510
INUM, 575
IOMSG, 575
IOR, 575
IQINT, 576
IQNINT, 606
IRAND, 577
IRANP, 577
ISHFT, 578
ISHFTC, 579, 580
ISIGN, 580
ISNAN, 580
IXOR, 581
IZEXT, 582
JIAND, 564
JIBCLR, 565
JIBITS, 566
JIBSET, 567
JIDIM, 568
JIDNNT, 606
JIEOR, 569
JIFIX, 573
JINT, 573
JIOR, 576
JIQINT, 577
索引
JIQNNT, 606
JISHFT, 579
JISHFTC, 580
JIXOR, 582
JMAX1, 595
JMAXO, 595
JMIN0, 600
JMIN1, 600
JMOD, 603
JNINT, 606
JNOT, 607
JNUM, 582
JSIGN, 627
JZEXT, 583
KCOUNT, 545
KCSHIFT, 546
KEOSHIFT, 555
KIAND, 564
KIBCLR, 565
KIBITS, 566
KIBSET, 567
KIDIM, 568
KIDNNT, 606
KIEOR, 569
KIFIX, 573
KIND, 583
KINDEX, 572
KINT, 573
KIOR, 576
KIQINT, 577
KIQNNT, 606
KISHFT, 579
KISHFTC, 580
KLBOUND, 585
KLEN, 586
KLEN_TRIM, 587
KMAX1, 595
KMAXLOC, 597
KMAXO, 595
KMIN0, 600
KMIN1, 600
KMINLOC, 601
KMOD, 603
KNINT, 606
KNOT, 607
KPACK, 609
KREPEAT, 619
KRESHAPE, 620
KSHAPE, 626
717
索引
KSIGN, 627
KSIZE, 630
KUBOUND, 641
KZEXT, 584
LBOUND, 584
LEN, 586
LEN_TRIM, 586
LGE, 587
LGT, 588
libU77 名 , 648
LLE, 588
LLT, 589
LOC, 590
LOG, 590
LOG10, 591
LOGICAL, 591
LSHFT, 592
LSHIFT, 592
MALLOC, 593
MATMUL, 593
MAX, 594
MAX0, 595
MAX1, 595
MAXEXPONENT, 595
MAXLOC, 595
MAXVAL, 597
MCLOCK, 598
MERGE, 598
MIN, 599
MIN0, 600
MIN1, 600
MINEXPONENT, 600
MINLOC, 600
MINVAL, 602
MOD, 603
MODULO, 603
MVBITS, 604
NEAREST, 605
NINT, 606
NOT, 606
OR, 607
PACK, 608
PARAMETER 文 , 423
PRECISION, 609
PRESENT, 418, 610
PRODUCT, 610
QABS, 522
QACOS, 523
QACOSD, 524
718
QASIN, 532
QASIND, 532
QATAN, 534
QATAN2, 535
QATAN2D, 536
QATAND, 537
QATANH, 537
QCOS, 543
QCOSD, 543
QCOSH, 544
QDIM, 551
QEXP, 557
QEXT, 612
QEXTD, 612
QFLOAT, 612
QFLOATI, 612
QFLOT1, 612
QFLOTJ, 612
QFLOTK, 612
QINT, 527
QLOG, 591
QLOG10, 591
QMAX1, 595
QMIN1, 600
QMOD, 603
QNINT, 530
QNUM, 613
QPROD, 613
QSIGN, 627
QSIN, 628
QSIND, 628
QSINH, 629
QSQRT, 632
QTAN, 636
QTAND, 636
QTANH, 637
RADIX, 613
RAN, 614
RAND, 615
RANDOM_NUMBER, 615
RANDOM_SEED, 616
RANGE, 616
REAL, 617
REPEAT, 618
RESHAPE, 619
RNUM, 620
RRSPACING, 621
RSHFT, 621
RSHIFT, 621
索引
索引
SCALE, 622
SCAN, 622
SECNDS, 623
SELECTED_INT_KIND, 624
SELECTED_REAL_KIND, 624
SET_EXPONENT, 625
SHAPE, 626
SIGN, 626
SIN, 627
SIND, 628
SINH, 628
SIZE, 629
SIZEOF, 630
SNGL, 617
SNGLQ, 617
SPACING, 630
SPREAD, 631
SQRT, 632
SRAND, 632
SUM, 633
SYSTEM, 634
SYSTEM_CLOCK, 634
TAN, 635
TAND, 636
TANH, 636
TIME, 637
TINY, 637
TRANSFER, 638
TRANSPOSE, 639
TRIM, 640
UBOUND, 640
UNPACK, 641
VERIFY, 642
XOR, 643
ZABS, 522
ZCOS, 543
ZEXP, 557
ZEXT, 644
ZLOG, 591
ZSIN, 628
ZSQRT, 632
ZTAN, 636
可用性 , 510
規格外 , 513, 518
キーワード , 521
個別および総称 , 510
最適化バージョン , 512
時刻および日付組み込み関数 , 518
初期値式としての引き数 , 86
索引
数学組み込み関数 , 518
数値組み込み関数 , 518
宣言式 , 88
総称および個別 , 510
データ表現 , 514
問い合わせ関数 , 511
名前の競合 , 178, 510, 648
名前の競合を解決する , 510
配列値を持つ~ , 74
配列手続き , 518
配列問い合わせ , 76
引き数として渡す , 171
日付および時刻組み込み関数 , 518
ビット単位組み込み関数 , 518
浮動小数点組み込み関数 , 518
分類 , 518
変形関数 , 511
ポインター組み込み関数 , 518
ミリコードバージョン , 512
文字組み込み関数 , 518
要素別処理 , 511
~の非可用性 , 510
組み込み手続きの可用性 , 510
クレイ形式ポインター , 427
共通ブロック , 301
構文 , 427
制限条項 , 427
け
計算形 GO TO 文 , 145, 366
形状 , 322
用語集 , 680
形状適合配列 , 52
DIMENSION 文 , 322
WHERE 構文 , 94
用語集 , 680
形状引き継ぎ配列 , 56
仮引き数 , 169
明示的引用仕様 , 178
用語集 , 680
形状無指定配列 , 58
用語集 , 681
形状明示配列 , 54
仮引き数 , 169
用語集 , 681
継続行
固定形式 , 48
自由形式 , 47
719
索引
桁移動数編集記述子 , 257
結果変数
ENTRY 文 , 349
FUNCTION 文 , 363
制限条項 , 349
結合 , 153
親子 , 154, 487
親プログラム , 678
記憶列 , 154, 300, 352, 464, 679
参照 , 154, 188, 401, 436, 440, 487, 493, 682
順序 , 154, 169, 683
状態 , 316
二重 , 174
引き数 , 153, 168, 289, 687
ポインター , 92, 154, 316, 689
用語集 , 681
結合状態 ( ポインター ), 126
言語要素 , 37
言語要素への参照を制限する , 436, 440
検索パス
取り込みファイル , 373
こ
工学表記による編集 , 248
合成記録参照 , 451
構成子
構造 , 120
配列 , 65, 70
構造型 , 117
EQUIVALENCE 結合する , 119
EQUIVALENCE 文 , 352
PRIVATE 文 , 118, 436, 489
PUBLIC 文 , 118, 440, 489
SEQUENCE 文 , 118, 119, 464
TYPE 文 , 486, 489
同じ型の成分 , 120
基本演算 , 117
共通ブロック , 119
構造体構成子 , 120
構造体成分 , 119
宣言 , 486
定義する , 117, 489
名前を付ける , 489
配列値を持つ成分の引用 , 67
編集記述子 , 238
見本プログラム , 122
用語集 , 681
列構造型 , 119, 464, 691
720
構造型の成分
用語集 , 684
構造体
成分 , 119
配列値を持つ成分の引用 , 67
構造体 ( 拡張機能 )
MAP 文 , 474
RECORD 文 , 451
STRUCTURE 文 , 469
UNION 文 , 474
入れ子の~ , 469, 472
記録 ( 拡張機能 ), 469
構造型 , 469
入出力制限条項 , 220
構造体構成子 , 120
型なし定数 , 110
式における~ , 87, 88
後続の注釈 , 47, 48
構文
16 進編集記述子 , 259
2 進編集記述子 , 243
8 進編集記述子 , 255
asa コマンド , 225
BOZ 定数 , 108
CASE, 134, 463
CASE 構文 , 134
DO, 136
END DO, 342
END IF, 342
END SELECT, 342
END WHERE, 342
IF, 140, 369
IF ループ , 140
WHERE, 94, 499
WHERE 構文 , 94
引用仕様宣言 , 179
大きさ引き継ぎ配列 , 61
型宣言文 , 102
関数 , 158, 160
空白編集記述子 , 245
形状引き継ぎ配列 , 56
形状無指定配列 , 58
形状明示配列 , 54
構造型宣言 , 117, 120
構造体構成子 , 120
構造体成分の引用 , 119
サブルーチン , 158, 159
式 , 78
実行制御 , 134
索引
索引
実数編集記述子 , 246
実定数 , 111
条件付き DO ループ , 138
初期値設定プログラム単位 , 196
書式仕様 , 235
制御カウンター DO ループ , 137
整数編集記述子 , 252
整定数 , 108
添え字三つ組 , 63
属性 , 265
タブ編集記述子 , 259
手続き , 158, 159
名前 , 40
入出力 DO 形反復 , 220
入出力 DO 形反復、入れ子 , 221
入出力項目並び , 218
入出力文 , 216
配列構成 DO 形反復 , 70
配列構成子 , 70
複素定数 , 112
部分配列 , 63
文 , 265
ベクトル添え字 , 63
編集記述子 , 233
ホレリス定数 , 109
ホレリス編集記述子 , 251
無限 DO ループ , 139
文字定数 , 112
文字部分列 , 114
文字編集記述子 , 241
モジュールプログラム単位 , 188
用語集 , 681
論理定数 , 114
論理編集記述子 , 254
構文素 , 39
構文、コマンド , 28
項目並び、入出力 , 218
互換性、属性 , 266
固定形式 , 47
選択戻り構文 , 160, 162
選択戻り文字 , 160
固定形式の桁位置 , 47
個別組み込み関数 , 510
個別手続き , 181
用語集 , 681
コマンド構文 , 28
コロン編集記述子 , 240
混合式
関係演算 , 81
索引
算術演算 , 80
ビット単位演算 , 82
論理演算 , 81
混合式の結果 , 80, 81, 82
コンパイラ指令
文の順序 , 43
用語集 , 681
コンパイル行オプション
+onetrip, 138
用語集 , 681
さ
再帰的手続き , 161, 362, 479
最適化
実行速度を測定する , 598
パフォーマンスを測定する , 598
サブルーチン , 158
SUBROUTINE 文 , 479
引用する , 159
組み込み型 , 510
再帰的 , 161
選択戻り , 479
定義する , 158
定義代入 , 184
用語集 , 681
呼び出す , 159
算術
演算子 , 79
演算対象 , 80
式 , 79
算術 IF 文 , 368
実行制御 , 147
参照結合 , 154
COMMON 文 , 301
DATA 文 , 312, 313
EQUIVALENCE 文 , 352
PRIVATE 文 , 436
PUBLIC, 440
USE 文 , 493
言語要素を参照する , 189
構造型定義を参照する , 122
引き数 , 487
モジュール , 188
モジュール手続き , 401
用語集 , 682
参照を許可する , 440
721
索引
し
式 , 77
演算子 , 79
演算対象 , 78
演算対象を修正する引き数 , 85
大きさ引き継ぎ配列 , 78
構文 , 78
混合 , 80, 81
再順序付け , 85
種類 , 85
初期化 , 86, 89, 683
スカラ , 79
宣言 , 88, 89, 684
代入における評価 , 91
定数 , 85
配列 , 72, 79
評価の順序 , 85
ポインター , 78
用語集 , 682
例 , 89
論理型 , 81
式の評価 , 85
次元 , 52
用語集 , 682
次元数 , 322
1 次元配列 , 63, 65, 70, 76
用語集 , 682
時刻および日付
libU77 ルーチン , 650
組み込み手続き , 518
指示先 , 125
NULLIFY 文 , 405
規則 , 482
代入文 , 90
ポインター結合 , 154
ポインター代入 , 92
用語集 , 682
システムルーチン
tempnam, 201
事前接続された装置番号
用語集 , 682
事前に接続済みの装置番号 , 204
実行可能
プログラム単位 , 152
文 , 155, 682
実行時間を計算する , 623
実行時間、測定する , 598
実行時入出力エラー , 663
722
実行制御 , 133
ASSIGN 文 , 276
CALL 文 , 289
CASE 構文 , 134
CONTINUE 文 , 142, 309
CYCLE 文 , 143, 310
DO 構文 , 136
DO 文 , 325
ENTRY 文 , 348
EXIT 文 , 144, 356
FUNCTION 文 , 362
GO TO ( 計算形 ) 文 , 145, 366
GO TO ( 単純 ) 文 , 146, 367
GO TO ( 割り当て形 ) 文 , 144, 365
IF THEN 文 , 369
IF 構文 , 140
IF ( 算術 ) 文 , 147, 368
IF ( 論理 ) 文 , 147, 370
PAUSE 文 , 148, 425
RETURN 文 , 456
SELECT CASE 文 , 463
STOP 文 , 149, 468
SUBROUTINE 文 , 479
実行速度を測定する , 598
実行の流れ , 133
実数型 , 100
DOUBLE PRECISION 文 , 331
REAL 文 , 448
型宣言 , 102, 448
式 , 79
宣言する , 103
定数 , 111
データの割り付け境界 , 100
データ表現 , 100
並び入出力 , 208
べき算 , 80
編集記述子 , 246
~の表現 , 516
実引き数 , 168
INTENT 文 , 388
仮引き数との一致 , 168
キーワードオプション , 172
形状引き継ぎ配列 , 56
選択戻り引き数 , 161
手続き引用構文 , 159
モジュール手続き , 189
用語集 , 682
指定子、I/O, 201
自動的に開かれる装置番号 , 205
索引
索引
自動割り付けオブジェクト
用語集 , 682
自動割り付けデータオブジェクト
AUTOMATIC 文 , 278
DATA 文 , 312
自動割り付け配列 , 55
初期化する , 87
文字列 , 115
自動割り付け配列 , 55
用語集 , 683
自動割り付け変数 , 278
自由形式 , 45
終了状態を保持する , 556
終了する
DO ループ , 309, 326
並び入力 , 207
プログラム実行 , 149
授受特性
INTENT 文 , 388
用語集 , 683
出力データ
並び入出力 , 208
変数群入出力 , 211
主プログラム
有効域 , 44
主プログラム単位 , 155
構文 , 155
用語集 , 683
種別型パラメータ
用語集 , 683
種別パラメータ , 100
構文 , 103
初期値式 , 87
順序結合 , 154, 169
配列 , 169
用語集 , 683
順序付け、文 , 43
順対応引き数 , 168
順番探査 , 206
エラー , 666
書式付き入出力 , 206
並び入出力 , 207
変数群入出力 , 210
例 , 230
上下限
配列 , 52, 54, 322
用語集 , 683
状態
結合 , 316
索引
ポインター結合 , 126
割り付け , 59
情報検索 libU77 ルーチン , 650
省略可能な引き数 , 172, 173, 521
キーワードオプション , 419
制限条項 , 419
明示的引用仕様 , 419
用語集 , 683
省略記号、垂直 , 28
初期化
BLOCK DATA 文 , 282
COMMON 文 , 302
DATA 文 , 312, 313
EQUIVALENCE 文 , 354
PARAMETER 文 , 422
拡張機能 , 104
型宣言 , 104
式 , 86, 683
初期値設定プログラム単位 , 196
制限条項 , 87
配列 , 70
例 , 87
初期化 DO 形反復
入れ子の~ , 314
初期値設定副プログラム単位
用語集 , 683
初期値設定プログラム単位 , 44, 196, 357
除算、整数 , 80
書式規則
並び入出力 , 207
変数群入出力 , 211
書式仕様
DECODE 文 , 318
ENCODE 文 , 337
FORMAT 文 , 360
PRINT 文 , 434
READ 文 , 442
WRITE 文 , 503
入れ子の~ , 263
エラー , 664
概要 , 233
構文 , 235
入出力並びとの相互作用 , 264
文字型配列 , 262
文字式の~ , 262
書式仕様を反復する , 264
書式付きデータ , 233
16 進 , 259
2 進 , 243
723
索引
8 進データ , 255
FORMAT 文 , 234
改行 , 239
科学表記 , 248
記録終了 , 240
空白 , 245
桁移動数 , 257
工学表記 , 248
実数型 , 246
書式反復数 , 264
整数型 , 252, 254
正符号 , 259
タブ , 259
残りバイト数 , 258
非互換性エラー , 671
ホレリス , 251
文字 , 241
書式付き ( 入出力 )
記録 , 200
書式付き入出力
PRINT 文 , 434
READ 文 , 445
WRITE 文 , 505
エラー , 664, 671
順次ファイル , 206
書式仕様 , 234
直接探査ファイル , 212
書式なし記録 , 200
書式なし入出力 , 212
READ 文 , 446
WRITE 文 , 506
エラー , 664, 669, 671, 674
順次ファイル , 206
直接探査ファイル , 212
真偽表 , 82
診断入出力メッセージ , 663
す
垂直省略記号 , 28
水平省略記号 , 28
数学組み込み手続き , 518
数値型 , 100
BYTE 文 , 287
COMPLEX 文 , 304
DOUBLE COMPLEX 文 , 329
DOUBLE PRECISION 文 , 331
INTEGER 文 , 385
REAL 文 , 448
724
組み込み関数 , 518
入出力エラー , 671
編集記述子 , 246, 252
用語集 , 684
スカラ
仮引き数 , 169
配列式 , 72
配列代入 , 91
文関数の引き数 , 166
用語集 , 684
要素別処理組み込み関数 , 511
スクラッチファイル , 201
エラー , 668
閉じる , 298
開く , 415
スペース
固定形式 , 48
自由形式 , 46
スラッシュ編集記述子 , 240
スラッシュ (/) 文字
データ値を区切る , 104
並び入出力 , 207
寸法 , 52
DIMENSION 文 , 322
用語集 , 684
せ
制御構文 , 133, 136
CASE, 134
DO, 136
IF, 140
入れ子の~ , 134
制御文字 , 38
制御を移行する
手続き間 , 152
プログラム中で~ , 134
制限
入れ子の INCLUDE 行 , 50, 373
行の長さ , 45, 47, 48
継続行 , 47, 48
次元数 , 322
書式付き記録の長さ , 200
名前 , 40
配列の次元 , 322
文の長さ , 47
制限する、言語要素への参照を~ , 436, 440
整合配列 , 55
用語集 , 684
索引
索引
整数型 , 100
BYTE 文 , 287
INTEGER 文 , 385
オーバーフローをトラップする , 409
型宣言 , 102, 385
組み込み関数への引き数 , 82
式 , 79
除算 , 80
宣言する , 103
定数 , 108
データの割り付け境界 , 100
データ表現 , 100
並び入出力 , 208
ビット単位式 , 82
べき算 , 80
編集記述子 , 252
~の表現 , 516
静的記憶領域
SAVE 文 , 460
STATIC 文 , 466
正符号編集記述子 , 259
成分 , 119
配列値を持つ成分の引用 , 67
セミコロン文字
文の区切り記号 , 45, 47
宣言
式 , 88, 684
文 , 155, 196
全体配列 , 52
式 , 79
用語集 , 684
選択戻り , 161
RETURN 文 , 456
RETURN 文における~ , 161
SUBROUTINE 文 , 479
関数引用 , 160
手続き引用構文 , 160
そ
総称組み込み関数 , 510
総称手続き , 181
明示的引用仕様 , 178
用語集 , 684
装置番号 , 203
エラー , 664, 667, 668
外部ファイル , 203
事前に接続済み , 204
自動的に開く , 205
索引
内部ファイル , 204
用語集 , 684
添え字 , 52
エラー , 673
初期値式 , 87
ベクトル , 65
三つ組 , 64, 685
用語集 , 685
属性 , 104, 265
ALLOCATABLE, 271
DIMENSION, 321
EXTERNAL, 357
INTENT, 388
INTRINSIC, 393
OPTIONAL, 418
PARAMETER, 422
POINTER, 430
PRIVATE, 435
PUBLIC, 439
SAVE, 460
STATIC, 466
TARGET, 481
VOLATILE, 497
互換性 , 266
用語集 , 685
ソース行を拡張する , 45, 48
ソースにテキストを挿入する
INCLUDE 行 , 50
た
大域有効範囲 , 153
用語集 , 685
大小順序、ASCII, 588
ACHAR 組み込み関数 , 522
IACHAR 組み込み関数 , 562
LGE 組み込み関数 , 587
LGT 組み込み関数 , 588
LLT 組み込み関数 , 589
代数サブルーチン (BLAS), 645
代替入口点 , 163
ENTRY 文 , 348
代入 , 77, 90
WHERE 構文 , 94
型変換 , 90
組み込み型 , 90
混合式 , 91
代入文 , 90
定義された~ , 184
725
索引
配列選別 , 94
部分配列 , 91
ポインター , 90
ポインター代入 , 92, 482
例 , 91
多言語プログラム , 176
タブ編集記述子 , 259
タブ文字
編集する , 49
単一引用符文字 , 112
単純 GO TO 文 , 367
実行制御 , 146
単純記録参照 , 451
ち
チェックする、引き数 , 175, 178
中かっこ , 27
注釈
拡張機能 , 38, 49
固定形式 , 48
自由形式 , 47
文の順序 , 43
~としての C プリプロセッサ指令 , 38, 49
注釈文字 , 38, 49
重複部分配列 , 65
直接探査 , 212
REC 指定子 , 212
エラー , 665, 670, 671
例 , 230
て
定義
構造型 , 117
手続き , 158
定義された演算子 , 182
定義代入 , 184
定数 , 108
16 進 , 108
2 進 , 108
8 進 , 108
BOZ, 108, 677
PARAMETER 文 , 422
型なし , 110, 679
切り捨て , 110
組み込み型 , 108
形式 , 108
式 , 85, 685
実数型 , 111
726
整数型 , 108
宣言式 , 88
名前付き , 88, 108
複素数型 , 112
ホレリス , 109
文字 , 112
用語集 , 685
例 , 85
論理型 , 114
定数表現 , 88
用語集 , 685
停留入出力 , 213
ADVANCE 指定子 , 213
READ 文 , 443, 445
WRITE 文 , 504, 505
例 , 228
データ型 , 99
BYTE 文 , 287
CHARACTER 文 , 295
COMPLEX 文 , 304
DOUBLE COMPLEX 文 , 329
DOUBLE PRECISION 文 , 331
INTEGER 文 , 385
LOGICAL 文 , 395
REAL 文 , 448
構造型 , 117
実数型 , 100
実数表現 , 516
整数型 , 100
整数表現 , 516
データ表現の数体系 , 514
ビット表現 , 515
複素数型 , 100
ポインター , 125
文字型 , 100
用語集 , 685
論理型 , 100
データ宣言文
BYTE, 103, 287
CHARACTER, 103, 295
COMPLEX, 103, 304
DOUBLE COMPLEX, 103, 329
DOUBLE PRECISION, 331
INTEGER, 103, 385
LOGICAL, 395
REAL, 103, 448
データ転送文 , 214
ACCEPT, 269
DECODE, 318
索引
索引
ENCODE, 337
FORMAT, 360
NAMELIST, 403
PRINT, 433
READ, 442
WRITE, 503
データの初期化
BLOCK DATA 文 , 282
DATA 文 , 312
データの割り付け境界
EQUIVALENCE 文 , 353
%FILL ファイル名 , 472
組み込み型 , 100
構造型 , 121
配列 , 100
データ表現
数体系 , 514
選択する , 100
データを宣言する
BYTE 文 , 103, 287
CHARACTER 文 , 103, 295
COMPLEX 文 , 103, 304
DOUBLE COMPLEX 文 , 103, 329
DOUBLE PRECISION 文 , 103, 331
INTEGER 文 , 103, 385
LOGICAL 文 , 103, 395
REAL 文 , 103, 448
組み込み型 , 102
構造型 , 120
配列 , 54
手続き , 151
FUNCTION 文 , 362
SUBROUTINE 文 , 479
引用仕様 , 178
引用する , 159
概念 , 153
外部 , 153, 158, 357
仮 , 357
組み込み型 , 153, 509
組み込み関数との名前の競合 , 178
形状引き継ぎ配列 , 57
再帰的 , 161, 349, 362
総称 , 181, 684
代替入口点 , 163
定義構文 , 158
定義する , 158
内部 , 153, 164
引き数 , 168
引き数として渡す , 170
索引
文関数 , 166
モジュール , 153
用語 , 153
用語集 , 685
呼び出しから戻る , 161
呼び出す , 159
手続きを呼び出す , 159
デバッグ行 , 49
テープ入出力 libU77 ルーチン , 650
デマンドロード可能
用語集 , 686
と
問い合わせ関数
用語集 , 686
問い合わせ組み込み関数 , 511
式における~ , 88
初期値式 , 86
制限条項 , 88
動的オブジェクトを作成する , 430
飛び越す , 144
トラップ処理
ON 文 , 407
ドル記号 ($) 文字
名前 , 40
な
内部手続き , 153, 164
手続き定義構文 , 159
文関数 , 307
有効域 , 44
用語集 , 686
内部ファイル , 201
DECODE 文 , 318
ENCODE 文 , 337
READ 文 , 446
WRITE 文 , 506
エラー , 672
装置番号に接続する , 204
用語集 , 686
例 , 226
長さを問い合わせる , 384
名前 , 40
DO ループ , 325
外部 , 678
構造型 , 489
構文 , 40
主プログラム単位 , 155
727
索引
初期化する , 87
初期値設定プログラム単位 , 196
総称 , 181
定数 , 88, 108
用語集 , 686
名前付き DO ループ , 327
名前付き定数 , 88, 108
PARAMETER 文 , 422
組み込み手続き , 423
初期値式 , 86
用語集 , 686
~を定義するための規則 , 423
名前なし共通ブロック
BLOCK DATA 文 , 282
COMMON 文 , 301, 302
初期値設定プログラム単位 , 197
名前の競合
解決する , 191, 510, 648
組み込み関数 , 510
明示的引用仕様 , 178
並び入出力 , 207
DELIM 指定子 , 208
PRINT 文 , 434
READ 文 , 446
WRITE 文 , 506
エラー , 665, 671
形式 , 208
出力 , 208
順番探査 , 207
入力 , 207
ファイルを探査する , 206
編集記述子 , 236
編集する , 233
変数群 , 210
見本プログラム , 226
~文の概要 , 214
~文の構文 , 216
入出力 DO 形反復
入出力項目並び , 220
入出力実行時エラー , 663
入出力文
ACCEPT, 269
BACKSPACE, 280
CLOSE, 298
DECODE, 318
ENCODE, 337
ENDFILE, 346
FORMAT, 360
INQUIRE, 375
NAMELIST, 403
OPEN, 411
PRINT, 433
READ, 442
REWIND, 458
WRITE, 503
要約 , 214
入出力用にファイルを接続する , 203
入力データ
並び入出力 , 207
変数群入出力 , 211
に
二重引用符文字 , 112
二重結合 , 174
入出力 , 199
ASA 復帰制御 , 225
ENDFILE 文 , 200
libU77 ルーチン , 650
記録 , 200
項目並び , 218, 264
実行時エラー , 663
指定子 , 216
書式仕様 , 233
書式付き , 206
装置番号 , 203
停留入出力 , 213
並び , 207
ファイル , 201
の
残りバイト数編集記述子 , 258
728
は
廃止予定事項
用語集 , 686
倍精度型
型宣言 , 102, 331
宣言する , 103
データの割り付け境界 , 100
データ表現 , 100
倍精度複素数型
型宣言 , 102, 329
宣言する , 103
データの割り付け境界 , 100
データ表現 , 100
並び入出力 , 208
索引
索引
バイト
BYTE 文 , 287
型宣言 , 102
データの割り付け境界 , 100
データ表現 , 100
用語集 , 686
配列 , 51
1 次元配列 , 63, 65, 70, 76
ALLOCATED 組み込み関数 , 76
ASSOCIATED 組み込み関数 , 76
DIMENSION 文 , 54, 321
EQUIVALENCE 文 , 354
POINTER 属性 , 56
SHAPE 組み込み関数 , 76
SIZE 組み込み関数 , 76
UBOUND 組み込み関数 , 76
VIRTUAL 文 , 496
VOLATILE 文 , 497
WHERE 構文 , 499
演算対象 , 72
演算対象としての~ , 79
大きさ , 52
大きさゼロ , 52, 64, 72
大きさ引き継ぎ , 61
解放する , 316
格納順序 , 52
型宣言文 , 104
仮引き数 , 55, 56, 61, 169, 679
刻み幅 , 64
基礎 , 52
組み込み関数 , 74, 76, 518
形状 , 52
形状適合 , 52
形状引き継ぎ , 56
形状無指定 , 58
形状明示 , 54
構成子 , 687
構造型定義 , 119
式 , 72
次元 , 52
次元数 , 52
実引き数 , 56
自動割り付け , 55
順序結合 , 169
上下限 , 52, 322, 683
初期化 , 70, 87
スカラ代入 , 91
寸法 , 52
整合 , 55
索引
宣言 , 54
全体配列 , 52, 684
添え字 , 52
代入、配列選別 , 499
問い合わせ組み込み関数 , 511
特性 , 52
入出力制限条項 , 220
配列構成子 , 70
配列式のスカラ , 72
配列選別代入 , 94
配列値を持つ関数 , 74
配列値を持つ成分の引用 , 67
配列ポインター , 58, 125, 687
部分 , 63
部分列 , 63, 65
用語集 , 687
要素 , 52, 322, 687
要素順序 , 52, 687
要素別処理組み込み関数 , 511
例 , 53, 55, 56, 57, 58, 59, 61, 64, 65, 68, 71,
72, 74
割り付け , 59, 272, 273, 316
配列構成 DO 形反復
宣言式 , 88
配列構成子 , 70, 71
配列構成子
PARAMETER 文 , 422
RESHAPE 組み込み関数 , 71
型なし定数 , 110
宣言式 , 88
ベクトル添え字 , 65
配列選別代入 , 94
制限条項 , 499
配列値
用語集 , 687
配列値を持つ~
組み込み関数 , 74
構造体成分の引用 , 67
利用者定義関数 , 74
配列の大きさ , 322
用語集 , 677
配列ポインター , 125
形状無指定配列 , 58
用語集 , 687
配列、部分 , 63
バックスラッシュ文字
C エスケープシーケンス , 113
ハッシュ (#) 文字
注釈文字 , 38, 49
729
索引
パディングする
%FILL ファイル名 , 472
パフォーマンス
測定する , 598
パフォーマンスを測定する , 598
範囲、拡張 (DO ループ ), 326
反復可能編集記述子 , 236
エラー , 671
ひ
引き数 , 168
OPTIONAL 文 , 418
一致 , 168
演算対象を修正する , 85
仮 , 158, 168, 388, 419
キーワードオプション , 172, 680, 687
組み込み手続き , 171, 518
結合 , 153, 168, 289, 687
実 , 159, 168, 388
順序結合 , 169
省略可能な , 173, 418, 521
初期化 , 87
スカラ , 169
総称手続きにおける~ , 181
存在 , 419
定義された演算 , 182
内部手続き , 164
配列 , 169
ビット操作組み込み関数 , 82
ポインター仮引き数 , 170
用語集 , 687
~としての手続き , 170
引き数チェック , 175, 178
引き数渡し規約 , 175
非実行可能プログラム単位 , 152
左揃え文字データ , 241
日付および時刻
libU77 ルーチン , 650
組み込み手続き , 518
ビット
操作組み込み関数 , 82
ビット単位演算子 , 82
ビット単位組み込み関数 , 518
ビットの数体系 , 515
用語集 , 687
非同期プロセスおよび VOLATILE 文 , 497
表記規約 , 27
標準エラー , 204
730
標準出力 , 204
標準入力 , 204
非連続型 , 487
ふ
ファイル , 201
位置付ける , 214
外部 , 201
処理する , 199
スクラッチ , 201
探査する , 206
内部 , 201
ファイル名拡張子 , 45
用語集 , 687
ファイル位置付け文
BACKSPACE, 280
ENDFILE, 346
REWIND, 458
ファイルシステム
libU77 ルーチン , 650
エラー , 671
ファイル終了
エラー , 669, 670
記録 , 200
ファイル制御文
BACKSPACE, 280
CLOSE, 298
ENDFILE, 346
INQUIRE, 375
OPEN, 411
READ, 442
REWIND, 458
WRITE, 503
ファイルの接続 ( 入出力用 )
用語集 , 684
ファイル名、%FILL, 472
ファイルを位置付ける
BACKSPACE, 280
ENDFILE, 346
REWIND, 459
ファイルを探査する , 206
順次~ , 206
直接 , 212
並び , 207
変数群入出力 , 210
例 , 230
ファイルを開く , 203, 204
複数の OPEN, 416
索引
索引
複数の文
固定形式 , 47
自由形式 , 45
複素数型 , 100
COMPLEX 文 , 304
DOUBLE COMPLEX 文 , 329
型宣言 , 102, 304
式 , 79
宣言する , 103
定数 , 112
定数を割り当てる , 110
データの割り付け境界 , 100
データ表現 , 100
並び入出力 , 208
入出力エラー , 666
編集記述子 , 238
副プログラム
関数 , 362
サブルーチン , 479
引き数 , 168
モジュール手続き , 401
復帰制御および ASA, 225
不定状態 ( ポインター ), 126
浮動小数点
組み込み手続き , 518
例外処理 , 408
部分配列 , 63
式 , 78
添え字三つ組 , 64
代入 , 91
ベクトル添え字 , 65
ポインター代入 , 93
用語集 , 688
部分列 , 114
エラー , 673
初期値式 , 87
配列 , 65
用語集 , 688
古いプログラム , 688
プログラム
構造 , 41
実行制御 , 133
実行を終了する , 149
実行を停止する , 148
用語集 , 688
プログラム形式 , 45
固定形式 , 47
自由形式 , 45
ファイル名拡張子 , 45
索引
プログラム構造 , 41
プログラム実行の時間 , 623
プログラム速度を測定する , 623
プログラム単位 , 151
概念 , 152
外部手続き , 158
関数 , 158, 362
サブルーチン , 158, 479
実行可能 , 152
主プログラム , 155, 438
種類 , 41, 152
初期値設定 , 196, 357
非実行可能 , 152
文の順序 , 43
モジュール , 188, 399, 401
用語 , 152
用語集 , 688
フロー制御文 , 142
CALL, 289
CONTINUE, 142, 309
CYCLE, 143, 310
DO, 325
EXIT, 144, 356
PAUSE, 148, 425
RETURN, 456
SELECT CASE, 463
STOP, 149, 468
計算形 GO TO, 145, 366
算術 IF, 147, 368
単純 GO TO, 146, 367
ブロック IF, 369
論理 IF, 147, 370
割り当て形 GO TO, 144, 365
プロセス制御 libU77 ルーチン , 650
ブロック、文 , 134
用語集 , 688
文 , 265
ACCEPT, 269
ALLOCATABLE, 271
ALLOCATE, 273
ASK COMMON, 484
ASSIGN, 276
AUTOMATIC, 278
BACKSPACE, 280
BLOCK DATA, 282
BUFFER IN, 283
BUFFER OUT, 285
BYTE, 287
CALL, 289
731
索引
CASE, 292
CHARACTER, 295
CLOSE, 298
COMMON, 300
COMPLEX, 304
CONTAINS, 307
CONTINUE, 309
CYCLE, 310
DATA, 312
DEALLOCATE, 316
DECODE, 318
DIMENSION, 321
DO, 325
DOUBLE COMPLEX, 329
DOUBLE PRECISION, 331
ELSE, 333
ELSE IF, 334
ELSEWHERE, 336
ENCODE, 337
END DO, 342
END IF, 342
END INTERFACE, 344
END MAP, 343
END SELECT, 342
END STRUCTURE, 343
END TYPE, 345
END UNION, 343
END WHERE, 342
END ( 構造体定義 ), 343
ENDFILE, 200, 346
END ( 構文 ), 342
END ( プログラム単位 ), 340
ENTRY, 348
EQUIVALENCE, 352
EXIT, 327, 356
EXTERNAL, 357
FORMAT, 360
FUNCTION, 362
GO TO ( 計算形 ), 366
GO TO ( 単純 ), 367
GO TO ( 割り当て形 ), 365
IF THEN, 369
IF ( 算術 ), 368
IF ( 論理 ), 370
IMPLICIT, 371
INCLUDE, 50, 373
INQUIRE, 375
INTEGER, 385
INTENT, 388
732
INTERFACE, 391
INTRINSIC, 393
LOGICAL, 395
MAP, 398, 474
MODULE, 399
MODULE PROCEDURE, 401
NAMELIST, 403
NULLIFY, 405
ON, 407
OPEN, 411
OPTIONAL, 418
PARAMETER, 422
PAUSE, 425
POINTER, 430
POINTER ( クレイ形式 ), 427
PRINT, 433
PRIVATE, 435
PUBLIC, 439
READ, 442
REAL, 448
RECORD, 451
RETURN, 456
REWIND, 458
SAVE, 460
SELECT CASE, 463
SEQUENCE, 464
STATIC, 466
STOP, 468
SUBROUTINE, 479
TARGET, 481
TYPE ( 宣言 ), 486
TYPE ( 定義 ), 489
TYPE ( 入出力 ), 491
UNION, 474, 492
USE, 493
VIRTUAL, 496
VOLATILE, 497
WHERE, 499
WRITE, 503
型宣言 , 102, 120, 265, 287, 295, 304, 385,
451, 486
継続 , 47, 48
構造 , 469
算術 IF, 368
実行可能 , 155
順序付け要件 , 43
宣言 , 155, 196
代入 , 90
長さ , 47
索引
索引
プログラム , 438
用語集 , 688
論理 IF, 370
文関数 , 166
組み込み関数名 , 510
代替としての内部手続き , 307
用語集 , 688
文の行
固定形式 , 48
自由形式 , 45
文番号 , 42
固定形式 , 48
自由形式 , 46
用語集 , 689
文ブロック , 134
分類
BLAS ルーチン , 660
libU77 ルーチン , 650
組み込み手続き , 518
へ
べき算
演算子の優先順位 , 83
初期値式 , 86
負の整数 , 80
ベクトル演算 , 645
ベクトル添え字
式 , 78
配列構成子 , 65
ポインター代入 , 93
用語集 , 689
変換、型 , 80, 81
変形組み込み関数 , 511
式における~ , 86, 88
編集記述子
16 進 , 259
2 進 , 243
8 進 , 255
A, 241
B, 243
BN, 245
BZ, 245
D, 246
E, 246
EN, 246
ES, 246
F, 246
G, 246
索引
H, 251
I, 252
L, 254
O, 255
P, 257
Q, 258
R, 241
S, 259
SP, 259
SS, 259
T, 259
TL, 259
TR, 259
X, 259
Z, 259
エラー , 664
改行 , 239
概要 , 236
空白 , 245
桁移動数 , 257
構造型 , 238
コロン , 240
実数型 , 246
スラッシュ , 240
整数型 , 252
正符号 , 259
タブ , 259
残りバイト数 , 258
反復数 , 236
複素数型 , 238
編集記述子 , 236
ポインター , 238
ホレリス , 251
文字 (A および R), 241
文字列 , 239
論理型 , 254
変数
AUTOMATIC 文 , 278
SAVE 文 , 460
自動割り付け , 278
宣言式 , 88
有効範囲 , 153
用語集 , 689
~に割り当てる , 90
変数群入出力 , 210
NAMELIST 文 , 403
NML 指定子 , 210
PRINT 文 , 433, 434
READ 文 , 443, 446
733
索引
WRITE 文 , 504, 506
エラー , 673, 674
出力 , 211
順番探査 , 210
入力 , 211
例 , 210
変数を保存する , 460
ほ
ポインタ
ポインター代入 , 92
ポインター , 125
ALLOCATE 文 , 125
DATA 文 , 312
DEALLOCATE 文 , 125, 316
NULLIFY 文 , 405
POINTER 文 , 430
TARGET 文 , 481
解放する , 316
空状態 , 126, 316, 680
組み込み手続き , 518
クレイ形式 , 427
結合 , 154, 316, 689
結合状態 , 126
式の中の演算対象 , 78
指示先 , 125
指示先に割り当てる , 125
初期化 , 87
宣言する , 125
代入文 , 90
配列ポインタ , 125
配列ポインター , 58
引き数 , 170, 178
編集記述子 , 238
ポインター結合 , 154
見本プログラム , 127
用語集 , 689
割り付ける , 125, 273
ポインター代入
規則 , 93
結合状態 , 93
構文 , 92
指示先要件 , 482
ベクトル添え字 , 65
例 , 93
ポインターに空白を割り当てる , 430
補助入出力文 , 214
ホレリス
734
定数 , 109
編集記述子 , 251
ま
マップブロック
MAP 文 , 398
STRUCTURE 文 , 475
マニュアルの範囲 , 26
マニュアルページ , 28
BLAS ルーチン , 649
libU77 ルーチン , 649
み
右揃え文字データ , 241
三つ組、添え字 , 64
見本プログラム
alloc_array.f90, 59
alt_return.f90, 162
array_val_ref.f90, 68
assumed_size.f90, 61
call_ttynam.f90, 647
def_assign.f90, 185
def_op.f90, 182
get_args.c, 176
int_file.f90, 226
int_func.f90, 164
intrinsic_arg.f90, 171
lin_eq_slv.f90, 191
main.f90, 191
nonadvance.f90, 228
optional_arg.f90, 173
pass_args.f90, 176
precision.f90, 191
proc_interface.f90, 180
ptr_assign.f90, 93
ptr_sts.f90, 127
score2grade.f90, 96
stmt_func.f90, 166
substring.f90, 114
swap_names.f90, 115
traffic.f90, 122
vector_sub.f90, 65
む
無限 DO ループ , 139
無名共通ブロック
用語集 , 689
索引
索引
め
明示的引用仕様 , 178
ENTRY 文 , 349
組み込み手続き , 510
形状引き継ぎ配列 , 57
再帰的手続き , 161
省略可能な引き数 , 173, 419
内部手続き , 164
必要な時 , 178
文関数 , 166
モジュール手続き , 189
用語集 , 689
ライブラリルーチン , 647
名称変更機能 , 190, 493
用語集 , 689
メッセージ
入出力エラー , 663
メモリー
割り付け libU77 ルーチン , 650
も
文字
CHARACTER 文 , 295
EQUIVALENCE 結合する , 353
HP 文字集合 , 38
アスタリスク (*), 48, 161, 296
アンパサンド (&), 47, 160
エスケープ , 113
隠し長さパラメータ , 175
下線 (_), 646
関係式 , 81
感嘆符 (!), 47, 48
空白 , 38, 48
空白補い , 81
組み込み手続き , 518
実引き数 , 175
スラッシュ (/), 104
制御文字 , 38
セミコロン , 45, 47
タブ , 49
単一引用符 , 112
注釈文字 , 47, 48
定数 , 112
ドル記号 ($), 40
二重引用符 , 112
バックスラッシュ , 113
ハッシュ (#), 38, 49
部分列 , 114
索引
変更可能な長さ , 296
編集記述子 , 239
変数の長さを指定する , 104
文字列 , 115, 690
文字列 (C 言語 ), 113
文字列編集記述子 , 239
用語集 , 690
連結演算子 , 81
文字型 , 100
型宣言 , 102, 295
順序結合 , 169
宣言する , 103
データの割り付け境界 , 100
データ表現 , 100
並び入出力 , 208
入出力エラー , 665, 671, 672
文字式の書式仕様 , 262
ACCEPT 文 , 269
DECODE 文 , 318, 337
FORMAT 文 , 360
PRINT 文 , 433, 434
READ 文 , 444, 446
WRITE 文 , 503
内部ファイル , 446
文字定数用の区切り記号 , 112
文字編集記述子 (A および R), 241
モジュール , 188, 399
PRIVATE 文 , 436
PUBLIC 文 , 440
USE 文 , 493
構文 , 188
コンパイル行順 , 195
コンパイル時の注意 , 188, 195
見本プログラム , 191
有効域 , 44
用語集 , 690
モジュール手続き , 153
参照結合 , 401
有効域 , 44
用語集 , 690
文字列
C 言語 , 113
編集記述子 , 239
用語集 , 690
戻り値
RETURN 文 , 456
手続き引用 , 161
用語集 , 690
ライブラリ関数 , 647
735
索引
戻り、選択 , 161
ゆ
有効域 , 153
暗黙の型宣言 , 107
使用可能な文 , 44
用語集 , 690
有効範囲 , 153
大域 , 153
用語集 , 690
優先順位、演算子 , 83
よ
要素別処理組み込み
用語集 , 690
要素別処理組み込み関数 , 511
WHERE 文 , 499
式における~ , 88
初期値式 , 86
要素、配列 , 52
配列要素順序 , 52, 687
用語集 , 690
ら
ライブラリ , 645
BLAS, 645
BSD 3f, 645
libblas, 645
libU77, 645
用語集 , 690
ライブラリルーチン
暗黙の型宣言 , 647
戻り値を宣言する , 647
乱数組み込み手続き , 518
り
リターンコード , 556
利用者定義
演算子 , 178, 182, 691
代入 , 178, 184, 691
利用者定義演算子
用語集 , 691
利用者定義代入
用語集 , 691
リンク
用語集 , 691
736
る
ルーチン、ライブラリ , 645
名前の競合 , 648
れ
例外処理、ON 文 , 408
列構造型 , 119
SEQUENCE 文 , 464
用語集 , 691
列順 , 52
用語集 , 691
列、記憶
用語集 , 679
列構造型 , 464
連結演算子 , 81
ろ
論理型 , 100
IF 文 , 147
PARAMETER 文 , 423
値 , 82, 114
演算子 , 81, 423
型宣言 , 102, 395
組み込み関数への引き数 , 82
組み込み手続き , 518
真偽表 , 82
整数式における~ , 80
宣言する , 103
定数 , 114
データの割り付け境界 , 100
データ表現 , 100
並び入出力 , 208
入出力エラー , 665, 668, 671, 672
ビット単位演算 , 82
編集記述子 , 254
例 , 82
わ
割り当て形 GO TO 文 , 365
ASSIGN 文 , 276
実行制御 , 144
割り込み処理、ON 文 , 408
割り付け状態 , 59
割り付け配列 , 59, 272, 273, 274, 316
DATA 文 , 312
初期化 , 87
用語集 , 691
索引