サイトトップへこのカテゴリの一覧へ

目 次

ページ

序文

·······················································································································

1

1

一般的規定要素

······································································································

1

1.1

適用範囲

···········································································································

1

1.2

処理系

·············································································································

1

1.3

規定事項

···········································································································

1

1.4

規定外事項

········································································································

1

1.5

規格合致性

········································································································

2

1.6

互換性

·············································································································

3

1.6.1

Fortran 95

との互換性

························································································

3

1.6.2

Fortran 90

との互換性

························································································

3

1.6.3

F

ORTRAN

77

との互換性

·····················································································

3

1.7

この規格での記述法

······························································································

4

1.7.1

補足要素

·········································································································

4

1.7.2

構文規則

·········································································································

4

1.7.3

制約

··············································································································

5

1.7.4

暗黙の構文規則

·································································································

5

1.7.5

構文の約束 及び 特色

··························································································

5

1.7.6

文章記述の約束

·································································································

6

1.8

廃止事項 及び 廃止予定事項

·····················································································

6

1.8.1

廃止事項の性質

·································································································

6

1.8.2

廃止予定事項の性質

····························································································

6

1.9

引用規格

···········································································································

6

2

Fortran

の用語 及び 概念

·························································································

7

2.1

高水準構文

········································································································

7

2.2

プログラム単位の概念

····························································································

10

2.2.1

プログラム

······································································································

11

2.2.2

主プログラム

····································································································

11

2.2.3

手続

··············································································································

11

2.2.4

モジュール

······································································································

12

2.3

実行の概念

········································································································

12

2.3.1

実行文 及び 非実行文

··························································································

12

2.3.2

文の順序

·········································································································

12

2.3.3

END

·········································································································

13

2.3.4

実行系列

·········································································································

13

2.4

データの概念

······································································································

14

2.4.1

················································································································

14

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

2.4.2

データの値

······································································································

14

2.4.3

データ要素

······································································································

14

2.4.4

スカラ

···········································································································

16

2.4.5

配列

··············································································································

16

2.4.6

ポインタ

·········································································································

16

2.4.7

記憶場所

·········································································································

16

2.5

基本用語

···········································································································

16

2.5.1

名前 及び 特定子

·······························································································

17

2.5.2

キーワード

······································································································

17

2.5.3

結合

··············································································································

17

2.5.4

宣言

··············································································································

17

2.5.5

定義

··············································································································

17

2.5.6

引用

··············································································································

18

2.5.7

組込み

···········································································································

18

2.5.8

演算子

···········································································································

18

2.5.9

················································································································

18

2.5.10

連携処理系

·····································································································

18

3

文字,構文素 及び プログラム形式

················································································

19

3.1

処理系の文字集合

·································································································

19

3.1.1

英字

··············································································································

19

3.1.2

数字

··············································································································

19

3.1.3

下線

··············································································································

20

3.1.4

特殊文字

·········································································································

20

3.1.5

その他の文字

····································································································

20

3.2

低水準構文

········································································································

20

3.2.1

名前

··············································································································

20

3.2.2

定数

··············································································································

21

3.2.3

演算子

···········································································································

21

3.2.4

文番号

···········································································································

22

3.2.5

括弧類

···········································································································

23

3.3

プログラム形式

···································································································

23

3.3.1

自由形式

·········································································································

23

3.3.2

固定形式

·········································································································

25

3.4

文字列の取込み

···································································································

25

4

·····················································································································

26

4.1

型の概念

···········································································································

26

4.1.1

値の集合

·········································································································

26

4.1.2

定数

··············································································································

27

4.1.3

演算

··············································································································

27

4.2

型パラメタ

········································································································

27

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

4.3

型 及び 値と実体との関連

························································································

28

4.4

組込み型

··········································································································

28

4.4.1

整数型

···········································································································

29

4.4.2

実数型

···········································································································

30

4.4.3

複素数型

·········································································································

32

4.4.4

文字型

···········································································································

33

4.4.5

論理型

···········································································································

36

4.5

派生型

·············································································································

36

4.5.1

派生型定義

······································································································

36

4.5.2

派生型パラメタ

·································································································

40

4.5.3

成分

··············································································································

41

4.5.4

型束縛手続

······································································································

46

4.5.5

後始末サブルーチン

····························································································

48

4.5.6

型の拡張

·········································································································

50

4.5.7

派生型の値

······································································································

52

4.5.8

派生型指定子

····································································································

52

4.5.9

派生型の値の構成

·······························································································

53

4.5.10

派生型の演算 及び 代入

······················································································

55

4.6

列挙体 及び 列挙子

·······························································································

55

4.7

配列値の構成

······································································································

56

5

データ実体の宣言 及び 指定

·······················································································

58

5.1

型宣言文

···········································································································

58

5.1.1

宣言型指定子

····································································································

61

5.1.2

属性

··············································································································

62

5.2

属性宣言文

········································································································

71

5.2.1

参照許可宣言文

·································································································

71

5.2.2

ALLOCATABLE

·························································································

71

5.2.3

ASYNCHRONOUS

······················································································

71

5.2.4

BIND

········································································································

71

5.2.5

DATA

·······································································································

72

5.2.6

DIMENSION

······························································································

74

5.2.7

INTENT

····································································································

74

5.2.8

OPTIONAL

·······························································································

74

5.2.9

PARAMETER

····························································································

75

5.2.10

POINTER

································································································

75

5.2.11

PROTECTED

···························································································

75

5.2.12

SAVE

······································································································

75

5.2.13

TARGET

·································································································

76

5.2.14

VALUE

····································································································

76

5.2.15

VOLATILE

·······························································································

76

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

5.3

IMPLICIT

····································································································

76

5.4

NAMELIST

··································································································

79

5.5

データ実体の記憶列結合

··························································································

80

5.5.1

EQUIVALENCE

··························································································

80

5.5.2

COMMON

·································································································

82

6

データ実体の使用

···································································································

84

6.1

スカラ

·············································································································

85

6.1.1

部分列

···········································································································

85

6.1.2

構造体成分

······································································································

86

6.1.3

型パラメタ問合せ

·······························································································

87

6.2

配列

················································································································

88

6.2.1

全体配列

·········································································································

88

6.2.2

配列要素 及び 部分配列

························································································

88

6.3

動的結合

···········································································································

91

6.3.1

ALLOCATE

·······························································································

92

6.3.2

NULLIFY

··································································································

95

6.3.3

DEALLOCATE

···························································································

95

7

式 及び 代入

·········································································································

97

7.1

··················································································································

97

7.1.1

式の形式

·········································································································

97

7.1.2

組込み演算

······································································································

101

7.1.3

利用者定義演算

·································································································

102

7.1.4

式の型

,

型パラメタ 及び 形状

·················································································

103

7.1.5

要素別処理演算の適合規則

·····················································································

105

7.1.6

宣言式

···········································································································

105

7.1.7

初期値式

·········································································································

107

7.1.8

演算の評価

······································································································

108

7.2

組込み演算の解釈

·································································································

111

7.2.1

数値組込み演算

·································································································

112

7.2.2

文字組込み演算

·································································································

112

7.2.3

関係組込み演算

·································································································

113

7.2.4

論理組込み演算

·································································································

114

7.3

演算子の優先順位

·································································································

114

7.4

代入

················································································································

116

7.4.1

代入文

···········································································································

116

7.4.2

ポインタ代入文

·································································································

120

7.4.3

配列選別代入

(WHERE)

·····················································································

123

7.4.4

FORALL

······································································································

125

8

実行制御

·············································································································

131

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

8.1

ブロックを含む実行構文

··························································································

131

8.1.1

ブロックに関する規則

··························································································

131

8.1.2

IF

構文

··········································································································

132

8.1.3

CASE

構文

·····································································································

133

8.1.4

ASSOCIATE

構文

····························································································

136

8.1.5

SELECT TYPE

構文

························································································

137

8.1.6

DO

構文

········································································································

140

8.2

飛越し

·············································································································

144

8.2.1

GO TO

······································································································

144

8.2.2

計算形

GO TO

······························································································

144

8.2.3

算術

IF

·······································································································

145

8.3

CONTINUE

·································································································

145

8.4

STOP

··········································································································

145

9

入出力文

·············································································································

145

9.1

記録

················································································································

146

9.1.1

書式付き記録

····································································································

146

9.1.2

書式なし記録

····································································································

146

9.1.3

ファイル終了記録

·······························································································

146

9.2

外部ファイル

······································································································

147

9.2.1

ファイルの存在

·································································································

147

9.2.2

ファイル探査

····································································································

147

9.2.3

ファイル位置

····································································································

149

9.2.4

ファイル記憶単位

·······························································································

151

9.3

内部ファイル

······································································································

151

9.4

ファイルの接続

···································································································

152

9.4.1

接続モード

······································································································

152

9.4.2

装置の存在

······································································································

153

9.4.3

ファイルと装置との接続

·······················································································

153

9.4.4

事前接続

·········································································································

153

9.4.5

OPEN

·······································································································

154

9.4.6

CLOSE

······································································································

158

9.5

データ転送文

······································································································

159

9.5.1

制御情報並び

····································································································

159

9.5.2

データ転送入出力項目並び

·····················································································

163

9.5.3

データ転送入出力文の実行

·····················································································

165

9.5.4

データ転送文の終了

····························································································

175

9.6

未了データ転送の待機

····························································································

176

9.6.1

WAIT

·······································································································

176

9.6.2

待機操作

·········································································································

177

9.7

ファイル位置付け文

······························································································

177

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

9.7.1

BACKSPACE

·····························································································

178

9.7.2

ENDFILE

··································································································

178

9.7.3

REWIND

··································································································

178

9.8

FLUSH

········································································································

178

9.9

ファイル問合せ

···································································································

179

9.9.1

問合せ指定子

····································································································

180

9.9.2

問合せ指定子の制限

····························································································

185

9.9.3

出力並び

INQUIRE

························································································

185

9.10

誤り条件

,

記録終了条件 及び ファイル終了条件

······························································

185

9.10.1

誤り条件 及び

ERR

指定子

··················································································

185

9.10.2

ファイル終了条件 及び

END

指定子

········································································

186

9.10.3

記録終了条件 及び

EOR

指定子

·············································································

186

9.10.4

IOSTAT

指定子

······························································································

186

9.10.5

IOMSG

指定子

·······························································································

187

9.11

入出力文の制限

··································································································

187

10

入出力編集

·········································································································

188

10.1

書式仕様の書き方

·······························································································

188

10.1.1

FORMAT

·································································································

188

10.1.2

文字書式仕様

··································································································

188

10.2

書式項目並びの形

·······························································································

189

10.2.1

編集記述子

·····································································································

189

10.2.2

···············································································································

191

10.3

入出力項目並びと書式との対応

·················································································

191

10.4

書式制御による位置付け

························································································

192

10.5

小数点記号

·······································································································

192

10.6

データ編集記述子

·······························································································

192

10.6.1

数値編集

·······································································································

193

10.6.2

論理型の編集

··································································································

197

10.6.3

文字型の編集

··································································································

198

10.6.4

G

形編集

·······································································································

198

10.6.5

使用者定義派生型の編集

······················································································

199

10.7

制御編集記述子

··································································································

200

10.7.1

位置付け編集

··································································································

200

10.7.2

斜線編集

·······································································································

201

10.7.3

コロン編集

·····································································································

201

10.7.4

SS

形編集

, SP

形編集 及び

S

形編集

········································································

201

10.7.5

P

形編集

·······································································································

201

10.7.6

BN

形編集 及び

BZ

形編集

··················································································

202

10.7.7

RU

形編集,

RD

形編集,

RZ

形編集,

RN

形編集,

RC

形編集 及び

RP

形編集

······················

202

10.7.8

DC

形編集 及び

DP

形編集

·················································································

202

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

10.8

文字列編集記述子

·······························································································

202

10.9

並び書式

·········································································································

203

10.9.1

並び入力

·······································································································

203

10.9.2

並び出力

·······································································································

205

10.10

変数群書式

·····································································································

206

10.10.1

変数群入力

···································································································

206

10.10.2

変数群出力

···································································································

209

11

プログラム単位

····································································································

210

11.1

主プログラム

····································································································

211

11.2

モジュール

·······································································································

211

11.2.1

USE

文 及び 参照結合

·······················································································

212

11.3

初期値設定プログラム単位

······················································································

215

12

手続

·················································································································

216

12.1

手続の分類

·······································································································

216

12.1.1

引用の形による手続の分類

···················································································

216

12.1.2

定義の方法による手続の分類

·················································································

217

12.2

手続の特性

·······································································································

217

12.2.1

仮引数の特性

··································································································

217

12.2.2

関数結果の特性

································································································

218

12.3

手続引用仕様

····································································································

218

12.3.1

暗黙的引用仕様 及び 明示的引用仕様

·······································································

218

12.3.2

手続引用仕様の指定

···························································································

219

12.4

手続引用

·········································································································

227

12.4.1

実引数,仮引数 及び 引数結合

···············································································

229

12.4.2

関数引用

·······································································································

236

12.4.3

サブルーチン引用

·····························································································

236

12.4.4

名前付き手続引用の解決

······················································································

236

12.4.5

型束縛手続引用の解決

························································································

239

12.5

手続定義

·········································································································

239

12.5.1

組込み手続の定義

·····························································································

239

12.5.2

副プログラムによって定義される手続

·······································································

239

12.5.3

Fortran

以外の手段による手続定義 及び 手続呼出し

······················································

244

12.5.4

文関数

··········································································································

245

12.6

純粋手続

·········································································································

245

12.7

要素別処理手続

··································································································

247

12.7.1

要素別処理手続宣言 及び 引用仕様

··········································································

247

12.7.2

要素別処理関数の実引数 及び 結果

··········································································

247

12.7.3

要素別処理サブルーチンの実引数

············································································

248

13

組込み手続 及び 組込みモジュール

···············································································

248

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

13.1

組込み手続類

····································································································

248

13.2

組込み手続の引数

·······························································································

248

13.2.1

配列引数の形状

································································································

249

13.2.2

選別引数

·······································································································

249

13.3

ビットの数体系

··································································································

249

13.4

数値の数体系

····································································································

250

13.5

標準総称組込み関数

·····························································································

250

13.5.1

数値関数

·······································································································

251

13.5.2

数学関数

·······································································································

251

13.5.3

文字関数

·······································································································

251

13.5.4

種別関数

·······································································································

252

13.5.5

種々の型変換関数

·····························································································

252

13.5.6

数値問合せ関数

································································································

252

13.5.7

配列問合せ関数

································································································

252

13.5.8

その他の問合せ関数

···························································································

252

13.5.9

ビット操作手続

································································································

253

13.5.10

浮動小数点数操作関数

·······················································································

253

13.5.11

ベクトル 及び 行列の乗算関数

·············································································

253

13.5.12

配列集計関数

·································································································

253

13.5.13

配列構成関数

·································································································

254

13.5.14

配列内位置関数

······························································································

254

13.5.15

NULL

関数

··································································································

254

13.5.16

割付け転送手続

······························································································

254

13.5.17

乱数手続

······································································································

254

13.5.18

システム環境手続

····························································································

254

13.6

標準組込み関数の個別名

·······················································································

254

13.7

標準組込み手続の宣言

···························································································

256

13.8

標準組込みモジュール

···························································································

308

13.8.1

IEEE

モジュール

·····························································································

308

13.8.2

組込みモジュール

ISO FORTRAN ENV

·······························································

308

13.8.3

モジュール

ISO C BINDING

············································································

308

14

例外 及び

IEEE

算術

·····························································································

308

14.1

モジュール中で定義されている派生型 及び 定数

·····························································

310

14.2

例外

··············································································································

310

14.3

丸めモード

·······································································································

312

14.4

下位けたあふれモード

···························································································

312

14.5

停止

··············································································································

313

14.6

浮動小数点数状態

·······························································································

313

14.7

例外値

············································································································

313

14.8

IEEE

算術

·······································································································

313

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

14.9

手続の表

·········································································································

314

14.9.1

問合せ関数

·····································································································

314

14.9.2

要素別処理関数

································································································

314

14.9.3

種別関数

·······································································································

315

14.9.4

要素処理サブルーチン

························································································

315

14.9.5

非要素処理サブルーチン

······················································································

315

14.10

手続の要求事項

································································································

315

14.11

···············································································································

328

15

C

との相互利用可能性

·····························································································

331

15.1

組込みモジュール

ISO C BINDING

········································································

332

15.1.1

モジュールにおける名前付き定数 及び 派生型

······························································

332

15.1.2

モジュールにおける手続

······················································································

333

15.2

Fortran

と言語

C

との言語要素間の相互利用可能性

·························································

336

15.2.1

組込み型の相互利用可能性

···················································································

336

15.2.2

C

ポインタ型の相互利用可能性

··············································································

338

15.2.3

派生型と言語

C

の構造体型との相互利用可能性

····························································

338

15.2.4

スカラ変数の相互利用可能性

·················································································

339

15.2.5

配列変数の相互利用可能性

···················································································

339

15.2.6

手続と手続引用仕様との相互利用可能性

····································································

340

15.3

言語

C

の大域変数との相互利用可能性

········································································

341

15.3.1

共通ブロック 及び 変数に対する束縛ラベル

································································

342

15.4

言語

C

の関数との相互利用可能性

·············································································

342

15.4.1

手続に対する束縛ラベル

······················································································

343

15.4.2

例外 及び

IEEE

算術手続

····················································································

343

16

有効範囲,結合 及び 定義状態

···················································································

343

16.1

大域識別子の有効範囲

···························································································

344

16.2

局所識別子の有効範囲

···························································································

344

16.2.1

共通ブロック名と同じ名前の局所識別子

····································································

345

16.2.2

関数結果

·······································································································

345

16.2.3

総称宣言における制限

························································································

346

16.2.4

成分,型パラメタ 及び 束縛

·················································································

347

16.2.5

引数キーワード

································································································

347

16.3

文内要素 及び 構文内要素

······················································································

347

16.4

結合

··············································································································

348

16.4.1

名前結合

·······································································································

348

16.4.2

ポインタ結合

··································································································

352

16.4.3

記憶列結合

·····································································································

354

16.4.4

継承結合

·······································································································

356

16.4.5

結合の確立

·····································································································

356

16.5

変数を確定 又は 不定にする動作

···············································································

357

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

16.5.1

実体 及び 部分実体の確定

····················································································

357

16.5.2

常に確定である変数

···························································································

357

16.5.3

初期確定である変数

···························································································

357

16.5.4

初期不定である変数

···························································································

357

16.5.5

変数が確定になる条件

························································································

357

16.5.6

変数が不定になる条件

························································································

359

16.5.7

変数定義文脈

··································································································

360

附属書

A

(参考) 用語集

·····························································································

362

附属書

B

(参考) 廃止事項 及び 廃止予定事項

······································································

372

B.1

廃止事項

··········································································································

372

B.2

廃止予定事項

·····································································································

372

B.2.1

選択戻り

········································································································

373

B.2.2

計算形

GO TO

·····························································································

373

B.2.3

文関数

··········································································································

373

B.2.4

実行文の間の

DATA

·······················································································

373

B.2.5

文字長引継ぎ文字関数

·························································································

373

B.2.6

固定形式

········································································································

374

B.2.7

CHARACTER*

の形の文字型宣言

················································································

374

附属書

C

(参考) 箇条の注記

·························································································

375

C.1

箇条

4

の注記

····································································································

375

C.1.1

組込み型 及び 派生型

··························································································

375

C.1.2

近似方法の選択

································································································

376

C.1.3

型の拡張 及び 成分の参照許可属性

···········································································

376

C.1.4

抽象型

··········································································································

377

C.1.5

ポインタ

········································································································

377

C.1.6

構造体構成子 及び 総称名

·····················································································

378

C.1.7

総称型束縛手続

································································································

380

C.1.8

後始末サブルーチン

····························································································

381

C.2

箇条

5

の注記

····································································································

382

C.2.1

POINTER

属性

······························································································

382

C.2.2

TARGET

属性

································································································

383

C.2.3

VOLATILE

属性

·····························································································

383

C.3

箇条

6

の注記

····································································································

384

C.3.1

構造体成分

·····································································································

384

C.3.2

実行時の型を伴う割付け(

6.3.1

参照)

······································································

385

C.3.3

ポインタ割付け 及び ポインタ結合

···········································································

385

C.4

箇条

7

の注記

····································································································

386

C.4.1

文字代入文

·····································································································

386

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

C.4.2

関数引用の評価

································································································

386

C.4.3

式中のポインタ

································································································

386

C.4.4

代入文の左辺に置かれたポインタ

·············································································

386

C.4.5

WHERE

構文を含む

FORALL

構文の例

··································································

387

C.4.6

単純

FORALL

文の例

························································································

388

C.5

箇条

8

の注記

····································································································

388

C.5.1

ループ制御

·····································································································

388

C.5.2

CASE

構文

····································································································

389

C.5.3

DO

構文の例

···································································································

389

C.5.4

誤った

DO

構文の例

···························································································

390

C.6

箇条

9

の注記

·····································································································

390

C.6.1

外部ファイル

···································································································

391

C.6.2

停留入出力

·····································································································

391

C.6.3

非同期入出力

···································································································

393

C.6.4

OPEN

······································································································

394

C.6.5

接続属性

········································································································

395

C.6.6

CLOSE

·····································································································

395

C.7

箇条

10

の注記

···································································································

396

C.7.1

記録の個数

·····································································································

396

C.7.2

並び入力

········································································································

396

C.8

箇条

11

の注記

···································································································

396

C.8.1

主プログラム 及び 初期値設定プログラム単位

······························································

396

C.8.2

依存翻訳

········································································································

397

C.8.3

モジュールの使用例

····························································································

399

C.9

箇条

12

の注記

···································································································

404

C.9.1

外部手続の可搬性の問題

·······················································································

404

C.9.2

Fortran

以外の手段で定義された手続

·······································································

404

C.9.3

手続引用仕様

···································································································

404

C.9.4

抽象引用仕様

···································································································

405

C.9.5

引数の結合 及び 評価

··························································································

406

C.9.6

引数としてのポインタ 及び 指示先

···········································································

407

C.9.7

多相的引数結合

································································································

408

C.10

箇条

15

の注記

··································································································

409

C.10.1

実行環境

······································································································

409

C.10.2

Fortran

と言語

C

の関数との相互利用可能性の例

·························································

409

C.11

箇条

16

の注記

··································································································

413

C.11.1

親子結合の例

·································································································

413

C.11.2

明白な総称を保証する規則

···················································································

414

C.12

配列機能の注記

·································································································

418

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

ページ

C.12.1

機能のまとめ

·································································································

418

C.12.2

··············································································································

419

C.12.3

数式の翻訳 及び 配列処理

···················································································

422

C.12.4

残差平方和

····································································································

423

C.12.5

ベクトルのノルム(無限大ノルム 及び

1

ノルム)

·························································

423

C.12.6

行列のノルム(無限大ノルム 及び

1

ノルム)

······························································

424

C.12.7

論理問合せ

····································································································

424

C.12.8

並列計算

······································································································

424

C.12.9

配列要素ごとの計算の例

·····················································································

424

C.12.10

ビット操作手続 及び ビット問合せ関数

···································································

425

附属書

D

(参考) 構文規則

···························································································

426

D.1

全構文規則の抽出

································································································

426

D.2

構文規則の相互参照

······························································································

472

附属書

E

(参考) 索引

································································································

473

··················································································································

496

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

まえがき

この規格は,工業標準化法第

14

条によって準用する第

12

条第

1

項の規定に基づき,社団法人 情報処理学会

(IPSJ)

及び 財団法人 日本規格協会

(JSA)

から,工業標準原案を具して日本工業規格を改正すべきとの申出があり,日本工

業標準調査会の審議を経て,経済産業大臣が改正した日本工業規格である。

これによって,

JIS X 3001-1

:

1998

は改正され,この規格に置き換えられた。

この規格は,著作権法で保護対象となっている著作物である。

この規格の一部が,特許権,出願公開後の特許出願,実用新案権 又は 出願公開後の実用新案登録出願に抵触する

可能性があることに注意を喚起する。経済産業大臣 及び 日本工業標準調査会は,このような特許権,出願公開後の

特許出願,実用新案権 及び 出願公開後の実用新案登録出願にかかわる確認について,責任はもたない。

JIS X 3001

の規格群には,次に示す部編成がある。

JIS X 3001-1

:

2009

プログラム言語

Fortran —

1

部:基底言語

JIS X 3001-2

:

2002

プログラム言語

Fortran —

2

部:可変長文字列

JIS X 3001-3

:

2000

プログラム言語

Fortran —

3

部:条件付き翻訳

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

日 本 工 業 規 格

JIS

X 3001-1

: 2009

(

ISO

/

IEC 1539-1

: 2004

)

プ ロ グ ラ ム 言 語

Fortran —

1

部 : 基 底 言 語

Programming languages — Fortran —

Part 1: Base language

序文

この規格は,

2004

年に発行された

ISO/IEC 1539-1

を基に,技術的内容 及び 構成を変更することなく作成した

日本工業規格である。この規格は,複数の部からなる

Fortran

の規格の第

1

部である。この部によって規定された言

語は,非公式に

Fortran 2003

として知られている。

なお,下線を施してある用語は,この規格で定義する用語である。側線を施してある参考事項は,対応国際規格に

はない事項である。文字を小さくしてある箇所は,廃止予定事項である。

1

一般的規定要素

1.1

適用範囲

JIS X 3001

は,複数の部からなる規格とし,各部は別々に制定する。第

1

部であるこの規格は,

Fortran

基底言語

で表現するプログラムの形を規定し,その解釈を与える。この規格は,

Fortran

プログラムを種々の計算機システム上

で使用する場合の可搬性,信頼性,保守性 及び 実行効率を高めることを目的とする。第

2

部である

JIS X 3001-2

は,可変長文字列の操作に関する追加機能を規定する。第

3

部である

JIS X 3001-3

は,

Fortran

で用いられる条件

付き翻訳の機能を規定する。

JIS X 3001-1

に合致する処理系は,必ずしも

JIS X 3001-2

又は

JIS X 3001-3

合致していなくてもよいが,

JIS X 3001-2

又は

JIS X 3001-3

に合致する処理系はこの規格に合致していること

を前提とする。

注記

この規格の対応国際規格及びその対応の程度を表す記号を,次に示す。

ISO/IEC 1539-1

: 2004, Information technology — Programming languages — Fortran —

Part 1: Base language (IDT)

 なお,対応の程度を示す記号

(IDT)

は,

ISO/IEC Guide 21

に基づき,一致していることを示す。

1.2

処理系

この規格では,計算機システムとそこで用いるためにプログラムを変換する機構とを合わせたものを 処理系

(processor)

という。

1.3

規定事項

この規格は,次の事項を規定する。

(1)

Fortran

で書かれたプログラムの形。

(2)

プログラム 及び そのデータの意味を解釈する規則。

(3)

プログラムによって処理される入力データの形。

(4)

プログラムを使用した結果生成される出力データの形。

1.4

規定外事項

この規格は,次の事項を規定しない。

(1)

計算機システム上で使用するためにプログラムを変換する機構。

1

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

2

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

計算機システム上でプログラムを使用するときの準備 及び 制御のために必要な操作。

(3)

プログラム 及び その入出力データを記憶媒体へ 又は 記憶媒体から転記する方法。

(4)

この規格の規則では解釈を与えられないプログラム 及び 処理系の動作。ただし,

1.5

(

2

)

(

8

)

では,処理系の

検出能力 及び 報告能力が規定されている。

(5)

特定の計算機システムの容量 又は 特定の処理系の能力を超えるプログラム 及び そのデータの大きさ 又は 複

雑さ。

(6)

特定の処理系における量の表現の物理的性質 及び 数値の丸め,近似 又は 計算の方法。

(7)

入出力の記録,ファイル 及び 装置の物理的性質。

(8)

記憶の物理的性質 及び 実現法。

1.5

規格合致性

プログラム

(

2.2.1

)

は,ここに規定されている形 及び 関係だけを用いて書かれ,かつ それがこの規格に従った解

釈をもつとき,規格合致プログラム

(standard-conforming program)

という。プログラム単位

(

2.2

)

は,それを含む

プログラムが規格合致となるとき,この規格に規格合致しているという。

処理系は,次の能力をすべてもつとき,この規格に規格合致する。

(1)

ここで規定したとおりの解釈を満たすやり方で,あらゆる規格合致プログラムを実行する。ただし,処理系は,

プログラムの大きさ 又は 複雑さに制限を加えてもよい。

(2)

廃止予定事項

(

1.8.2

)

として規定された形を使用しているプログラム単位について,識別番号の付いた構文規則

及び 制約を引用して検出できるとき,その使用を検出し報告する能力をもつ。

(3)

識別番号の付いた構文規則 及び 制約によって認められていない拡張された形 又は 関係[

附属書

B

で規定する

廃止事項

(

1.8.1

)

を含む。]を使用しているプログラム単位について,その使用を検出し報告する能力をもつ。

(4)

処理系が実装していない種別型パラメタ値をもつ組込み型

(

4.4

)

を使用しているプログラム単位について,その

使用を検出し報告する能力をもつ。

(5)

箇条

3

で認められていないプログラム形式 又は 文字を使用しているプログラム単位について,その使用を検出

し報告する能力をもつ。

(6)

箇条

16

での名前,文番号,演算子 及び 代入記号の有効範囲の規則に反する形で名前を使用しているプログラ

ムについて,その使用を検出し報告する能力をもつ。

(7)

箇条

13

で名前が定義されていない組込み手続を使用しているプログラム単位について,その使用を検出し報告

する能力をもつ。

(8)

プログラムを受理しない理由を検出し報告する能力をもつ。

ただし,

FORMAT

(

10.1.1

)

の一部をなさない書式仕様において,処理系は,廃止事項 又は 廃止予定事項を使

用していること,及び 拡張された形 又は 関係を使用していることは,検出し報告しなくてもよい。

規格合致処理系は,拡張された形 及び 関係を許してもよいが,それらが規格で定められている形 及び 関係と矛

盾してはならない。ただし,規格合致プログラム中の手続の名前と矛盾する組込み手続は,追加してもよい。このよ

うな矛盾が起こった場合,処理系は,その名前が同じ有効域内で

EXTERNAL

属性

(

5.1.2.6

)

を与えられていない限

り,その組込み手続を用いる(箇条

16

参照)。規格合致プログラムは,処理系によって拡張された非標準組込み手

続 又は 非標準組込みモジュール を用いてはならない。

規格合致プログラムは,この規格の適用範囲外の事項を処理系に対して要求してもよく,また

Fortran

以外の手段

で定義された外部手続のような可搬性のない書き方を含むこともできるので,この規格における規格合致性は,プロ

グラムがすべての 又は 任意の規格合致処理系の上で同じように実行されることを保証するものではない。

この規格は,この規格で完全には規定していない機能の提供を許している。これらの機能は 処理系依存

(processor

dependent)

と呼ばれ,提供する場合には,その方法 又は 意味を処理系が定めなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

3

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

1.1

処理系には,次の

3

点についての文書が附属しているのが望ましい。

(1)

処理系の定めるプログラムの大きさ 及び 複雑さに関する制約,並びに その制約を超過した場

合に報告する方法

(2)

処理系が許す拡張された形 及び 関係

(3)

拡張された形 及び 関係の使用 並びに 廃止事項 又は 廃止予定事項の使用を報告する方法

(

の場合,廃止事項の使用は,拡張された形の使用に当たる。

)

処理系には,処理系依存の方法 又は 意味を定義する文書が附属しているのが望ましい。

1.6

互換性

JIS X 3001

-1982

及び

ISO 1539

: 1980

(非公式に

F

ORTRAN

77

と呼ばれている。)以降のそれぞれの

Fortran

規格では,それ以前の規格よりも多くの組込み手続を定義している。したがって,より古い規格に合致した

Fortran

のプログラムが,新しい組込み手続と同じ名前の手続を呼んでいる場合,新しい規格とは異なった解釈となる。ただ

し,手続が

EXTERNAL

属性をもつと指定してある場合は,同じ解釈となる。

1.6.1 Fortran 95

との互換性

次に示す点を除いて,この規格は,従来の

Fortran

の規格

JIS X 3001-1

: 1998

及び

ISO/IEC 1539-1

: 1997

Fortran 95

)の上位互換拡張になっている。

Fortran 95

の規格合致プログラムは,この規格に規格合致する。

Fortran

95

にあった次の機能は,この規格とは異なった解釈となる。

(1)

従来の

Fortran

の規格には,処理系依存の外部ファイル集合(空でもよい。)に対して,書式付き出力の

1

けた

目が特別な意味をもつという印字の概念があった。その集合を検出したり指定したりする手段は,規定されてい

なかった。最初のけたの解釈は,この規格では規定しない。

(2)

この規格は,並び出力 及び 変数群出力に出てくる実数

0

に対して,異なった出力形式を規定する。

(3)

この規格は,処理系が正の実数

0

と負の実数

0

とを区別できるとき,次の場合に異なった結果の値を要求する。

(a)

X

<

0

かつ

Y

の値が

0

で符号が負のときの

ATAN2(Y,X)

(b)

X

REAL(X)

<

0

となる複素数であって

X

の虚部が

0

で符号が負のときの

LOG(X)

及び

SQRT(X)

1.6.2 Fortran 90

との互換性

附属書

B.1

に示す廃止事項 及び次に示す点を除いて,この規格は,

JIS X 3001

-1994

及び

ISO 1539

: 1991

Fortran 90

)の上位互換拡張になっている。

Fortran 90

の規格合致プログラムは,廃止事項のいずれをも使用してい

ない限り,この規格に規格合致する。

この規格では,

INQUIRE

文の

PAD

指定子は,指定したファイルが装置に接続されていない 又は 書式なし入出力

に対して接続されている場合,

UNDEFINED

を返す。

Fortran 90

では

YES

を返す。

Fortran 90

では,

MOD

又は

MODULO

の第

2

引数が

0

のとき,結果は処理系依存である。この規格では,第

2

引数が

0

であってはならないと規定している。

1.6.3 F

ORTRAN

77

との互換性

附属書

B.1

に示す廃止事項 及び次に示す点を除いて,この規格は,

JIS X 3001

-1982

及び

ISO 1539

: 1980

F

ORTRAN

77

)の上位互換拡張になっている。

附属書

B.1

に示す廃止事項を使用していず,次に示す解釈の異な

る事項にも依存していない限り,

F

ORTRAN

77

の規格合致プログラムは,この規格に規格合致する。この規格では,

F

ORTRAN

77

においては処理系依存であった幾つかの事項に対して制限を設ける。したがって,

F

ORTRAN

77

の規格

合致プログラムが,これらの処理系依存事項を使用している場合,この規格では異なった解釈になりうるが,それで

もそのプログラムは,この規格に規格合致する。この規格において

F

ORTRAN

77

とは解釈の異なる事項を,次に示す。

(1)

F

ORTRAN

77

では,

DATA

文において倍精度実数型データの初期値として使われる定数が実数型の定数として表

現されている場合,処理系は,実数型データで表現できるよりも高い精度のデータを提供することが可能になっ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

4

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ていた。この規格では,それを認めていない。

(2)

共通ブロック中にない名前付き変数が

DATA

文で初期化され,その変数が

SAVE

属性をもたない場合,その

SAVE

属性の扱いは,

F

ORTRAN

77

では処理系依存となっていた。この規格では,この名前付き変数は

SAVE

性をもつ(

5.2.5

参照)。

(3)

F

ORTRAN

77

では,入力項目並びによって要求される文字の個数は,書式付き入力における記録中の文字の個数

を超えてはならなかった。この規格では,入力記録中の文字の個数が足りない場合,適切な

OPEN

文 及び

READ

文で値が

’NO’

である

PAD

指定子が指定されていない限り,その入力記録に論理的に空白を補う(

9.5.3.4.2

参照)。

(4)

書式付き出力文中の出力項目の値がゼロであるとき,幾つかの

G

形編集記述子では異なった形に編集される。更

に,この規格では値の丸めが出力欄の形にどのように作用するかを規定しているが,

F

ORTRAN

77

ではこの点を

規定していなかった。したがって,値と

G

形編集記述子とのある種の組合せに対して,ある

F

ORTRAN

77

の処

理系は,

Fortran 2003

の処理系と異なる出力をするかもしれない。

(5)

処理系が正の実数

0

と負の実数

0

とを区別できる場合,組込み関数

SIGN

の第

2

引数が負の実数

0

であるときの

振る舞いがこの規格では変更されている。

1.7

この規格での記述法

この規格では,

しなければならない

は要求事項と解釈し,

してはならない

は禁止事項と解釈する。特に断り

がない限り,この要求事項 及び 禁止事項は処理系にではなくプログラムに適用される。

1.7.1

補足要素

説明,根拠,例などのための補足要素がこの規格に混在している。これらの補足要素は,注記 又は 例として番号

付けされた四角い枠の中に明記されており,規定事項ではない。

1.7.2

構文規則

構文規則

(syntax rule)

は,

Fortran

の構文素,文 及び 構造構文の形を規定する。構文規則は,次の約束 及び 記

号による超言語を用いて記述する。

注記

この超言語は,

Backus-Naur

記法

(BNF)

を変形したものである。

(1)

Fortran

文字集合

(

3.1

)

中の文字は,特に断りがない限り,示されているとおりに解釈される。

(2)

英大文字,英小文字,日本語の文字 及び それらからなる語は,一般的な構文概念を示し,実際の文中ではそれ

が表す特定の構文要素で置き換えなければならない。構文概念の例を次に示す。

引数

属性

宣言

定義

記述子

整数

演算子

指定子

(3)

構文超記号の用法は,次による。

is

は,構文概念の定義を示す。

or

は,構文概念の代替を示す。

角括弧

[ ]

は,省略可能な要素を示す。

角括弧に続く省略記号

[ ] ...

は,角括弧中の要素が

0

回以上引き続いて現れてもよいことを示す。

黒四角

は,構文規則が続くことを示す。

(4)

各構文規則は,

R

snn

の形をした一意の識別番号をもつ。ここで,

s

1

けた 又は

2

けたの数字からなる箇条番

号とし,

nn

は箇条内の

2

けたの順序番号とする。構文規則は,本文の中では分散して配置されており,必要に

応じて識別番号によって参照される。箇条

2

及び

3

の幾つかの規則は,完全な規定が後続の箇条にある。その

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

5

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合には,箇条番号

s

は,規則が繰り返されている後続の箇条のものにしてある。

(5)

構文規則は,

Fortran

の完全かつ正確な構文記述ではないので,構文解析系を自動生成するために使用すること

はできない。構文規則が不完全な箇所では,それらの規則は関連した制約 及び 本文によって制限される。

1.2

構文規則の記述の例を次に示す。

数字列

is

数字

[

数字

] ...

この規則で許される数字列の形の例を次に示す。

数字

数字 数字

数字 数字 数字 数字

数字 数字 数字 数字 数字 数字 数字 数字

数字

が特定の要素に置き換わったときの実際の数字列は,次のようになる。

4

67

1999

10243852

1.7.3

制約

各制約は,

C

snn

の形をした一意の識別番号をもつ。ここで,

s

1

けた 又は

2

けたの数字からなる箇条番号とし,

nn

は箇条内の

2

けたの順序番号とする。

制約は通常,特定の構文規則と関連している。関連している場合,関連する構文規則の番号を括弧内に示す。構文

規則と関連している制約は,その規則によって定義された構文要素の定義の一部を構成する。これは,その構文要素

が現れるすべての場合に適用される。

幾つかの制約は,特定の構文規則と関連していない。そのような制約の効果は,処理系が制約の違反を検出し報告

する機能が要求されること

(

1.5

)

を除いて,本文で指定された制限の効果と同等とする。広義の要求事項は本文中で

規定し,その要求事項の一部は制約としても規定することがある。その場合,規格合致プログラムは,広義の要求事

項を満たしていなければならないが,規格合致している処理系は制約の違反を診断する機能をもつだけでよい。

1.7.4

暗黙の構文規則

構文規則 及び 制約の個数を最小に抑えるために,すべての構文概念

XYZ

に対して明示的な構文規則がない限

り,次の暗黙の規則を想定する。

R101

XYZ

並び

is

XYZ

[

,

XYZ

] ...

R102

XYZ

is

名前

R103

スカラ

XYZ

is

XYZ

C101

(R103)

スカラ

XYZ

は,スカラでなければならない。

1.7.5

構文の約束 及び 特色

(1)

で終わる任意の構文要素名は,プログラム形式の文の規則に従う。つまり,行の終了 又は セミコロンで区

切らなければならない。(

IF

文 又は

WHERE

文のような)他の文の一部を形成する場合を除いて,文番号を付

けてもよい。逆に,プログラム形式の文とみなされるすべてのものは,構文規則において,終わりが

となっ

ている。

(2)

文の順序に対する規則は,プログラム単位

(R202)

の定義中で厳密に規定する。式の階層は,式

(R722)

の定義中

で厳密に規定する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

6

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(3)

接尾辞

指定

は,通常,入出力文などの指定子として使う。更に,型宣言の属性(例えば,

R510

配列形状

指定

)としても使い,その他にも使うことがある。

(4)

括弧でくくられていて型パラメタを指すときは,接尾辞

選択子

を使う。例として,

文字長パラメタ選択

”(R425)

及び

種別型パラメタ選択子

”(R404)

がある。

(5)

用語

添字

(例えば,

R618, R619

及び

R620

)は,一貫して配列定義中で使う。

1.7.6

文章記述の約束

通常の本文においては,構文規則の用語と必ずしも同一ではない通常の単語を使うことがある。個々の文,個々の

属性,個々の指定子などは,例えば

“END

のように英大文字で示す。用語が特定の意味で最初に定義される箇所

では,下線を引き,英語を添えて示す。廃止予定事項は,文字を小さくして示す。

1.3

これが廃止予定事項で使われる文字の大きさである。

1.8

廃止事項 及び 廃止予定事項

この規格は,五つの廃止事項を除き

Fortran 90

の処理系依存ではない言語要素をすべて含むことによって,利用

者の財産である既存のソフトウェアを保護する。この規格は,時代遅れの事項を二つの区分で表現する。第

1

の区分

は,廃止事項

(deleted feature)

といい,

F

ORTRAN

77

において冗長だとみなされており,

Fortran 90

においてはほと

んど使われていない事項であり,この規格には五つある。第

2

の区分は,廃止予定事項

(obsolescent feature)

といい,

Fortran 90

及び

Fortran 95

において冗長だとみなされているが,まだ頻繁に使われているものである。

1.8.1

廃止事項の性質

(1)

F

ORTRAN

77

により良い方法が存在した。

(2)

この区分に属する事項は,

Fortran 95

及び

Fortran 2003

に含まれていない。

1.8.2

廃止予定事項の性質

(1)

Fortran 90

及び

Fortran 95

により良い方法が存在した。

(2)

プログラマは,新しいプログラム中ではより良い方法を使用し,既存のコードではそれらの方法で元のコードを

置き換えるのがよい。

(3)

廃止予定事項は,この規格の本文中で,小さい文字によって表現する(

1.7.6

参照)。

(4)

Fortran

プログラムにおけるこれらの事項の使用が重要でなくなったら,

Fortran

の改正原案作成委員会が次の

改正時にその事項の廃止を検討するのが望ましい。

(5)

次の

Fortran

の改正原案作成委員会は,廃止予定事項に指定されている言語事項だけの廃止を検討するのが望ま

しい。

(6)

Fortran

の処理系は,廃止予定事項が

Fortran

プログラムで広く使われている間は,それを実装するのが望ましい。

1.9

引用規格

次に掲げる規格は,この規格に引用されることによって,この規格の規定の一部を構成する。これらの引用規格は,

記載の年の版を適用し,その後の改正版(追補を含む。)は適用しない。

JIS X 0201

-1997

情報交換用符号

注記

対応国際規格:

ISO/IEC 646

: 1991, Information technology — ISO 7-bit coded character set for

information interchange (MOD)

JIS X 0301

-1992

日付及び時刻の表記

注記

対応国際規格:

ISO 8601

: 1988, Data elements and interchange formats — Information interchange

— Representation of dates and times (MOD)

JIS X 3010

: 2003

プログラム言語

C

注記

対応国際規格:

ISO/IEC 9899

: 1999, Programming Languages — C (IDT)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

7

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

JIS X 0221-1

: 2001

国際符号化文字集合

1

部:体系及び基本多言語面

注記

対応国際規格:

ISO/IEC 10646-1

: 2000, Information technology — Universal multiple-octet

coded character set (UCS) — Part 1: Architecture and basic multilingual plane (IDT)

これらの規格は廃止され,

JIS X 0221

: 2007

及び

ISO/IEC 10646

: 2003

が制定されている。

IEC 60559

(1989-01), Binary floating-point arithmetic for microprocessor systems.

ISO/IEC 646

: 1991

は国際規格であり,

ASCII

として知られている

ANSI X3.4

-1986

と一致している。

この規格は,

JIS X 3010

: 2003

を引用するとき,それと一致する

ISO/IEC 9899

: 1999

にちなんで,それを

言語

C

の国際規格

と呼ぶ。

IEC 60559

(1989-01)

の内容は,

IEEE 754

-1985 (Standard for binary floating-point arithmetic)

と技術的に同

一であり,この名前で広く知られているので,この規格では

“IEEE

国際規格

と呼ぶ。

2 Fortran

の用語 及び 概念

2.1

高水準構文

2.1

では,構造構文,文 及び 式の水準より高位の

Fortran

の概念に関連する構文,すなわちプログラム単位その他

を規定し,それらの関係を示す。この規格での記述法は,

1.7

による。

注記

2.1

R2

以外で始まる構文規則に関する制約 及び その他の情報は,適切な箇条に書く。

R201

プログラム

is

プログラム単位

[

プログラム単位

] ...

一つのプログラムは,主プログラムを一つだけプログラム単位として含むか,又は

Fortran

以外の手段で定義され

た主プログラムを一つだけ含んでいなければならない。ただし,これらの両方を含んでいてはならない。

R202

プログラム単位

is

主プログラム

or

外部副プログラム

or

モジュール

or

初期値設定プログラム単位

R1101

主プログラム

is

[ PROGRAM

]

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END PROGRAM

R203

外部副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

R1223

関数副プログラム

is

FUNCTION

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END FUNCTION

R1231

サブルーチン副プログラム

is

SUBROUTINE

[

宣言部

]

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

8

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

[

実行部

]

[

内部副プログラム部

]

END SUBROUTINE

R1104

モジュール

is

MODULE

[

宣言部

]

[

モジュール副プログラム部

]

END MODULE

R1116

初期値設定プログラム単位

is

BLOCK DATA

[

宣言部

]

END BLOCK DATA

R204

宣言部

is

[ USE

] ...

[ IMPORT

] ...

[

暗黙型宣言部

]

[

宣言構文

] ...

R205

暗黙型宣言部

is

[

暗黙型宣言部文

] ...

IMPLICIT

R206

暗黙型宣言部文

is

IMPLICIT

or

PARAMETER

or

FORMAT

or

ENTRY

R207

宣言構文

is

派生型定義

or

ENTRY

or

列挙体定義

or

FORMAT

or

引用仕様宣言

or

PARAMETER

or

手続宣言文

or

単純宣言文

or

型宣言文

or

文関数定義文

R208

実行部

is

実行構文

[

実行部構文

] ...

R209

実行部構文

is

実行構文

or

FORMAT

or

ENTRY

or

DATA

R210

内部副プログラム部

is

CONTAINS

内部副プログラム

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

9

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

[

内部副プログラム

] ...

R211

内部副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

R1107

モジュール副プログラム部

is

CONTAINS

モジュール副プログラム

[

モジュール副プログラム

] ...

R1108

モジュール副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

R212

単純宣言文

is

参照許可宣言文

or

ALLOCATABLE

or

ASYNCHRONOUS

or

BIND

or

COMMON

or

DATA

or

DIMENSION

or

EQUIVALENCE

or

EXTERNAL

or

INTENT

or

INTRINSIC

or

NAMELIST

or

OPTIONAL

or

POINTER

or

PROTECTED

or

SAVE

or

TARGET

or

VOLATILE

or

VALUE

R213

実行構文

is

単純実行文

or

ASSOCIATE

構文

or

CASE

構文

or

DO

構文

or

FORALL

構文

or

IF

構文

or

SELECT TYPE

構文

or

WHERE

構文

R214

単純実行文

is

ALLOCATE

or

代入文

or

BACKSPACE

or

CALL

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

10

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

CLOSE

or

CONTINUE

or

CYCLE

or

DEALLOCATE

or

ENDFILE

or

END FUNCTION

or

END PROGRAM

or

END SUBROUTINE

or

EXIT

or

FLUSH

or

FORALL

or

GO TO

or

IF

or

INQUIRE

or

NULLIFY

or

OPEN

or

ポインタ代入文

or

PRINT

or

READ

or

RETURN

or

REWIND

or

STOP

or

WAIT

or

単純

WHERE

or

WRITE

or

算術

IF

or

計算形

GO TO

C201

(R208)

実行部は,

END FUNCTION

文,

END PROGRAM

文 及び

END SUBROUTINE

文を含んで

はならない。

2.2

プログラム単位の概念

プログラム単位は,

Fortran

プログラムの基本的な構成要素とする。プログラム単位

(program unit)

は,主プログ

ラム,外部副プログラム,モジュール 又は 初期値設定プログラム単位のいずれかとする。副プログラムは,関数副プ

ログラム 又は サブルーチン副プログラムのいずれかとする。モジュールは,他のプログラム単位から参照可能とす

べき定義を含む。初期値設定プログラム単位は,名前付き共通ブロック中のデータ実体に初期値を指定するために用

いる。それぞれの種類のプログラム単位は,箇条

11

及び

12

による。外部副プログラム

(external subprogram)

は,

主プログラムにもモジュールにも他の副プログラムにも含まれない副プログラムとする。内部副プログラム

(internal

subprogram)

は,主プログラムに含まれるか,又は 他の副プログラムに含まれる副プログラムとする。モジュール副

プログラム

(module subprogram)

は,モジュールに含まれていて内部副プログラムではない副プログラムとする。

プログラム単位は,重なりのない有効域の集合からなる。一つの 有効域

(scoping unit)

は,次のいずれかとする。

(1)

一つのプログラム単位 又は 副プログラムから,その中に含まれる有効域を除いた部分。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

11

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

一つの派生型定義(

4.5.1

参照)。

(3)

一つの引用仕様本体から,その中に含まれる有効域を除いた部分。

他の有効域を直接に包む有効域を,親有効域

(host scoping unit)

[又は 親プログラム

(host)

]と呼ぶ。

2.2.1

プログラム

プログラム

(program)

は,一つの主プログラム,任意個(

0

個でもよい。)の他の種類のプログラム単位,並びに

Fortran

以外の手段で定義された任意個(

0

個でもよい。)の外部手続 及び 他の言語要素からなる。

注記

2.2

二つ以上の名前なし初期値設定プログラム単位があってはならない(

11.3

参照)。

この規格では,一つのプログラムを構成するプログラム単位の順序については何も要求しないが,モ

ジュール引用を処理する時にはモジュールの公開部分は利用可能になっていなければならない(

11.2.1

参照)ので,処理系は,プログラム単位の処理に特別の順序を要求してもよい。

2.2.2

主プログラム

Fortran

の主プログラムは,

11.1

による。

2.2.3

手続

手続

(procedure)

は,任意の処理の列をまとめたものであり,プログラムの実行中に直接呼び出すことができる。

手続は,関数 又は サブルーチンのいずれかとする。関数

(function)

は,式の中で呼び出される手続とする。関数が

呼び出されると,値が計算され,その値が式の評価に使われる。関数の値を返す変数を,結果変数

(result variable)

と呼ぶ。サブルーチン

(subroutine)

は,

CALL

文で,利用者定義代入文によって 又は 派生型要素に幾つかの操作を

することによって呼び出される手続とする。サブルーチンは,純粋手続でないとき,そのサブルーチンで参照可能な

データ実体の値を変更することによって,プログラムの状態を変更することができる。関数も,純粋手続でないとき,

関数値を計算するだけでなく,同様にしてプログラムの状態を変更することができる。

手続は,箇条

12

で更に規定する。

2.2.3.1

外部手続

外部手続

(external procedure)

は,外部副プログラムによって 又は

Fortran

以外の手段によって定義された手続と

する。外部手続は,主プログラムから 又は プログラムの任意の手続から呼び出すことができる。

2.2.3.2

モジュール手続

モジュール手続

(module procedure)

は,モジュール副プログラム

(R1108)

によって定義された手続とする。その

副プログラムを含むモジュールを,そのモジュール手続の親有効域とする。

2.2.3.3

内部手続

内部手続

(internal procedure)

は,内部副プログラム

(R211)

によって定義された手続とする。その内部副プログラ

ムを含む主プログラム 又は 副プログラムを,その内部手続の親有効域とする。内部手続は,親プログラムの有効域

及び 親プログラムの他のすべての内部手続の有効域の内部からは参照できるが,その他の場所からは参照できない。

この意味で,内部手続は,その親プログラムに対して局所的である。

2.2.3.4

引用仕様宣言

引用仕様本体

(interface body)

は,抽象引用仕様 又は 仮手続,外部手続,手続ポインタ 及び 型束縛手続の引用仕

様を定義する。

引用仕様宣言

(interface block)

は,個別引用仕様宣言,抽象引用仕様宣言 又は 総称引用仕様宣言とする。個別引

用仕様宣言は,引用仕様本体の集合とする。総称引用仕様宣言は,次のいずれかによって手続が起動されることを指

定するのにも使われる。

(1)

総称名の使用

(2)

利用者定義演算子の使用

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

12

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(3)

利用者定義代入の使用

(4)

派生型入出力

2.2.4

モジュール

モジュール

(module)

は,他のプログラム単位に参照させるべき定義を含むか,又は そのような定義を他のモジュー

ルから参照してくる。これらの定義には,データ実体宣言,型定義,手続定義 及び 引用仕様宣言がある。他のプロ

グラム単位中の有効域から,モジュールの中にある定義を参照することができる。モジュールは,箇条

11

で更に規

定する。

2.3

実行の概念

Fortran

のそれぞれの文は,実行文

(executable statement)

又は 非実行文

(nonexecutable statement)

のいずれか

に分類される。プログラム単位中に書く文の順序には制限があり,すべての実行文をすべての構文に書くことができ

るわけではない。

2.3.1

実行文 及び 非実行文

プログラムの実行は,動作の時系列とする。一つの実行文は,一つ以上のこれらの動作を実行 又は 制御する一つ

の命令とする。したがって,一つのプログラム単位中の実行文は,そのプログラム単位の振る舞いを決定する。実行

文は,実行構文という構文概念を構成しうるすべての文とする。

注記

ただし,

DATA

文 及び

FORMAT

文は,実行構文中に混在しうるが,実行文ではない。

非実行文は,動作を指定するのではなく,動作が行われるときのプログラム環境を指定するために用いる。非実行

文は,実行文として分類されないすべての文とする。

2.3.2

文の順序

2.1

の構文規則は,プログラム単位 及び 副プログラムの中での文の順序を指定する。これらの規則を,

2.1

及び

2.2

で説明する。

2.1

は,文の順序の規則を示し,すべてのプログラム単位,副プログラム 及び 引用仕様本体に

適用する。縦線は,混在できる文の種類を区切り,横線は,混在できない文の種類を区切る。内部副プログラム 又は

モジュール副プログラムは,

CONTAINS

文の後に書かなければならない。副プログラム中の

USE

文と

CONTAINS

文との間では,非実行文は,一般に実行文より前に書く。ただし,

ENTRY

文,

FORMAT

及び

DATA

は,実行文

の間に書いてもよい。

2.2

は,有効域中で許される文を示す。

2.1

文の順序

PROGRAM

文,

FUNCTION

文,

SUBROUTINE

文,

MODULE

文 又は

BLOCK DATA

USE

IMPORT

FORMAT

IMPLICIT NONE

及び

PARAMETER

IMPLICIT

ENTRY

PARAMETER

派生型定義,引用仕様宣言,型宣言文,

及び

列挙体定義,手続宣言,単純宣言文

DATA

及び 文関数定義文

DATA

実行構文

CONTAINS

内部副プログラム 又は モジュール副プログラム

END

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

13

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

2.2

有効域中で許される文

有効域の種類

主プロ

モジュ

初期値設定プ

外部副プ

モジュール副

内部副プ

引用仕

グラム

ール

b

)

ログラム単位

ログラム

プログラム

ログラム

様本体

USE

IMPORT

×

×

×

×

×

×

ENTRY

×

×

×

×

×

FORMAT

×

×

×

その他の宣言

a

)

DATA

×

派生型定義

引用仕様宣言

×

実行文

×

×

×

CONTAINS

×

×

×

文関数定義文

×

×

×

a

)

 ここで,その他の宣言とは,

PARAMETER

文,

IMPLICIT

文,型宣言文,列挙体定義,手続

宣言文 及び 単純宣言文とする。

b

)

 モジュールに含まれるモジュール副プログラムは,そのモジュールの有効域には含まれない。

2.3.3 END

END PROGRAM

文,

END FUNCTION

文,

END SUBROUTINE

文,

END MODULE

文 及び

END BLOCK

DATA

文を,

END

(END statement)

という。それぞれのプログラム単位,モジュール副プログラム 及び 内部副

プログラムは,ちょうど一つの

END

文をもたなければならない。

END PROGRAM

文,

END FUNCTION

文 及び

END SUBROUTINE

文は,実行文とし,飛び先文になりうる(

8.2

参照)。

END PROGRAM

文を実行すると,プロ

グラムの実行が終了する。

END FUNCTION

文 又は

END SUBROUTINE

文の実行は,

スカラ整数式をもたない

RETURN

文の実行と等価とする。

END MODULE

文 及び

END BLOCK DATA

文は,非実行文とする。

2.3.4

実行系列

プログラムが一つの

Fortran

主プログラムを含むとき,そのプログラムの実行は,主プログラムの最初の実行構文

から始まる。主プログラム 又は 副プログラムの実行は,その有効域中の実行構文の実行を意味する。手続が呼び出さ

れたときは,呼び出された入口点に続く最初の実行構文から実行が始まる。次の例外を除いて,実行の効果は,

STOP

文,

RETURN

文 又は

END

文が実行されるまで,実行構文が主プログラム 又は 副プログラムに書かれている順序

に従って実行されることとする。例外は,次のとおりとする。

(1)

飛越し文(

8.2

参照)の実行は,実行系列を変更する。飛越し文は,実行系列の新しい開始位置を明示的に指定

する。

(2)

CASE

構文,

DO

構文,

IF

構文 及び

SELECT TYPE

構文は,内部的な文構造を含み,これらの構造構文の実

行は,暗黙的に内部的な飛越しを伴う。これらのそれぞれの構造構文の詳細な意味規則は,箇条

8

による。

(3)

END

指定子,

ERR

指定子 及び

EOR

指定子は,飛越しを起こすことがある。

(4)

選択戻り指定子は,飛越しを起こすことがある。

内部副プログラムを主プログラム 又は 副プログラムの

END

文の前に書くことができる。そのような内部副プロ

グラムの定義は,親プログラムの実行系列には含まれない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

14

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

プログラムの実行は,

STOP

文 又は

END PROGRAM

文が実行されることによって正常終了する。また,連携処

理系(言語

C

の国際規格

5.1.2.2.3

及び

7.20.4.3

参照)で定義された手続の実行中に正常終了することもある。正

常終了が

Fortran

のプログラム単位の中で発生し,かつ そのプログラムが連携処理系で定義された手続を組み込んで

いるとき,実行終了の処理は

C

の関数

exit()

(言語

C

の国際規格

7.20.4.3

参照)を実行する効果をもつ。

2.4

データの概念

データ環境の特性を指定するために,非実行文を用いる。データ環境の特性の指定には,変数の型を指定すること,

配列を宣言すること 及び 新しい型を定義することが含まれる。

2.4.1

(type)

は,データの分類に名前を付けたものであり,値の集合,その値を記述する構文,及び その値を解釈し

操作する演算の集合で特性付けられる。この中心的な概念は,

4.1

による。

型は,パラメタ付けすることができ,パラメタ付けした場合には,データ値の集合,それらの値を記述する構文 及

び 演算の集合は,一つ以上のパラメタの値に依存する。そのようなパラメタを,型パラメタ

(type parameter)

と呼

ぶ(

4.2

参照)。

型は,組込み型 及び 派生型の二つに大別される。

2.4.1.1

組込み型

組込み型

(intrinsic type)

は,演算とともにこの言語で定義されている型とし,いつでも参照できる。組込み型は,

整数型

(

INTEGER

)

,実数型

(

REAL

)

,複素数型

(

COMPLEX

)

,文字型

(

CHARACTER

)

及び 論理型

(

LOGICAL

)

とする。組込

み型の性質は,

4.4

による。組込み型の型パラメタは,種別型パラメタ

(

KIND

)

及び 文字長パラメタ

(

LEN

)

とする。

種別型パラメタ

(kind type parameter)

は,整数型では

10

進指数範囲を示し(

4.4.1

参照),実数型 及び 複素数型

では

10

進精度 及び

10

進指数範囲を示し(

4.4.2

及び

4.4.3

参照),文字型 及び 論理型では表現方法を示す(

4.4.4

及び

4.4.5

参照)。文字長パラメタ

(character length parameter)

は,文字型における文字の個数を指定する。

2.4.1.2

派生型

派生型

(derived type)

は,この言語では定義されていない型とし,その成分を宣言するために型定義を必要とする。

そのような派生型のスカラ実体を 構造体

(structure)

と呼ぶ(

5.1.1.1

参照)。派生型は,パラメタ付けすることがで

きる。構造体の代入は,組込みとして規定しているが(

7.4.1.3

参照),構造体のための組込み演算は規定しない。そ

れぞれの派生型では,構造体構成子によって値を用意することができる(

4.5.9

参照)。更に,派生型のデータ実体は,

手続の引数 及び 関数の結果として使用することができ,入出力項目並び中に書くこともできる。派生型のための演

算を追加する場合には,手続の定義として与えなければならない。

派生型は,

4.5

で更に規定する。

2.4.2

データの値

それぞれの組込み型は,その型パラメタの値に応じて,その型のデータがもつことのできる値の集合と関連付けら

れている。それぞれの組込み型の値は,

4.4

による。派生型の実体がとることのできる値は,その型定義,型パラメ

タ値 及び その成分の値の集合によって決定される。

2.4.3

データ要素

データ要素

(data entity)

は,データ実体,式の評価の結果 及び 関数引用の実行の結果(関数結果と呼ぶ。)とす

る。データ要素は,型 及び 型パラメタをもち,不定の変数でなければデータの値をもつ。すべてのデータ要素は,次

元数をもち,したがってスカラ 又は 配列とする。

2.4.3.1

データ実体

データ実体

(data object)

は,定数(

4.1.2

参照),変数(箇条

6

参照)及び 部分定数とし,省略して 実体

(object)

と呼ぶことがある。名前付きデータ実体の型 及び 型パラメタは,明示的に(

5.1

参照)又は 暗黙的に(

5.3

参照)指

定することができる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

15

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

部分実体

(subobject)

は,名前付き実体の一部分とし,他の部分とは独立に引用することができ,変数の場合には

他の部分とは独立に確定することもできる。部分実体には,配列の一部分すなわち配列要素 及び 部分配列,文字列

の一部分すなわち部分列,複素数実体の一部分すなわち実部 及び 虚部,並びに 構造体の一部分すなわち成分が含ま

れる。部分実体はそれ自体もデータ実体とするが,部分実体は実体特定子 及び 組込み関数によってだけ参照される。

変数の部分実体は,変数とする。部分実体は,箇条

6

による。

名前によって参照される実体は,次のとおりとする。

名前付きスカラ

(スカラ実体)

名前付き配列

(配列実体)

部分実体特定子によって参照される部分実体は,次のとおりとする。

配列要素

(スカラ部分実体)

部分配列

(配列部分実体)

構造体成分

(スカラ部分実体 又は 配列部分実体)

部分列

(スカラ部分実体)

複素数実体の部分実体は,組込み関数によっても参照することができる。

2.4.3.1.1

変数

変数

(variable)

は,値をもつことができ,プログラムの実行の間に,確定したり再確定したりすることができる。

モジュール,主プログラム 及び 副プログラムの有効域にある名前付き局所変数

(local variable)

は,その有効域

の局所要素である名前付き変数とする。その名前付き局所変数は,仮引数ではなく,

COMMON

文の中にも現れず,

BIND

属性ももたず,参照結合 及び 親子結合で参照されることもない。名前付き局所変数の部分実体も,局所変数

とする。

2.4.3.1.2

定数

定数

(constant)

は,値をもち,プログラムの実行の間に確定したり再確定したり不定にしたりすることはできな

い。名前をもつ定数は,名前付き定数

(named constant)

と呼び,

PARAMETER

属性をもつ(

5.1.2.10

参照)。名前

をもたない定数は,定数表現

(literal constant)

と呼ぶ(

4.4

参照)。

2.4.3.1.3

部分定数

部分定数

(subobject of a constant)

は,定数の一部分とする。引用される部分は,変数の値に依存してもよい。

2.3

変数の値に依存する部分定数

CHARACTER (LEN = 10), PARAMETER :: DIGITS = ’0123456789’

CHARACTER (LEN = 1)

:: DIGIT

INTEGER :: I

...

DIGIT = DIGITS (I:I)

DIGITS

は名前付き定数であり,

DIGITS(I:I)

DIGITS

の部分定数を特定する。

2.4.3.2

(expression)

は,評価されるとデータ要素を生成する(

7.1

参照)。式は,データ引用 又は 計算処理を表現する

ものであり,演算対象,演算子 及び 括弧からなる。式の結果の型,型パラメタ,値 及び 次元数は,箇条

7

の規則

による。

2.4.3.3

関数引用

関数引用

(function reference)

は,式の評価の間に関数を実行してデータ要素を生成する(

12.4.2

参照)。関数結果

の型,型パラメタ 及び 次元数は,その関数の引用仕様によって決定される(

12.2.2

参照)。関数結果の値は,その

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

16

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

関数の実行によって決定される。

2.4.4

スカラ

スカラ

(scalar)

は,配列でないデータとする。スカラは,いかなる組込み型 又は 派生型でもありうる。スカラの

次元数

(rank)

は,ゼロとする。スカラの形状は,大きさゼロの

1

次元配列によって表現される。

注記

2.4

構造体は,成分として配列をもっていてもスカラとする。

2.4.5

配列

配列

(array)

は,すべてが同じ型 及び 同じ型パラメタをもつスカラデータの集合とし,それらの要素を四角い形に

配置したものとする。配列要素

(array element)

は,配列中の個々の要素の一つとし,スカラとする。部分配列

(array

section)

は,配列の一部の要素からなる部分集合とし,それ自体も配列とする。

配列は,

7

次元までの次元をもつことができ,どの次元も任意の 寸法

(extent)

,すなわち要素の個数をもつことが

できる。配列の 次元数

(rank)

は,次元の個数とする。配列の 大きさ

(size)

は,要素の総数とし,寸法の積に等しい。

配列は,大きさがゼロであってもよい。配列の 形状

(shape)

は,その次元数 及び 各次元の寸法によって決定され,そ

れらの寸法を要素とする

1

次元配列として表現することができる。名前付き配列はすべて宣言しなければならず,名

前付き配列の次元数はその宣言で指定される。名前付き配列の次元数は,いったん宣言されると一定であるが,寸法

は一定であってもよいし,実行中に変化してもよい。

二つの配列は,同じ形状をもつとき,形状適合

(conformable)

であるという。スカラは,任意の配列に形状適合し

ているとみなす。スカラ実体に対して定義されている組込み演算は,形状適合する実体間にも適用できる。そのよう

な演算は,要素同士に実行することによって,演算対象の配列に形状適合する配列の結果を生成する。要素同士の演

算とは,演算対象の配列中の対応する要素同士がスカラ演算されて結果の配列中の対応する要素を生成し,そのよう

な要素ごとの演算がいかなる順序で実行されても同時に実行されてもよいことを意味する。このような演算を要素別

処理演算

(elemental operation)

という。

1

次元配列は,スカラ 及び 他の配列から構成することができ,許されるどのような形状の配列にも変形すること

ができる(

4.7

参照)。

配列は,いかなる組込み型 又は 派生型でもありうる。配列は,

6.2

で更に規定する。

2.4.6

ポインタ

データポインタ

(data pointer)

は,

POINTER

属性をもつデータ要素とする。手続ポインタ

(procedure pointer)

は,

POINTER

属性をもつ手続要素とする。ポインタ

(pointer)

は,データポインタ 又は 手続ポインタのいずれか

とする。

ポインタは,ポインタ代入(

7.4.2

参照)によって 指示先

(target)

と結合されて 指示状態

(pointer associated)

なる。データポインタは,割付け(

6.3.1

参照)によって指示先と結合されて指示状態になってもよい。ポインタは,

NULLIFY

文の実行の結果として,空状態のポインタとのポインタ代入の結果として,暗黙的初期値指定によって,

又は 明示的初期値指定によって 空状態

(disassociated)

になる。データポインタは,

DEALLOCATE

文の実行によっ

ても, 空状態

(disassociated)

になることがある。空状態のポインタは,指示先と結合していない(

16.4.2

参照)。

結合していないポインタは,引用も確定もしてはならない。

データポインタが配列であるときは,次元数は宣言されるが,寸法はそのポインタが指示先と結合した時に決まる。

2.4.7

記憶場所

この規格で定める多くの機能は,データ実体の記憶場所の物理的な特性を何も想定していない。しかし,記憶列結

合に依存する事項を含むプログラム単位は,

16.4.3

で規定する記憶域の制約を守らなければならない。

2.5

基本用語

この規格の目的のために,この箇条で用語を定義する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

17

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

2.5.1

名前 及び 特定子

名前

(name)

は,プログラム単位,名前付き変数,名前付き定数,仮引数,派生型などの,プログラムの構成要素

を識別するために用いる。名前の構成を規定する規則は,

3.2.1

による。特定子

(designator)

は,ゼロ個以上の成分

選択子,部分配列選択子,配列要素選択子 又は 部分列選択子を続けたものとする。

実体特定子

(object designator)

は,データ実体に対する特定子とする。手続特定子

(procedure designator)

は,手

続に対する特定子とする。

注記

2.5

実体名は,実体特定子の特別な場合である。

2.5.2

キーワード

キーワード

(keyword)

という用語は,次の

2

通りに用いる。

(1)

文の構文規則に現れる単語をつづるために用いる。それらのキーワードは,予約語ではない。すなわち,同じつ

づりをもった名前が許される。構文規則では,そのようなキーワードをつづりどおりに書く。規格中で,この意味

の用語は,修飾語を付けずに

キーワード

と書く。キーワードの例としては,

IF

READ

UNIT

KIND

INTEGER

などがある。

(2)

並びにある項目を名前で識別するために用いる。それらの項目は,実引数並び,型パラメタ並び 及び 構造体構

成子の中で,並び中の位置による代わりに,先行する

キーワード

=

によって識別してよい。引数キーワード

(argument keyword)

は,引用される手続の引用仕様内の仮引数名とする。型パラメタキーワード

(type parameter

keyword)

は,指定される型の型パラメタ名とする。成分キーワード

(component keyword)

は,構造体構成子の

成分名とする。

R215

キーワード

is

名前

注記

2.6

並びの中で位置によって項目を識別するよりも,キーワードを使用したほうが読みやすく,並び

中の順序を変えることもできる。これによって,並びの宣言の一部の項目を省略することもできる。

2.5.3

結合

結合

(association)

は,名前結合(

16.4.1

参照),ポインタ結合(

16.4.2

参照),記憶列結合(

16.4.3

参照)又は

継承結合(

16.4.4

参照)のいずれかとする。名前結合は,引数結合,親子結合,参照結合,他言語結合 又は 構文結

合のいずれかとする。

記憶列結合は,異なる要素に同じ記憶場所を使用させる。どの結合も,一つの要素を,同じ有効域内での異なる名

前によって識別したり,異なる有効域内での同じ名前 又は 異なる名前によって識別したりできるようにする。

2.5.4

宣言

宣言

(declaration)

という用語は,いろいろな言語要素の属性の指定に対して用いる。多くの場合,これは,名前付

きデータ実体の型を指定するか,又は 名前付き配列実体の形状を指定する。

2.5.5

定義

定義

(definition)

という用語は,次の

2

通りに用いる。

(1)

派生型の宣言 及び 手続の宣言を意味する。

(2)

プログラムの実行中に有効な値が実体に与えられることとし,このときその実体は 確定

(defined)

になるという。

これは,しばしば代入文 又は 入力文の実行によってなされる。変数が想定できるような値をもたないとき,そ

のような変数は,不定

(undefined)

であるという。同様に,ポインタが指示先と結合するか,又は 空状態になる

とき,そのポインタの結合状態は 確定

(defined)

になるという。ポインタの結合状態が想定できない状態のとき,

そのポインタの結合状態は不定

(undefined)

であるという。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

18

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

変数が確定になったり不定になったりする要因は,箇条

16

による。

2.5.6

引用

データ実体引用

(data object reference)

とは,実行中のその時点での値を要求する形でデータ実体特定子を書くこ

ととする。

手続引用

(procedure reference)

とは,その時点での手続の実行を要求する形で手続特定子,演算子記号 又は 代入

記号を書くこととする。利用者定義の派生型入出力(

10.6.5

参照)又は 利用者定義の派生型後始末(

4.5.5.1

参照)

が行われることも,手続引用とする。

データ実体特定子 又は 手続特定子を実引数並び中に書いても,それは,その実引数の指定を完全にするために引

用が必要な場合を除いて,そのデータ実体 又は その手続の引用とはみなさない。

モジュール引用

(module reference)

とは,

USE

文にモジュール名を書くこととする(

11.2.1

参照)。

2.5.7

組込み

組込み

(intrinsic)

という修飾語は,次の

2

通りの意味をもつ。

(1)

修飾された用語の表す言語要素がこの規格中で定義されていることを意味する。

組込み

は,型,手続,代入

及び 演算子を修飾する。すべての組込み型,組込み手続,組込み代入 及び 組込み演算子は,どの有効域におい

ても何らの定義も指定もなしに使用することができる。組込みモジュールは,参照結合によって参照できる。こ

の規格中で定義されている組込み手続 及び 組込みモジュールは,それぞれ標準組込み手続 及び 標準組込みモ

ジュールと呼ばれる。

(2)

処理系が提供するが,この規格中で定義されていない手続 又は モジュールを修飾する(箇条

13

14

及び

15.1

参照)。そのような手続 及び モジュールは,それぞれ非標準組込み手続 及び 非標準組込みモジュールと呼ぶ。

2.5.8

演算子

演算子

(operator)

は,一つ(単項演算子の場合)又は 二つ(

2

項演算子の場合)のデータ値すなわち演算対象

(operand)

に対する計算処理を指定する。この規格は,幾つかの組込み演算子(例えば,数値演算対象に対する算術

演算子

+

-

*

/

及び

**

,論理演算対象に対する論理演算子

.AND.

.OR.

など)を指定する。プログラム中で,演

算子を追加して定義することもできる(

7.1.3

参照)。

2.5.9

(sequence)

は,番号

1

,

2

, . . . , n

1

1

に対応させて順序付けられた集合とする。ここで,

n

は,列の要素の

個数とする。列は,空であってもよい。空の列には,要素がない。

空でない列の要素を,

1

番目の要素,

2

番目の要素,… という。

n

を列の要素の個数とするとき,

n

番目の要素を

最後の要素という。空の列には,

1

番目の要素も最後の要素もない。

2.5.10

連携処理系

処理系は,一つ以上の連携処理系をもつ。連携処理系

(companion processor)

は,大域的なデータ 及び 手続を引

用したり確定したりできる,処理系依存の機構とする。連携処理系は,

Fortran

以外の手段(

12.5.3

参照)によって,

そのような言語要素を引用 及び 確定する機構であってもよい。その処理系は,その

Fortran

処理系自体であっても,

他の

Fortran

処理系であってもよい。二つ以上の連携処理系がある場合,

Fortran

処理系がそれらの中から選択する

手段は,処理系依存とする。

手続が,その

Fortran

処理系自体ではない連携処理系によって定義される場合,この規格は,その手続を定義する

C

関数を引用する。ただし,手続を言語

C

によって定義する必要はない。

注記

2.7

連携処理系は,言語

C

の国際規格に合致する機構であってもなくてもよい。

例えば,処理系は,言語

C

の国際規格の

6.7.5.3

で規定している

C

原型で記述することができる

限り,

Fortran

及び

C

以外の言語で定義された手続を呼び出してもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

19

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3

文字,構文素 及び プログラム形式

箇条

3

では,

Fortran

文字集合,及び 名前,演算子などの様々な構文素を規定する。更に,

Fortran

プログラムの

形式の規則についても規定する。

3.1

処理系の文字集合

処理系の文字集合は,処理系依存とする。処理系の文字集合の構成は,次のとおりとする。

(1)

制御文字

(control character)

(2)

図形文字

(graphic character)

(a)

英字(

3.1.1

参照)

(b)

数字(

3.1.2

参照)

(c)

下線(

3.1.3

参照)

(d)

特殊文字(

3.1.4

参照)

(e)

その他の文字(

3.1.5

参照)

Fortran

文字集合

(Fortran character set)

は,英字,数字,下線 及び 特殊文字からなる。

R301

文字

is

英数字下線

or

特殊文字

R302

英数字下線

is

英字

or

数字

or

下線

文字として使用する図形は,通貨記号を除いて,

3.1.1

3.1.2

3.1.3

及び

3.1.4

で規定してあるものでなければ

ならない。しかし,図形の様式は,定義しない。

基本文字型は,

Fortran

文字集合を包含する文字集合を提供しなければならない。処理系は,基本文字型でない文

字型を提供することによって,追加の文字集合を提供してもよい。

ASCII

及び

ISO 10646

文字集合で利用可能な文

字は,それぞれ

JIS X 0201

-1997

及び

JIS X 0221-1

: 2001 UCS-4

で規定されている。他の基本文字型でない文

字型で利用可能な文字については,この規格では規定しない。ただし,基本文字型でない文字型においても,処理系

は,空白詰めのための空白文字として一つの文字を特定しておかなければならない。

3.1.1

英字

26

個の 英字

(letter)

は,次のとおりとする。

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

英字の集合は,構文概念としての英字を定義する。処理系の文字集合には,英小文字 及び 英大文字を含まなけれ

ばならない。英小文字は,プログラム中の文字文脈(

3.3

参照)の中を除いて,対応する英大文字と等価とする。

注記

3.1

次に示す文は等価である。

CALL BIG_COMPLEX_OPERATION (NDATE)

call big_complex_operation (ndate)

Call Big_Complex_Operation (NDate)

3.1.2

数字

10

個の 数字

(digit)

は,次のとおりとする。

0 1 2 3 4 5 6 7 8 9

これらは,構文概念としての数字を定義する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

20

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.1.3

下線

下線は,名前において意味のある文字として使用することができる。

R303

下線

is

3.1.4

特殊文字

特殊文字

(special character)

は,

3.1

のとおりとする。

3.1

特殊文字

文字

文字の名称

文字

文字の名称

空白

;

セミコロン

=

等号

!

感嘆符

+

正符号

"

引用符

-

負符号

%

パーセント記号

*

星印

&

アンド記号

/

斜線

~

チルド

\

逆斜線

<

小記号

(

左括弧

>

大記号

)

右括弧

?

疑問符

[

左角括弧

アポストロフィ

]

右角括弧

低アクセント

{

左波括弧

^

山記号

}

右波括弧

|

縦線

,

コンマ

$

通貨記号

.

小数点 又は ピリオド

#

番号記号

:

コロン

@

単価記号

特殊文字は,構文概念として特殊文字を定義する。特殊文字の幾つかは,演算子,括弧類,他の構文素の区切り記

号などとして使用する。

3.1.5

その他の文字

処理系によっては,その他の文字が表現可能であってもよいが,注釈

(

3.3.1.1

3.3.2.1

)

,文字定数

(

4.4.4

)

,入出

力記録

(

9.1.1

)

及び 文字列編集記述子

(

10.2.1

)

にだけ指定することができる。

3.2

低水準構文

低水準構文

(low-level syntax)

は,プログラム単位の基本的な構文素を規定する。構文素

(lexical token)

は,プロ

グラムを構成する要素としての文字の列とする。構文素は,キーワード,名前,複素定数表現以外の定数表現,演算

子,文番号,括弧類,コンマ,

=

=>

:

::

;

及び

%

とする。

3.2.1

名前

名前

(name)

は,変数,プログラム単位,仮引数,名前付き定数,派生型などの各種の言語要素に使用する。

R304

名前

is

英字

[

英数字下線

] ...

C301

(R304)

名前の最大の長さは,

63

文字とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

21

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.2

名前の例

A1

NAME_LENGTH

(一つの下線)

S_P_R_E_A_D__O_U_T

(二つの連続する下線)

TRAILER_

(最後の下線)

注記

3.3

名前

という用語は,いつもこの特定の構文形式を示している。

識別子

という用語は,言語

要素が他の構文形式 又は 値によって識別される箇所で使う。その特定の意味は,使われる文脈に依

存する。

3.2.2

定数

R305

定数

is

定数表現

or

名前付き定数

R306

定数表現

is

整定数表現

or

実定数表現

or

複素定数表現

or

論理定数表現

or

文字定数表現

or

10

進定数表現

R307

名前付き定数

is

名前

R308

整定数

is

定数

C302

(R308)

整定数は,整数型でなければならない。

R309

文字定数

is

定数

C303

(R309)

文字定数は,文字型でなければならない。

3.2.3

演算子

R310

組込み演算子

is

べき乗演算子

or

乗除演算子

or

加減演算子

or

連結演算子

or

関係演算子

or

否定演算子

or

論理積演算子

or

論理和演算子

or

論理等否演算子

R707

べき乗演算子

is

**

R708

乗除演算子

is

*

or

/

R709

加減演算子

is

+

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

22

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

-

R711

連結演算子

is

//

R713

関係演算子

is

.EQ.

or

.NE.

or

.LT.

or

.LE.

or

.GT.

or

.GE.

or

==

or

/=

or

<

or

<=

or

>

or

>=

R718

否定演算子

is

.NOT.

R719

論理積演算子

is

.AND.

R720

論理和演算子

is

.OR.

R721

論理等否演算子

is

.EQV.

or

.NEQV.

R311

利用者定義演算子

is

利用者定義単項演算子

or

利用者定義

2

項演算子

or

拡張組込み演算子

R703

利用者定義単項演算子

is

.

英字

[

英字

] ...

.

R723

利用者定義

2

項演算子

is

.

英字

[

英字

] ...

.

R312

拡張組込み演算子

is

組込み演算子

3.2.4

文番号

文番号は,個々の文を参照する手段を与える。

R313

文番号

is

数字

[

数字

[

数字

[

数字

[

数字

] ] ] ]

C304

(R313)

文番号の少なくとも一つの数字は,

0

以外でなければならない。

文が文番号をもつとき,その文は,空白以外の文字を含まなければならない。一つの有効域中の二つ以上の文に対

して,同じ文番号を与えてはならない。先行する数字

0

は,文番号を区別する上では意味がない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

23

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.4

次の三つの文番号のうち,後の二つは等価になる。

99999

10

010

文番号は

99999

種類あり,処理系は,それらのいずれをも文番号として受け入れなければならない。

しかし,処理系は,一つのプログラム単位中の異なる文番号の個数について,実装上の制限をもって

もよい。

幾つかの文は,文番号をもつ。文番号は,次の場合にだけ利用できる。

(1)

飛び先文(

8.2

参照)の文番号は,その文が分岐可能な飛び先であることを識別するために用いる。

(2)

FORMAT

文(

10.1.1

参照)の文番号は,その文がデータ転送文(

9.5

参照)に対する書式仕様であることを識

別するために用いる。

(3)

DO

構文(

8.1.6

参照)の幾つかの形において,

DO

構文の範囲は,その範囲内にある最後の文の文番号によって

識別される。

3.2.5

括弧類

括弧類

(delimiter)

は,構文並びをくくるために使用する。次の組は,括弧類とする。

(

……

)

/

……

/

[

……

]

(/

……

/)

3.3

プログラム形式

プログラム単位は,

Fortran

の文,注釈 及び

INCLUDE

行から構成される一つ以上の行の列とする。文

(statement)

は,一つ以上の完全な行 又は 部分的な行の列とする。行

(line)

は,任意の文字の列とする。プログラム単位の

END

文に続く行は,そのプログラム単位に含まれない。

文字文脈

(character context)

とは,文字定数表現

(

4.4.4

)

又は 文字列編集記述子

(

10.2.1

)

の中の文字とする。

注釈は,任意の文字文脈に指定できる任意の文字を含んでもよい。

自由形式

及び 固定形式の二つ

の プログラム形式

(source form)

を定める。

自由形式 及び 固定形式は,一つのプログラム単位中で混在させ

てはならない。プログラム単位のプログラム形式を指定する方法は,処理系依存とする。

3.3.1

自由形式

自由形式

(free source form)

では,一つの文(又は 文の一部)は,一つの行中のどこに書いてもよい。一つの行に,

文字を一つも含まなくてもよい。一つの行が基本文字型の文字

(

4.4.4

)

だけで構成されるとき,その行には最大

132

個の文字を含むことができる。一つの行に基本文字型でない文字を含むとき,その行に書くことができる最大の文字

数は,処理系依存とする。

文字文脈 及び 書式仕様中を除き,一つの構文素の途中に空白文字を書いてはならない。空白は,読みやすくする

ために,構文素の間に自由に挿入できる。例えば,複素定数表現を形成する構文素の間に空白を挿入してもよい。文

字文脈以外での空白列は,一つの空白文字と等価とする。

名前,定数 又は 文番号を,隣接するキーワード,名前,定数 又は 文番号から分離するために,これらの間には空

白を挿入しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

24

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.5

次の

REAL

READ

30

及び

DO

の後ろに空白が必要である。

REAL X

READ 10

30 DO K=1,3

隣接するキーワードの間には,一つ以上の空白を用いなければならない。ただし,次の場合は空白が省略できる。

分離のための空白が省略できるキーワード

BLOCK DATA

DOUBLE PRECISION

ELSE IF

ELSE WHERE

END ASSOCIATE

END BLOCK DATA

END DO

END ENUM

END FILE

END FORALL

END FUNCTION

END IF

END INTERFACE

END MODULE

END PROGRAM

END SELECT

END SUBROUTINE

END TYPE

END WHERE

GO TO

IN OUT

SELECT CASE

SELECT TYPE

3.3.1.1

自由形式での注釈

文字

!

は,それが文字文脈中に指定される場合を除いて,注釈

(comment)

の開始とする。注釈は,行の終わり

までとする。行の空白でない最初の文字が

!

であるとき,その行は,注釈行とする。空白だけの行 及び 文字を含

まない行も,注釈行とする。注釈は,プログラム単位中の任意の場所にあってもよく,プログラム単位の最初の文よ

り前にあってもよいし,プログラム単位の最後の文より後ろにあってもよい。注釈は,プログラム単位の解釈に影響

を与えない。

注記

3.6

連続する注釈行の行数に制限はない。

3.3.1.2

自由形式での文の継続

文字

&

は,現在の行を注釈行でない次の行に継続することを示す。注釈行は,継続することができない。つまり,

注釈の中の

&

は,効果をもたない。継続された文(前の行)の中に注釈を書いてもよい。

&

は,継続として使用

するとき,文の一部ではない。空白でない文字が一つの

&

だけの行,又は 注釈の開始を示す

!

の前の空白でな

い文字が一つの

&

だけの行を書くことはできない。

文字文脈でない部分を継続する場合,

&

は,その行の空白でない最後の文字であるか,又は

!

の前の空白でな

い最後の文字であるかのいずれかでなければならない。このとき,注釈行でない後続の行がなければならず,文はそ

の後続の行に継続する。その行の空白でない最初の文字が

&

のとき,文はその

&

に続く次の文字位置に継続し,

それ以外のとき,その行の最初のけたに継続する。

構文素が行の終わりで分断されるとき,注釈行でない次の行の空白でない最初の文字は,

&

でなければならず,そ

の直後に分断された構文素の続きの文字を書かなければならない。

文字文脈を継続する場合,

&

は,その行の空白でない最後の文字でなければならず,注釈を続けてはならない。

このとき,注釈行でない後続の行がなければならず,その後続の行の空白でない最初の文字は,

&

でなければなら

ない。また,その文は,その

&

に続く文字に継続する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

25

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.3.1.3

自由形式での文の終了

文が継続しない場合,注釈 又は 行の終わりで,その文は終了する。

文は,文字文脈の中 又は 注釈の中以外に現れる文字

;

で終了してもよい。その

;

は,文の一部ではない。文

末記号

;

の後に,他の文が同じ行に現れてもよいし,その行で始まって継続してもよい。文末記号

;

は,行中の

空白でない最初の文字であってはならない。文末記号

;

の後ろに

0

個以上の空白 及び

1

個以上の

;

が続く場合,

順序にかかわらず,それらは一つの文末記号

;

と等価とする。

3.3.1.4

自由形式での文

文番号は,他の文の部分とならない任意の文の前に付けることができる。

注記

3.7

数字で始まる

Fortran

の文はない。

文は,

255

行を超える継続行をもってはならない。

3.3.2

固定形式

固定形式

(fixed source form)

では,一つの行の中で一つの文を書くことのできる位置には制約がある。一つの行が基本文字型の文字だけを含むとき,それはちょ

うど

72

文字でなければならない。それ以外のとき,文字の最大数は,処理系依存とする。

文字文脈以外では,空白は,意味をもたず,プログラム内のあらゆるところで自由に使用してよい。

3.3.2.1

固定形式での注釈

文字

!

は,文字文脈の中 又は 第

6

けたに現れる場合を除いて,注釈

(comment)

の開始とする。注釈は,その行の終わりまでとする。行の空白でない最初の

文字が,第

6

けた以外の任意のけたに現れた

!

であるとき,その行は注釈行とする。 第

1

けたが

C

又は

*

で始まる行 及び 空白だけからなる行も,注釈行

とする。注釈は,プログラム単位の任意の場所に現れてもよく,プログラム単位の最初の文の前又は 最後の文の後ろに現れてもよい。注釈は,プログラム単位の解釈

に影響を与えない。

注記

3.8

連続する注釈行の行数に制限はない。

3.3.2.2

固定形式での文の継続

注釈の中を除き,第

6

けたは,継続を示すために使用する。第

6

けたが空白 又は 数字

0

であるとき,その行は,第

7

けたから始まる新しい文の開始行とする。

6

けたが空白でもなく数字

0

でもないとき,その行の第

7

72

けたは,先行する注釈でない行の継続行とする。

注記

3.9

6

けたの

!

又は

;

は,第

1

けたの

C

若しくは

*

,又は 第

1

5

けたの

!

によって指示される注釈中に現れた場合以外

は,継続の指示として解釈する

)

注釈行は,継続することができない。注釈は,継続される文(前の行)の中に書いてもよい。

3.3.2.3

固定形式での文の終了

文が継続しない場合,注釈 又は 行の終わりで,その文は終了する。

文は,文字文脈の中,注釈の中 又は 第

6

けた以外に現れる文字

;

で終了してもよい。その

;

は,文の一部ではない。文末記号

;

の後に,他の文が同じ行

に現れてもよいし,その行で始まって継続してもよい。文末記号

;

は,第

6

けたに現れる場合を除いて,行中の空白でない最初の文字であってはならない。

0

個以

上の空白 及び

1

個以上の

;

が続く場合,順序にかかわらず,それらは一つの文末記号

;

と等価とする。

3.3.2.4

固定形式での文

文に文番号を付けるときは,文番号は,文の最初の行の第

1

5

けたに付けなければならない。付けないときは,第

1

5

けたは,空白でなければならない。空白

は,文番号の中のどこに挿入してもよい。一つの行の中で

;

に続く文は,文番号をもつことができない。すべての継続行の第

1

5

けたは,空白でなければならな

い。文は,

255

を超える継続行をもってはならない。プログラム単位の

END

文は,継続してはならない。文を継続することによって,プログラム単位の

END

文で

あるとみなせるような開始行を書いてはならない。

3.4

文字列の取込み

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

26

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

処理系の動作中に,プログラム単位の文字列の中に別の文字列を取り入れることができる。これは,次の形の

INC

LUDE

(INCLUDE line)

によって実現する。

INCLUDE

文字定数表現

文字定数表現には,名前付き定数である種別型パラメタ値を指定してはならない。

INCLUDE

行は,

Fortran

の文ではない。

INCLUDE

行は,文を置くことのできる場所に

1

行で書かなければならない。

INCLUDE

行は,省略可能な後続の

注釈を除いて,その行の空白でないただ一つの文字列でなければならない。したがって,文番号を付けてはならない。

INCLUDE

行の効果は,プログラムの処理に先立って,参照された文字列がその

INCLUDE

行を物理的に置き換え

たものと同じとする。取り込まれる文字列は,任意のものを含んでよく,更に

INCLUDE

行を含んでいてもよい。その

ような入れ子になった

INCLUDE

行は,指定した文字列で同様に置き換えられる。入れ子になったときの

INCLUDE

行の入れ子の最大の深さは,処理系依存とする。

INCLUDE

行によって引用される文字列は,すべての入れ子のレベ

ルにおいて,結果として同じ文字列を取り込んではならない。

INCLUDE

行が解決されるとき,取り込まれる最初の文の行は,継続行であってはならず,取り込まれる最後の文

の行は,継続してはならない。

文字定数表現の解釈は,処理系依存とする。解釈可能で有効な一つの例として,文字定数表現は,取り込まれる文

字列を含むファイルの名前とすることが考えられる。

注記

3.10

ある状況では,

INCLUDE

行で引用するファイル中に保持されているプログラム部分を,固定形式 又は 自由形式のいずれのプログラ

ム形式からも使用したいことがある。その場合,次の規則を守れば,そのプログラム部分はいずれの形式からも使用することができる。

(1)

文番号は,第

1

5

けたに書き,文は,第

7

72

けたに書く。

(2)

空白は,意味があるものとして扱う。

(3)

注釈の指示には,感嘆符

!

だけを使用する。しかも,第

6

けたで注釈を開始しない。

(4)

文が継続するときは,継続される行の第

73

けた 及び 継続する行の第

6

けたの両方にアンド記号

&

を書く。

4

Fortran

は,特定の物理的表現によらずにデータを分類する抽象的手段を提供する。この抽象的手段は,型

(type)

の概念とする。

組込み型は,この言語で定められている。組込み型は,整数型,実数型,複素数型,文字型 及び 論理型とする。

派生型は,派生型定義(

4.5.1

参照)で定義される。

派生型は,その定義が参照可能な場所でだけ使用できる(

4.5.1.1

参照)。組込み型は,どこででも参照可能とする。

型は,型指定子

(type specifier)

によって,複数の文脈で指定される。

R401

型指定子

is

組込み型指定子

or

派生型指定子

C401

(R401)

派生型指定子には,抽象型(

4.5.6

参照)を指定してはならない。

4.1

型の概念

型は,名前,有効な値の集合,その値の記述方法(定数),及び その値を操作する演算の集合をもつ。

注記

4.1

例えば,論理型は,二つの値からなる集合をもち,それらの値は構文素

.TRUE.

及び

.FALSE.

で記述され,論理演算によって操作される。

より制限の少ない型の例として,整数型がある。整数型は,処理系依存の整数値の集合をもち,そ

れらの値は省略可能な符号に続く数字列で記述され,整数値の算術演算 及び 関係演算で操作される。

4.1.1

値の集合

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

27

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

それぞれの型は,有効な値の集合をもつ。有効な値の集合は,論理型のように完全に定義されるか 又は 整数型,文

字型 及び 実数型のように処理系依存の方法で定義される。複素数型のもつ有効な値の集合は,それぞれの成分の値

のすべての組合せの集合とする。派生型のもつ有効な値の集合は,

4.5.7

で定める。

4.1.2

定数

それぞれの組込み型の定数表現の構文は,

4.4

で規定する。

値を記述する構文は,その型,型パラメタ 及び 特定の値を示す。

定数値には,名前を付けることができる(

5.1.2.10

及び

5.2.9

参照)。

派生型の定数値(

4.5.9

参照)は,構造体構成子を用いて初期値式

(

7.1.7

)

の適切な列から構成してもよい。この

ような定数値は,配列の成分をもっていてもスカラとみなす。

4.1.3

演算

それぞれの組込み型は,組込みとして定義されている演算 及び その演算に対応する演算子の集合をもつ。これらに

ついては,箇条

7

に定める。組込み演算 及び 組込み演算子の集合は,

OPERATOR

引用仕様

(

12.3.2.1

)

をもつ関数

によって定義される演算 及び 演算子を用いて拡張することができる。演算子の定義は,箇条

7

及び

12

で規定する。

派生型には,組込み演算は存在しない。派生型の演算は,プログラムで定義してもよい(

4.5.10

参照)。

4.2

型パラメタ

型には,パラメタが指定できる。この場合,その型の値の集合,値を記述する構文 及び 値の演算の集合は,その

パラメタの値に依存する。

すべての組込み型には,パラメタが指定できる。派生型は,パラメタが指定できるように定義できる。

型パラメタは,種別型パラメタ 又は 長さ型パラメタのいずれかとする。

種別型パラメタは,派生型定義

(

4.5.1

)

内のその型に対する初期値式 及び 宣言式で使用できる。それは,総称の

解決

(

16.2.3

)

に影響する。それぞれの組込み型は,

KIND

という名前の種別型パラメタをもつ。これによって,複数

の組込み型の表現を区別することができる。

注記

4.2

種別型パラメタの値は,翻訳時に分かる設計になっている。複数の表現形式を含んだパラメタ化

の幾つかは,実際の実装方法 及び 性能のために,翻訳時に区別できる必要がある。その例として,複

数の精度をもった組込み実数型 及び 実装可能な複数の文字集合をもった組込み文字型がある。

派生型の型パラメタは,種別型パラメタとして指定して,パラメタに基づいた総称の解決に用いて

もよい。つまり,仮引数の種別型パラメタ値によってだけ区別できる引用仕様をもつ二つの個別手続

への単一総称を許すことになる。総称は,翻訳時に解決されるように設計されている。

長さ型パラメタは,その型に対する派生型定義の中の宣言式で使用できるが,初期値式では使用してはならない。

組込み文字型は,文字列の長さを示す

LEN

という名前の長さ型パラメタをもつ。

注記

4.3

組込み文字型に関しては,長さを指定することが多いので,種別型パラメタ以外の型パラメタに

長さ

という単語を使う。しかし,長さ型パラメタを他の用途に使ってもよい。種別型パラメタとの

大きな違いは,長さ型パラメタの値は翻訳時に定まっている必要はなく,プログラム実行時に変わっ

てもよいということである。

型パラメタの値は,型定義

(

4.4, 4.5.8

)

で指定できる。

R402

型パラメタ値

is

スカラ整数式

or

*

or

:

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

28

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C402

(R402)

種別型パラメタに対する型パラメタ値は,初期値式でなければならない。

C403

(R402)

型パラメタ値としての

:

は,

POINTER

属性 又は

ALLOCATABLE

属性をもつ要素 又は 成

分の宣言内でだけ使用できる。

無指定型パラメタは,プログラムの実行中にその値を変えることができる長さ型パラメタとする。型パラメタ値とし

ての

:

は,無指定型パラメタを指定する。

実体の無指定型パラメタの値は,

ALLOCATE

(

6.3.1

)

の実行,組込み代入文

(

7.4.1.3

)

の実行,ポインタ代入

(

7.4.2

)

の実行 又は 引数結合

(

12.4.1.2

)

によって決定される。

注記

4.4

手続ポインタの場合も含め,関数の無指定型パラメタは,値をもたない。関数が割り付けられた

割付け関数結果 又は 結合ポインタの結果を返す場合,その関数の実行結果によって決定される。

引継ぎ型パラメタは,対応する実引数から型パラメタの値を引き継ぐ仮引数に対する長さ型パラメタとする。同様

に,対応する選択子から型パラメタの値を引き継ぐ

SELECT TYPE

構成子内の結合名にも使われる。型パラメタ値

としての

*

は,引継ぎ型パラメタを指定する。

4.3

型 及び 値と実体との関連

型の名前は,型指定子として使われ,その型の実体を宣言するのに用いる。宣言では,名前付き実体の型を指定す

る。データ実体 は,明示的 又は 暗黙的に宣言できる。データ実体は,型のほかにも属性をもつことができる。箇条

5

では,データ実体を宣言する方法 並びに データ実体の型 及び その他の属性を指定する方法を定める。

任意の組込み型 又は 派生型のスカラデータは,四角い形に配置して,そのスカラデータと同じ型 及び 同じ型パ

ラメタをもつ配列を構成することができる。配列実体は,スカラ実体と同じ型 及び 同じ型パラメタをもつことがで

きる。

変数は,データ実体とする。変数の型 及び 型パラメタは,変数の取りうる値を定める。代入は,任意の型の変数の

値を確定 又は 再確定する。変数と変数に代入する値との,型,型パラメタ 及び 形状が同じ場合の代入は,すべての

型に対して組込み代入として定義されている。異なる組込み型,型パラメタ 又は 形状をもつ実体の間の代入は,箇

7

に定める。サブルーチン 及び 総称指定子が

ASSIGNMENT(=)

である総称引用仕様

(

4.5.4

,

12.3.2.1

)

は,組込み

として定義されていない代入を定義するか,又は 派生型組込み代入

(

7.4.1.4

)

を再定義する。

注記

4.5

例えば,整変数への実数値の代入は,組込みとして定義されている。

変数の型は,その変数を操作できる演算を決定する。

4.4

組込み型

組込み型は,次のとおりとする。

数値型:

整数型,実数型 及び 複素数型

非数値型: 文字型 及び 論理型

数値型

(numeric type)

は,数値計算に用いることができる。数値型に対して,通常の算術演算である加算(

+

),減

算(

-

),乗算(

*

),除算(

/

),べき乗(

**

),同値(単項

+

)及び 符号反転(単項

-

)が,組込みとして定義され

ている。

R403

組込み型指定子

is

INTEGER

[

種別型パラメタ選択子

]

or

REAL

[

種別型パラメタ選択子

]

or

DOUBLE PRECISION

or

COMPLEX

[

種別型パラメタ選択子

]

or

CHARACTER

[

文字選択子

]

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

29

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

LOGICAL

[

種別型パラメタ選択子

]

R404

種別型パラメタ選択子

is

(

[

KIND =

]

スカラ整数初期値式

)

C404

(R404)

スカラ整数初期値式の値は,負であってはならず,処理系に存在する表現方法を指定しなければ

ならない。

4.4.1

整数型

整数型

(integer type)

のもつ値の集合は,数学的な整数の部分集合とする。処理系は,整数型データの値の集合を定

義する一つ以上の 表現方法

(representation method)

を提供しなければならない。このような表現方法は,種別

(kind)

型パラメタと呼ばれる型パラメタの値によって特徴付けられる。種別型パラメタは,基本整数型とする。表現方法の

種別型パラメタは,問合せ組込み関数

KIND

13.7.59

参照)によって求めることができる。表現方法の

10

進指数範

囲は,組込み関数

RANGE

13.7.96

参照)で求めることができる。組込み関数

SELECTED INT KIND

13.7.105

参照)

は,指定された

10

進指数範囲に基づく種別値を返す。整数型は値ゼロをもつ。値ゼロは,正でも負でもない。符号

の付いたゼロの値は,符号のないゼロの値と同じとする。

整数型の型指定子は,キーワード

INTEGER

とする。

種別型パラメタの指定がない場合,暗黙の種別値は,

KIND(0)

とする。そのデータ要素の型は,基本整数型

(default

integer)

とする。

整数値は,任意符号付き整定数表現で表現する。

R405

任意符号付き整定数表現

is

[

符号

]

整定数表現

R406

整定数表現

is

数字列

[

種別

]

R407

種別

is

数字列

or

スカラ整定数名

R408

任意符号付き数字列

is

[

符号

]

数字列

R409

数字列

is

数字

[

数字

] ...

R410

符号

is

+

or

-

C405

(R407)

スカラ整定数名は,整数型の名前付き定数でなければならない。

C406

(R407)

種別の値は,負であってはならない。

C407

(R407)

種別の値は,処理系に存在する表現方法を指定しなければならない。

整定数表現の数字列に続く省略可能の種別は,その整定数の種別型パラメタを指定する。種別を省略したとき,そ

の定数は,基本整数型とする。

整定数は,

10

進数として解釈する。

4.6

任意符号付き整定数表現の例を示す。

473

+56

-101

21_2

21_SHORT

1976354279568241_8

ここで,

SHORT

はスカラ整定数名とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

30

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R411

10

進定数表現

is

2

進定数表現

or

8

進定数表現

or

16

進定数表現

R412

2

進定数表現

is

B’

数字

[

数字

] ...

or

B"

数字

[

数字

] ...

"

C408

(R412)

数字は,

0

又は

1

のいずれかでなければならない。

R413

8

進定数表現

is

O’

数字

[

数字

] ...

or

O"

数字

[

数字

] ...

"

C409

(R413)

数字は,

0

7

のいずれかでなければならない。

R414

16

進定数表現

is

Z’

16

進数字

[ 16

進数字

] ...

or

Z"

16

進数字

[ 16

進数字

] ...

"

R415

16

進数字

is

数字

or

A

or

B

or

C

or

D

or

E

or

F

2

進定数表現,

8

進定数表現 及び

16

進定数表現は,それぞれの記数法に従って解釈する。

16

進数字

A

F

は,そ

れぞれ

10

15

を表し,英小文字で表してもよい。

C410

(R411)

10

進定数表現は,

DATA

文の初期値定数として,数値組込み関数

DBLE

REAL

若しくは

INT

の仮引数

A

に結合する実引数として,又は 組込み関数

CMPLX

の仮引数

X

若しくは

Y

と結合する実引数と

してだけ書くことができる。

4.4.2

実数型

実数型

(real type)

は,数学的な実数値の近似値の集合をもつ。処理系は,実数型データの値の集合を定義する二つ以

上の 近似方法

(approximation method)

を提供しなければならない。それぞれの近似方法は 表現方法

(representation

method)

をもち,種別

(kind)

型パラメタと呼ばれる型パラメタの値によって特徴付けられる。種別型パラメタは,基本

整数型とする。近似方法の種別型パラメタは,問合せ組込み関数

KIND

(

13.7.59

)

によって知ることができる。近似方

法の

10

進精度 及び

10

進指数範囲は,それぞれ組込み関数

PRECISION

(

13.7.90

)

及び 組込み関数

RANGE

(

13.7.96

)

で求めることができる。組込み関数

SELECTED REAL KIND

(

13.7.106

)

は,指定された

10

進精度 及び

10

進指数範囲

に基づく種別値を返す。

注記

4.7

近似方法の選択については,

C.1.2

を参照。

実数型は値ゼロをもつ。正の値ゼロと負の値ゼロとを区別する処理系も,次の場合にはそれらを数学的に同値とし

て扱わなければならない。

(1)

関係演算式の中

(2)

負の値ゼロを区別して指定する手続を除く組込み手続への実引数

(3)

算術

IF

文中のスカラ数値式

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

31

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

4.8

0

.

0

0

.

0

とを区別する処理系においては,次のとおりに評価する。

( X >= 0.0 )

は,

X

= 0.0

及び

X

=

0

.

0

のどちらに対しても

.TRUE.

とし,

( X < 0.0 )

は,

X

=

0

.

0

に対して

.FALSE.

である。

IF (X) 1,2,3

は,

X

= 0.0

X

=

0

.

0

のどちらの場合にも文番号

2

をもつ飛び先文に制御を移す。

0.0

0

.

0

を区別するためには,関数

SIGN

を使うのがよい。

SIGN(1.0,X)

1

.

0

を返すのは,

X

<

0.0

のとき 及び

0.0

0

.

0

とを区別する処理系において

X

が値

0

.

0

をもつときである。

実数型の型指定子は,キーワード

REAL

とする。キーワード

DOUBLE PRECISION

は,実数型の一つの種別に対する

代替の型指定子とする。

型キーワード

REAL

が指定され,種別型パラメタの指定がない場合,暗黙の種別値は,

KIND(0.0)

とする。その指

定された型は,基本実数型

(default real)

とする。型キーワード

DOUBLE PRECISION

を指定する場合,暗黙の種別値

は,

KIND(0.0D0)

とする。その指定された型は,倍精度実数型

(double precision real)

とする。倍精度実数型の近似

方法の

10

進精度は,基本実数型の近似方法より精度が高くなければならない。

R416

任意符号付き実定数表現

is

[

符号

]

実定数表現

R417

実定数表現

is

有効数字部

[

指数部英字 指数部

] [

種別

]

or

数字列 指数部英字 指数部

[

種別

]

R418

有効数字部

is

数字列

.

[

数字列

]

or

.

数字列

R419

指数部英字

is

E

or

D

R420

指数部

is

任意符号付き数字列

C411

(R417)

種別 及び 指数部英字の両方の指定がある場合,指数部英字は

E

でなければならない。

C412

(R417)

種別の値は,処理系に存在する近似方法を指定しなければならない。

種別指定のない実定数表現は,指数部の指定がないか 又は 指数部英字が

E

の場合,基本実定数とする。指数部英

字が

D

の場合,倍精度実定数とする。種別型パラメタを指定して書いた実定数表現は,指定した種別型パラメタの実

定数とする。

指数部は,有効数字部 又は 数字列に乗じる

10

のべき乗を指定する。これらの定数の意味は,科学的

10

進表記法

による。

有効数字部に,実定数の値を近似するために処理系が使用する個数より多くの数字を書いてもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

32

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.9

任意符号付き実定数表現の例を示す。

-12.78

+1.6E3

2.1

-16.E4_8

0.45E-4

10.93E7_QUAD

.123

3E4

ここで

QUAD

は,スカラ整定数名とする。

4.4.3

複素数型

複素数型

(complex type)

は,数学的な複素数値の近似値の集合をもつ。複素数型の値は,順序付けられた二つの

実数値の組とする。

1

番目の実数値を 実部

(real part)

2

番目の実数値を 虚部

(imaginary part)

と呼ぶ。

複素数型のデータ要素の実部 及び 虚部のそれぞれに,実数型のデータ要素を表現する近似方法を適用する。種別

(kind)

型パラメタは,複素数型要素に指定してもよい。種別型パラメタは,実部 及び 虚部の両方に対してその種別

型パラメタの値によって定まる実数の近似方法を選択する。種別型パラメタは,基本整数型とする。近似方法の種別

型パラメタは,問合せ組込み関数

KIND

(

13.7.59

)

によって知ることができる。

複素数型の型指定子は,キーワード

COMPLEX

とする。倍精度複素数型を指定するキーワードは定めない。型キー

ワード

COMPLEX

が指定され,種別型パラメタの指定がない場合,暗黙の種別値は基本実数型の種別値と同じとし,実

部 及び 虚部の型は基本実数型とし,その指定された型は 基本複素数型

(default complex)

とする。

R421

複素定数表現

is

(

実部

,

虚部

)

R422

実部

is

任意符号付き整定数表現

or

任意符号付き実定数表現

or

名前付き定数

R423

虚部

is

任意符号付き整定数表現

or

任意符号付き実定数表現

or

名前付き定数

C413

(R421)

複素定数表現中のそれぞれの名前付き定数は,整数型 又は 実数型でなければならない。

複素定数表現の実部 及び 虚部が両方とも任意符号付き実定数表現の場合,その複素定数の種別型パラメタ値は,

10

進精度が高いほうの種別型パラメタ値とする。精度が同じ場合,どちらを選ぶかは処理系依存とする。選ばれた複素

定数の種別型パラメタと異なるほうの任意符号付き実定数表現は,選ばれた複素定数表現の近似方法によって変換さ

れる。

実部 及び 虚部が共に整定数表現の場合,それらは基本実数型の近似方法によって変換され,複素定数は基本複素

数型となる。一方だけが整定数表現の場合,その整定数表現はもう一方の実定数表現の近似方法によって変換され,

複素定数表現の種別型パラメタ値は,その実定数表現の種別型パラメタの値に等しくなる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

33

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.10

複素定数表現の例を示す。

(1.0, -1.0)

(3, 3.1E6)

(4.0_4, 3.6E7_8)

(0., PI)

ここで,

PI

はあらかじめ名前付き実数型定数として宣言されているものとする。

4.4.4

文字型

文字型

(character type)

は,文字列からなる値の集合をもつ。文字列

(character string)

は,文字の列とする。文字

列中の文字には,文字列の左から右に,

1

2

3

...

と文字の個数までの番号が付けられる。文字列の 長さ

(length)

とは,文字列中の文字の個数とする。文字列の長さは型パラメタで指定し,その種別は処理系依存とし,その値は

0

以上とする。文字列は,長さが異なっていてもすべて文字型とする。

処理系は,文字型のデータの値の集合を定義する一つ以上の 表現方法

(representation method)

を提供しなければ

ならない。それぞれの表現方法は,種別

(kind)

型パラメタと呼ばれる型パラメタの値によって特徴付けられる。種別

型パラメタは,基本整数型とする。ある表現方法の種別型パラメタは,問合せ組込み関数

KIND

(

13.7.59

)

によって

知ることができる。組込み関数

SELECTED CHAR KIND

(

13.7.104

)

は,文字型の名前に基づいた種別値を返す。処理系

で表現可能な特定の表現方法に属するどの文字も,その表現方法の文字列中に現れてよい。

JIS X 0201

-1997

で定義される文字集合を,

ASCII

文字集合

(ASCII character set)

又は

ASCII

文字型

(ASCII

character type)

と呼ぶ。

JIS X 0221-1

: 2001 UCS-4

で定義される文字集合を,

ISO 10646

文字集合

(ISO 10646

character set)

又は

ISO 10646

文字型

(ISO 10646 character type)

と呼ぶ。

4.4.4.1

文字型指定子

文字型の型指定子は,キーワード

CHARACTER

とする。

種別型パラメタの指定がない場合,暗黙の種別値は

KIND(’A’)

とし,そのデータ要素の型は 基本文字型

(default

character)

とする。

R424

文字パラメタ選択子

is

文字長パラメタ選択子

or

( LEN =

型パラメタ値

, KIND =

スカラ整数初期値式

)

or

(

型パラメタ値

,

[

KIND =

]

スカラ整数初期値式

)

or

( KIND =

スカラ整数初期値式

[

, LEN =

型パラメタ値

]

)

R425

文字長パラメタ選択子

is

(

[

LEN =

]

型パラメタ値

)

or

*

文字長

[

,

]

R426

文字長

is

(

型パラメタ値

)

or

スカラ整定数表現

C414

(R424)

スカラ整数初期値式の値は,非負とし,処理系のもつ表現方法を指定しなければならない。

C415

(R426)

スカラ整定数表現は,種別の指定を含んではならない。

C416

(R424 R425 R426)

型パラメタ値

*

は,次の用途の場合にだけ用いてよい。

(1)

仮引数を宣言する場合

(2)

名前付き定数を宣言する場合

(3)

ALLOCATE

文の型指定子中であって,それぞれの割付け実体が引継ぎ文字長をもつ文字型の仮

引数である場合

(3.5)

型保持文

(

8.1.5

)

の型指定子 又は 派生型指定子中にある場合

(4)

外部関数において,関数結果の文字長パラメタを宣言する場合

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

34

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C417

関数名は,

その型が文字型であって,外部関数の結果の名前であるか 又は 仮引数の関数名である場合以外は,

型パラメタ値

*

で宣

言してはならない。

C418

関数名は,その関数が配列関数,ポインタ関数,再帰的関数 又は 純粋関数であるとき,型パラメタ値

*

で宣言してはならない。

C419

(R425)

文字長パラメタ選択子中の省略可能なコンマは,その宣言型指定子が型宣言文中にある場合にだけ指定してよい。

C420

(R425)

文字長パラメタ選択子中の省略可能なコンマは,型宣言文中に区切りの

2

連コロンがない場合にだけ指定してよい。

C421

(R424)

文字値文関数 又は 文字型の文関数仮引数に対して指定する長さは,初期値式でなければならない。

組込み型指定子

CHARACTER

型中の文字パラメタ選択子 及び データ要素宣言中 又は 型定義の成分宣言中の

*

文字長

は,文字長を指定する。データ要素宣言中 又は 成分宣言中の

*

文字長

は,文字パラメタ選択子で指定

された長さ(もしあれば)を上書きして,それぞれの長さを指定する。データ要素宣言 又は 成分宣言に

*

文字長

を指定しないと,文字パラメタ選択子中の文字長パラメタ選択子 又は 型パラメタ値が,文字長となる。長さが文字

パラメタ選択子でも

*

文字長

でも指定されなければ,その長さは,

1

とする。

文字長パラメタ値が負であるとき,宣言される文字型要素の長さは,ゼロとする。

:

の文字長パラメタ値は,無

指定型パラメタ

(

4.2

)

であることを示す。

*

の文字長パラメタ値は,次の意味をもつ。

(1)

手続の仮引数として宣言する場合は,仮引数は,結合した実引数の長さを引き継ぐ。

(2)

名前付き定数として宣言する場合は,その定数の値の長さとする。

(3)

ALLOCATE

文の型指定子中で用いた場合は,それぞれの割付け実体は,結合した実引数の長さを引き継ぐ。

(3.5)

型保持文の型指定子として用いた場合は,結合している要素は選択子の長さを引き継ぐ。

(4)

関数結果の文字長パラメタ値として指定する場合は,その関数を呼び出している有効域では,

*

ではない文字長パラメタ値を付けてその関数名を宣言するか,

又は 親子結合 若しくは 参照結合によってそのような定義を参照しなければならない。その関数が呼び出された時に,関数内の結果変数の長さは,この型パラメ

タ値から引き継がれる。

4.4.4.2

文字定数表現

文字定数表現

(character literal constant)

は,アポストロフィ 又は 引用符によって囲まれた文字の列で記述する。

R427

文字定数表現

is

[

種別

_

]

[

表現可能文字

] ...

or

[

種別

_

]

"

[

表現可能文字

] ...

"

C422

(R427)

種別の値は,処理系に存在する表現方法を指定しなければならない。

囲み記号の前にある省略可能な種別は,その文字定数の種別型パラメタを指定する。種別型パラメタの指定のない

定数の型は,基本文字型とする。

種別指定のある文字型 及び 種別指定のない基本文字型に対する 表現可能文字

(representable character)

は,次の

うちの一つとする。

(1)

自由形式中の表現可能文字は,処理系依存の文字集合中の任意の図形文字とする。

(2)

固定形式中の表現可能文字は,処理系依存の文字集合中の任意の文字とする。処理系は,幾つかの 又は すべての制御文字の出現を禁止してもよい。

注記

4.11

F

ORTRAN

77

では,文字文脈中にどの文字が出現してもよかった。一方,この規格(

Fortran

90

以降)では,プログラムが二つ以上の種別の文字を含んでもよく,処理系は,基本文字型でない

文字を制御文字[拡張文字

(escape)

又は シフト文字と呼ばれる。]の挿入によって識別してもよい。

それが,あるときは意図した意味をもつ制御文字として扱われ,あるときは意味をもたない文字とし

て扱われる状況では,ファイルの処理,編集 及び 印刷が(不可能ではないにしても)困難になる。

ほとんどすべての制御文字が用途 又は 効果をもつので,同様に文字文脈中で利用できない。これが,

自由形式で図形文字だけを表現可能な文字とした理由である。

それにもかかわらず,

FORTRAN 77

との互換性の

ため,固定形式では制御文字が許されている。

囲み記号のアポストロフィ 又は 引用符は,文字定数表現の値の一部ではない。

アポストロフィによって囲まれた文字定数中の文字としてのアポストロフィは,間に空白を置かない二つの連続す

るアポストロフィで表す。この場合,その

2

連アポストロフィは

1

文字と数える。同様に,引用符によって囲まれた

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

35

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

文字定数中の文字としての引用符は,間に空白を置かない二つの連続する引用符で表し,その

2

連引用符は

1

文字と

数える。

長さゼロの文字定数表現は,文字文脈の外で,間に空白のない

2

連アポストロフィ 又は

2

連引用符で表す。

連結

(concatenation)

の組込み演算

(

//

)

は,文字型の二つのデータ要素に対して定義されている(

7.2.2

参照)。二

つのデータ要素の型は,同じ種別型パラメタをもつ文字型とする。

4.12

文字定数表現の例を次に示す。

"DON’T"

’DON’’T’

これらの二つの文字定数表現は,いずれも値

DON’T

をもつ。

’’

は,値として長さゼロの文字列をもつ。

4.13

基本文字型でない文字定数表現の例を示す。ここで,処理系は対応する文字集合を用意している

ものとする。

NIHONGO_’

彼女なしでは何もできない。

ここで,

NIHONGO

は日本語に対する種別型パラメタの値をもつ名前付き定数とする。

4.4.4.3

大小順序

文字種別によって定まる文字集合中の文字の大小順序は,処理系によって文字種別ごとに定義される。大小順序

(collating sequence)

は,文字を負でない整数値に

1

1

で対応付ける。文字は,すべて異なる負でない整数値に対応

付けられる。組込み関数

CHAR

(

13.7.19

)

及び

ICHAR

(

13.7.50

)

は,この対応付けに従って文字と整数との間の変換

をする。

注記

4.14

ICHAR(’X’)

は,処理系の定める大小順序に従って文字

’X’

に対応する整数値を求める。

この規格では,基本文字型についての大小順序だけを次のとおり定める。

(1)

26

個の英大文字の大小順序は,

ICHAR(’A’)

<

ICHAR(’B’)

<

· · ·

<

ICHAR(’Z’)

とする。

(2)

10

個の数字の大小順序は,

ICHAR(’0’)

<

ICHAR(’1’)

<

· · ·

<

ICHAR(’9’)

とする。

(3)

ICHAR(’ ’)

<

ICHAR(’0’)

<

ICHAR(’9’)

<

ICHAR(’A’)

又は

ICHAR(’ ’)

<

ICHAR(’A’)

<

ICHAR(’Z’)

<

ICHAR(’0’)

とする。

(4)

26

個の英小文字の大小順序は,

ICHAR(’a’)

<

ICHAR(’b’)

<

· · ·

<

ICHAR(’z’)

とする。

(5)

ICHAR(’ ’)

<

ICHAR(’0’)

<

ICHAR(’9’)

<

ICHAR(’a’)

又は

ICHAR(’ ’)

<

ICHAR(’a’)

<

ICHAR(’z’)

<

ICHAR(’0’)

とする。

この規格では,空白を除く特殊文字 及び 下線の大小順序 並びに 大文字と小文字との間の大小順序を定めない。

ASCII

の文字型の大小順序は,

JIS X 0201

-1997

で定義される。この規格では,その符号の順序を

ASCII

大小順序

(ASCII collating sequence)

と呼ぶ。

ISO 10646

の文字型の大小順序は,

JIS X 0221-1

: 2001

で定義されている。

注記

4.15

組込み関数

ACHAR

(

13.7.2

)

及び

IACHAR

(

13.7.45

)

は,

ASCII

大小順序に従ってこれらの文

字と整数値との間の変換をする。

組込み関数

LGE

LGT

LLE

及び

LLT

(

13.7.63

13.7.66

)

は,

ASCII

大小順序に従って文字列を比較する。英字,

数字,下線 及び 特殊文字だけを使用していれば,国際的に移植性が保証される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

36

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.4.5

論理型

論理型

(logical type)

は,真

(true)

と偽

(false)

を表す二つの値をもつ。

処理系は,論理型データに対して一つ以上の 表現方法

(representation method)

を提供しなければならない。それ

ぞれの表現方法は,種別

(kind)

型パラメタと呼ばれる型パラメタの値によって特徴付けられている。種別型パラメ

タは,基本整数型とする。表現方法の種別型パラメタは,問合せ組込み関数

KIND

(

13.7.59

)

によって知ることがで

きる。

論理型の型指定子は,キーワード

LOGICAL

とする。

種別型パラメタの指定がない場合,暗黙の種別値は

KIND(.FALSE.)

とする。そのデータ要素の型は,基本論理型

(default logical)

とする。

R428

論理定数表現

is

.TRUE.

[

_

種別

]

or

.FALSE.

[

_

種別

]

C423

(R428)

種別の値は,処理系に存在する表現方法を指定しなければならない。

後ろの囲み記号に続く省略可能の種別型パラメタは,論理定数の種別型パラメタを指定する。種別型パラメタの指

定のない定数の型は,基本論理型とする。

論理型のデータ要素に対して定義された組込み演算は,

7.2.4

で規定されているとおり,否定

(

.NOT.

)

,論理積

(

.AND.

)

,論理和

(

.OR.

)

,論理等価

(

.EQV.

)

及び 論理非等価

(

.NEQV.

)

とする。他の型のデータ要素の値を比較し,

基本論理型の値を生じる関係演算の集合も組込みとして定義されている。関係演算については,

7.2.3

に定める。

4.5

派生型

派生型は,組込み型 及び 他の派生型から構成する。

派生型の定義では,型の名前 並びに その成分 及び 型束縛手続の名前 及び 属性を定義しなければならない。

派生型には,複数の型パラメタが指定できる。それぞれの型パラメタは,種別型パラメタ 又は 長さ型パラメタと

し,暗黙値をもってもよい。

派生型の実体の 末端成分

(ultimate component)

は,次のものとする。

(1)

組込み型である成分

(2)

POINTER

属性 又は

ALLOCATABLE

属性をもつ成分

(3)

派生型であって

POINTER

属性も

ALLOCATABLE

属性ももたない実体の成分の末端成分

4.16

次の例において,派生型の実体

kids

の末端成分は,

name

age

及び

other kids

である。

type :: person

character(len=20) :: name

integer :: age

end type person

type :: kids

type(person) :: oldest_child

type(person), allocatable, dimension(:) :: other_kids

end type kids

特に指定しなければ,成分の定義順序は記憶列の順序を意味しない。しかし,連続型

(

4.5.1.2

)

では,記憶列の順

序を意味する。派生型が

BIND

属性をもつ場合,記憶列の順序は,連携処理系

(

2.5.10

15.2.3

)

の要求に合わせる。

4.5.1

派生型定義

R429

派生型定義

is

TYPE

[

型パラメタ定義文

] ...

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

37

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

[

型定義属性宣言文

] ...

[

成分定義部

]

[

型束縛手続部

]

END TYPE

R430

TYPE

is

TYPE

[ [

,

型属性指定子並び

]

::

]

型名

[

(

型パラメタ名並び

)

]

R431

型属性指定子

is

参照許可指定子

or

EXTENDS (

親型名

)

or

ABSTRACT

or

BIND ( C )

C424

(R430)

派生型の型名は,

DOUBLEPRECISION

とも,この規格が規定するどの組込み型の名前とも同じで

あってはならない。

C425

(R430)

同じ型属性指定子は,一つの

TYPE

文中に

2

回以上書いてはならない。

C426

(R431)

親型名は,それ以前に定義されている拡張可能型

(

4.5.6

)

の名前でなければならない。

C427

(R429)

型定義が遅延束縛

(

4.5.4

)

を含むか 又は 継承

(

4.5.6.1

)

する場合は,

ABSTRACT

を指定しなけれ

ばならない。

C428

(R429)

ABSTRACT

を指定する場合は,その型は拡張可能でなければならない。

C429

(R429)

EXTENDS

を指定する場合は,

SEQUENCE

を指定してはならない。

R432

型定義属性宣言文

is

成分

PRIVATE

or

SEQUENCE

C430

(R429)

同じ型定義属性宣言文は,一つの派生型定義中に

2

回以上書いてはならない。

R433

END TYPE

is

END TYPE

[

型名

]

C431

(R433)

END TYPE

に続いて型名の指定を書く場合,その型名は対応する

TYPE

文の型名と同じでなけ

ればならない。

BIND

属性をもった派生型は,

15.2.3

で示す制約にも従わなければならない。

4.17

派生型定義

TYPE PERSON

INTEGER AGE

CHARACTER (LEN = 50) NAME

END TYPE PERSON

PERSON

の変数

CHAIRMAN

の宣言

TYPE (PERSON) :: CHAIRMAN

4.5.1.1

参照許可属性

モジュール内で定義されるか 又は 参照結合によってそのモジュール内で参照可能となった型は,

PUBLIC

属性 又

PRIVATE

属性のいずれかをもたなければならない。モジュール内で参照許可指定子を明示的に宣言していない型

は,そのモジュール内で暗黙の参照許可属性をもつ。

PRIVATE

(

5.2.1

)

によって変更しない限り,モジュールの

暗黙の参照許可属性は公開

(PUBLIC)

とする。モジュール内の

PUBLIC

属性をもつ型だけが,参照結合によってそ

のモジュールから参照できる。

型の参照許可属性は,その成分 及び 束縛の参照許可属性に影響を与えず,影響を受けることもない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

38

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

型の定義が非公開である場合,型名 及び その型の構造体構成子

(

4.5.9

)

は,その型定義を含むモジュールの中で

だけ参照可能とする。

4.18

非公開の型

TYPE, PRIVATE :: AUXILIARY

LOGICAL :: DIAGNOSTIC

CHARACTER (LEN = 20) :: MESSAGE

END TYPE AUXILIARY

このような型は,この型の定義のあるモジュール内でだけ参照可能である。

4.5.1.2

連続型

R434

SEQUENCE

is

SEQUENCE

C432

(R438)

SEQUENCE

を指定する場合は,それぞれのデータ成分は,組込み型であるか 又は 連続した派生

型でなければならない。

C433

(R429)

SEQUENCE

を指定する場合は,型束縛手続部を記述してはならない。

SEQUENCE

(SEQUENCE statement)

の指定のある型は,連続型とする。この型の実体の記憶列は,連続型で

定義した成分の順序となる。型パラメタもポインタ成分も割付け成分ももたず,かつ すべての成分が基本整数型,基

本実数型,倍精度実数型,基本複素数型,基本論理型 又は 数値連続型である型は,数値連続型

(numeric sequence

type)

とする。型パラメタもポインタ成分も割付け成分ももたず,かつ すべての成分が基本文字型 又は 文字連続型

である型は,文字連続型

(character sequence type)

とする。

4.19

数値連続型

TYPE NUMERIC_SEQ

SEQUENCE

INTEGER :: INT_VAL

REAL

:: REAL_VAL

LOGICAL :: LOG_VAL

END TYPE NUMERIC_SEQ

注記

4.20

構造体は,成分の列に分解される。構造体が

SEQUENCE

文を含まないとき,成分が指定され

た順(又は 他のどんな順)で格納されているかわからない。連続した記憶列を使うという保証もな

い。定義を記述するときに必然的に成分を指定する順序があり,これが成分の列を定義するというだ

けのことである。派生型の実体の成分は,次の文脈を除いてはいつも成分名で参照されるので,成分

の順序はあまり重要ではない。

(1)

構造体構成子における式の列

(2)

組込み代入

(3)

変数群入力におけるデータ値

(4)

書式付きデータ転送の入出力項目並びにおける構造体

これらの場合は成分の順序に展開される。処理系は,これらの場合において定義された順序に従う

限り,連続型でない構造体に対する記憶列を,特定のアーキテクチャに最も適するように構成しても

よい。

4.5.1.3

派生型の決定

同じ型名をもつ派生型定義を,異なる有効域に書いた場合,それらは,独立の異なる型を表すときと同じ派生型を

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

39

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

表すときがある。

同じ派生型定義を参照して宣言された二つのデータ要素は,同じ型とする。型定義は,モジュール 又は 親有効域

から参照してくることもできる。異なる有効域内のデータ要素が異なる派生型定義を用いて宣言されていても,それ

らの派生型定義が同じ型名 及び

SEQUENCE

の指定 又は

BIND

属性をもち,

PRIVATE

属性をもたず,かつ 順序,名

前 及び 属性の一致する型パラメタ 及び 成分をもつ場合,それらのデータ要素は同じ型とする。そうでない場合,そ

れらのデータ要素は異なる派生型とする。

SEQUENCE

の指定 又は

BIND

属性のある型を用いて宣言されたデータ要素

は,非公開の型 又は 非公開の成分をもつ型のデータ要素とは異なる型とする。

4.21

同じ派生型定義を参照する二つの要素の宣言

TYPE POINT

REAL

X,

Y

END TYPE POINT

TYPE (POINT) :: X1

CALL SUB (X1)

...

CONTAINS

SUBROUTINE SUB (A)

TYPE (POINT) :: A

...

END SUBROUTINE SUB

親子結合によって,サブルーチン

SUB

で派生型

POINT

の定義が参照できる。

X1

及び

A

の両方の宣

言は,同じ派生型定義を参照するので,

X1

A

は同じ型をもつ。派生型をモジュールで定義し,そ

のモジュールをサブルーチン

SUB

及び 外側のプログラム単位の両方で参照しても,

X1

A

は同じ型

をもつ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

40

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.22

異なる有効域のデータ要素が同じ型をもつ場合

PROGRAM PGM

TYPE EMPLOYEE

SEQUENCE

INTEGER

ID_NUMBER

CHARACTER (50) NAME

END TYPE EMPLOYEE

TYPE (EMPLOYEE) PROGRAMMER

CALL SUB (PROGRAMMER)

...

END PROGRAM PGM

SUBROUTINE SUB (POSITION)

TYPE EMPLOYEE

SEQUENCE

INTEGER

ID_NUMBER

CHARACTER (50) NAME

END TYPE EMPLOYEE

TYPE (EMPLOYEE) POSITION

...

END SUBROUTINE SUB

実引数

PROGRAMMER

及び 仮引数

POSITION

は,型の名前,

SEQUENCE

文の指定,並びに 成分の

定義順,名前 及び 属性が一致する派生型定義を参照して宣言されているので,同じ型をもつ。

サブルーチン中の派生型の成分の名前が

ID NUMBER

でなく

ID NUM

であったとすると,すべての成

分の名前が主プログラムの派生型

EMPLOYEE

の成分の名前と一致することにはならないので,実引数

PROGRAMMER

の型は,仮引数

POSITION

の型と異なることになる。その場合,このプログラムは,規

格合致ではなくなる。

注記

4.23

二つの型が同じ名前をもつための条件は,それぞれの

TYPE

文の型名に対して適用され,

USE

文によって確立した局所名に対しては適用されない。

4.5.2

派生型パラメタ

R435

型パラメタ定義文

is

INTEGER

[

種別型パラメタ選択子

]

,

型パラメタ属性指定子

::

型パラメタ宣言並び

R436

型パラメタ宣言

is

型パラメタ名

[

=

スカラ整数初期値式

]

C434

(R435)

派生型定義の型パラメタ定義文における型パラメタ名は,その派生型定義の

TYPE

文中の型パ

ラメタ名の一つでなければならない。

C435

(R435)

派生型定義の

TYPE

文内のそれぞれの型パラメタ名は,その派生型定義の型パラメタ定義文中

の型パラメタ名として現れなければならない。

R437

型パラメタ属性指定子

is

KIND

or

LEN

派生型は,

TYPE

文が型パラメタ名をもつ場合にパラメタ化できる。

それぞれの型パラメタ自体は整数型とする。種別型パラメタ選択子が省略された場合,種別型パラメタは基本整数

型とする。

型パラメタ属性指定子は,型パラメタが種別型パラメタであるか長さ型パラメタであるかを明示的に指定する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

41

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

型パラメタ宣言にスカラ整数初期値式がある場合,型パラメタは,その式によって指定された値を暗黙の値として

もつ。その値は,組込み代入

(

7.4.1.3

)

の規則に従って,同じ種類の型パラメタの値に変換してもよい。

型パラメタは,派生型定義中の宣言式

(

7.1.6

)

の一次式として使用してよい。種別型パラメタも,派生型定義中の

初期値式

(

7.1.7

)

の一次式として使用してよい。

4.24

派生型パラメタの例

TYPE humongous_matrix(k, d)

INTEGER, KIND :: k = kind(0.0)

INTEGER(selected_int_kind(12)), LEN :: d

!-- d

に対して,暗黙の種別以外を指定する。

REAL(k) :: element(d,d)

END TYPE

次の例では,

dim

は種別型パラメタとして宣言されており,

dim

によってだけ区別可能な手続の総

称化が許される。

TYPE general_point(dim)

INTEGER, KIND :: dim

REAL :: coordinates(dim)

END TYPE

4.5.2.1

型パラメタ順序

型パラメタ順序

(type parameter order)

は,派生型の型パラメタの順序とし,派生型指定子で用いる。

直接拡張型でない派生型の型パラメタ順序は,派生型定義の型パラメタ並びでの順序とする。直接拡張型の型パラ

メタ順序は,親型の型パラメタ順序に続けて,その直接拡張型の定義の型パラメタ並びにおける順序を追加したもの

とする。

4.25

型パラメタ順序

TYPE :: t1(k1,k2)

INTEGER,KIND :: k1,k2

REAL(k1) a(k2)

END TYPE

TYPE,EXTENDS(t1) :: t2(k3)

INTEGER,KIND :: k3

LOGICAL(k3) flag

END TYPE

t1

の型パラメタ順序は,

k1

k2

である。

t2

の型パラメタ順序は,

k1

k2

,続いて

k3

となる。

4.5.3

成分

R438

成分定義部

is

[

成分定義文

] ...

R439

成分定義文

is

データ成分定義文

or

手続成分定義文

R440

データ成分定義文

is

宣言型指定子

[ [

,

成分属性指定子並び

]

::

]

成分宣言並び

R441

成分属性指定子

is

POINTER

or

DIMENSION (

成分配列形状指定

)

or

ALLOCATABLE

or

参照許可指定子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

42

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R442

成分宣言

is

成分名

[

(

成分配列形状指定

)

] [

*

文字長

] [

成分初期値指定

]

R443

成分配列形状指定

is

明示上下限並び

or

無指定上下限並び

R444

成分初期値指定

is

=

初期値式

or

=>

空初期化

C436

(R440)

同じ成分属性指定子は,一つの成分定義文中に

2

回以上書いてはならない。

C437

(R440)

キーワード

CLASS

(

5.1.1.2

)

で宣言する成分は,

ALLOCATABLE

属性 又は

POINTER

属性を

もっていなければならない。

C438

(R440)

成分に

POINTER

属性の指定がない場合,その成分定義文の宣言型指定子は,

CLASS(*)

であ

るか,又は 組込み型 若しくは それ以前に定義された派生型を指定しなければならない。

C439

(R440)

成分に

POINTER

属性の指定がある場合,その成分定義文の宣言型指定子は,

CLASS(*)

である

か,又は 組込み型 若しくは 任意の参照可能な派生型(その型自体を含む。)を指定しなければならない。

C440

(R440) POINTER

属性 又は

ALLOCATABLE

属性を指定する場合,成分配列形状指定は,無指定上下

限並びでなければならない。

C441

(R440) POINTER

属性の指定も

ALLOCATABLE

属性の指定もない場合,成分配列形状指定は,明示

上下限並びでなければならない。

C442

(R443)

明示上下限の上下限は,初期値式であるか,又は 宣言関数の引用 及び 名前付き定数(その部分

実体も含む。)以外のいかなる実体特定子の引用も含まない宣言式でなければならない。

C443

(R440)

成分に

ALLOCATABLE

属性と

POINTER

属性の両方を指定してはならない。

C444

(R442) “

*

文字長

は,型指定が文字型である場合にだけ指定してよい。

C445

(R439)

成分定義文の型パラメタ値は,コロンであるか,初期値式であるか,又は,宣言関数の引用も,

名前付き定数 及び その部分実体を除くいかなる実体特定子も含まない宣言式であるかのいずれかでなけ

ればならない。

注記

4.26

型パラメタは実体ではないので,型パラメタ値 又は 明示上下限の上下限は型パラメタ名を含

んでもよい。

C446

(R440)

成分初期値指定を書いたとき,その成分宣言並びの前の区切りの

2

連コロンを省略してはなら

ない

C447

(R440)

成分初期値指定に

=>

を書いたとき,実体は,

POINTER

属性をもたなければならない。初期

値指定に

=

を書いたとき,実体は,

POINTER

属性 又は

ALLOCATABLE

属性をもってはならない。

C447a

(R440)

成分初期値指定を書いたとき,成分のそれぞれの型パラメタ 及び 配列上下限は,初期値式で

なければならない。

R445

手続成分定義文

is

PROCEDURE (

[

手続引用仕様

]

),

手続成分属性指定子並び

::

手続宣言並び

注記

4.27

手続引用仕様 及び 手続宣言の定義は,

12.3.2.3

を参照。

R446

手続成分属性指定子

is

POINTER

or

PASS

[

(

引数名

)

]

or

NOPASS

or

参照許可宣言

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

43

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C448

(R445)

同じ手続成分属性指定子は,一つの手続成分定義文中に

2

回以上書いてはならない。

C449

(R445)

手続成分属性指定子並びには,

POINTER

属性を書かなければならない。

C450

(R445)

手続ポインタ成分が,暗黙の引用仕様をもつか 又は 引数をもたない場合は,

NOPASS

を指定し

なければならない。

C451

(R445)

PASS(

引数名

)

を指定する場合は,引用仕様はその引数名を名前とする仮引数をもたなければな

らない。

C452

(R445)

同じ手続成分属性指定子並びに

PASS

及び

NOPASS

を同時に指定してはならない。

4.5.3.1

配列成分

成分宣言が成分配列形状指定を含むか 又は データ成分定義文が

DIMENSION

属性をもつ場合,そのデータ成分は

配列とする。成分宣言が成分配列形状指定を含む場合,成分配列形状指定は配列の次元数を指定し,更に配列が形状

明示配列

(

5.1.2.5.1

)

であるときは,配列の上下限をも指定する。データ成分定義文が

DIMENSION

属性をもつ場

合,その

DIMENSION

属性の成分配列形状指定は配列の次元数を指定し,更に配列が形状明示配列であるときは配

列の上下限をも指定する。

4.28

配列成分をもつ型定義

TYPE LINE

REAL, DIMENSION (2, 2) :: COORD

! COORD(:,1)

の値は

(/X1, Y1/)

! COORD(:,2)

の値は

(/X2, Y2/)

REAL

:: WIDTH

!

線幅

(cm)

INTEGER

:: PATTERN

! 1:

実線

,

2:

破線

,

3:

点線

END TYPE LINE

LINE

の変数

LINE SEGMENT

の宣言

TYPE (LINE)

:: LINE_SEGMENT

スカラ変数

LINE SEGMENT

は,配列である成分をもつ。この場合,その配列はスカラデータの部分実

体となる。

COORD

の定義では,

::

は指定しなければならない。

WIDTH

及び

PATTERN

の定義では,

::

は省略可能である。

4.29

割付け成分をもつ型定義

TYPE STACK

INTEGER

:: INDEX

INTEGER, ALLOCATABLE :: CONTENTS (:)

END TYPE STACK

STACK

のスカラ変数の成分

CONTENTS

の形状は,

ALLOCATE

文 若しくは 代入文の実行 又は 引

数結合によって決定される。

注記

4.30

形状明示配列成分の暗黙的初期値指定は,配列構成子

(

4.7

)

による初期値式でもよく,

(各配列

要素の値になる)一つのスカラ初期値式でもよい。

4.5.3.2

ポインタ成分

成分属性指定子並びが

POINTER

属性を書いた場合,成分はポインタ

(

2.4.6

)

とする。ポインタ成分は,データポ

インタであっても手続ポインタであってもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

44

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.31

ポインタの成分をもつ派生型

REFERENCE

(文献情報)の定義

TYPE REFERENCE

INTEGER

:: VOLUME, YEAR, PAGE

CHARACTER (LEN = 50)

:: TITLE

CHARACTER, DIMENSION (:), POINTER :: SYNOPSIS

END TYPE REFERENCE

REFERENCE

の実体は,ポインタでない四つの成分,

VOLUME

YEAR

PAGE

及び

TITLE

,並びに 文

字配列へのポインタ

SYNOPSIS

からなる。この指示先の配列の大きさは,

SYNOPSIS

(概要)の文字数

に応じて後で決まる。指示先の領域は,割付け

(

6.3.1

)

をしてもよいし,ポインタ代入文

(

7.4.2

)

ポインタ成分に指示先を結合してもよい。

4.5.3.3

当該実体仮引数

当該実体仮引数

(passed-object dummy argument)

は,手続ポインタ成分 又は 型束縛手続の特別な仮引数とする。

当該実体仮引数は,手続の上書き

(

4.5.6.2

)

及び 引数結合

(

12.4.1.1

)

に影響を及ぼす。

NOPASS

が指定された場合,手続ポインタ成分 又は 型束縛手続は,当該実体仮引数をもたない。

PASS

及び

NOPASS

のいずれも指定されない場合 又は 引数名をもたない

PASS

が指定された場合,手続ポインタ成

分 又は 型束縛手続の最初の仮引数が,当該実体仮引数となる。

PASS(

引数名

)

が指定された場合,引数名をもった仮引数が,手続ポインタ成分 又は 型束縛手続の当該実体仮引数

となる。

C453

当該実体仮引数は,ポインタでもなく割付け実体でもないスカラ仮データ実体でなければならず,その宣

言時の型は確定する型と同じでなければならない。すべての長さ型パラメタは,引き継がれる。確定する

型が拡張可能型(

4.5.6

参照)であるときに限り,多相的(

5.1.1.2

参照)でなければならない。

VALUE

属性をもってはならない。

注記

4.32

手続が型束縛手続として様々な型に束縛されている場合,文脈に応じて異なった仮引数が当該

実体仮引数となることもある。

4.5.3.4

暗黙的初期値指定をもつ成分

暗黙的初期値指定は,ポインタ成分を自動的に空状態に初期化し,ポインタでも割付け成分でもない成分を特定の

値で初期化する方法とする。割付け成分は,常に

割り付けられていない

で初期化される。

ポインタ成分に対して空初期化が指定された場合,その型のすべての実体中のその成分の結合状態は,空状態

(

16.4.2.1

)

であるか 又は

16.4.2.1.2

で示すとおりに空状態になる。

ポインタでない成分に対して初期値式の指定がある場合,その型のすべての実体中のその成分は,初期確定

(

16.5.3

)

となるか 又は 初期値式によって定まる値を用いて

16.5.5

に示すとおりに確定となる。必要ならば,その値は,組込

み代入の規則

(

7.4.1.3

)

に従って型,型パラメタ 及び 形状がその成分に一致するように変換される。 成分宣言中の

初期値式による暗黙的初期値指定は,その型の成分がまた暗黙的初期値指定をもつ場合,その暗黙的初期値指定を上

書きする。ある初期値指定が別の初期値指定を上書き

(override)

した場合,それはあたかも上書きした初期値指定だ

けがあったかのようになる(

4.34

参照)。型宣言文

(

5.1

)

における明示的初期値指定は,暗黙的初期値指定を上書

きする

(

4.33

参照

)

。明示的初期値指定とは異なり,暗黙的初期値指定は,実体が

SAVE

属性をもつことを意味す

るわけではない。

部分成分(

6.1.2

参照)は,それを成分とする実体の型定義にその成分の暗黙的初期値指定がある場合,暗黙的初

期値設定されている

(default-initialized)

という。その部分成分は,暗黙的初期値設定されているか 又は 明示的初期

値指定されている実体の部分実体ではない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

45

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.33

派生型のすべての成分に暗黙的初期値指定をする必要はない。

TYPE DATE

INTEGER DAY

CHARACTER (LEN = 5) MONTH

INTEGER :: YEAR = 1994

!

部分的な暗黙的初期値指定

END TYPE DATE

TODAY

の成分

YEAR

の暗黙的初期値指定は,型宣言文の明示的初期値指定によって上書きされる。

TYPE (DATE), PARAMETER :: TODAY = DATE (21, "Feb.", 1995)

4.34

派生型の成分の暗黙的初期値は,

(その成分に対して)型定義中で指定した暗黙的初期値指定によっ

て上書きすることができる。

4.33

からの続きとする。

TYPE SINGLE_SCORE

TYPE(DATE) :: PLAY_DAY = TODAY

INTEGER SCORE

TYPE(SINGLE_SCORE), POINTER :: NEXT => NULL ( )

END TYPE SINGLE_SCORE

TYPE(SINGLE_SCORE) SETUP

SETUP

の成分

PLAY DAY

は,成分

YEAR

の初期値指定を上書きした

TODAY

の初期値をとる。

4.35

構造体の配列は,要素の一部 又は すべての成分が暗黙的初期値指定をもつように宣言してもよ

い。

4.34

からの続きとする。

TYPE MEMBER (NAME_LEN)

INTEGER, LEN :: NAME_LEN

CHARACTER (LEN = NAME_LEN) NAME = ’’

INTEGER :: TEAM_NO, HANDICAP = 0

TYPE (SINGLE_SCORE), POINTER :: HISTORY => NULL ( )

END TYPE MEMBER

TYPE (MEMBER(9)) LEAGUE (36)

!

各配列要素が部分的に初期化される配列

TYPE (MEMBER(9)) :: ORGANIZER = MEMBER ("I. Manage",1,5,NULL ( ))

ORGANIZER

は,型

MEMBER

の実体に対する暗黙的初期値指定を上書きする明示的初期値指定をもつ。

割付け実体も,一部 又は 全体を初期化してよい。

ALLOCATE (ORGANIZER % HISTORY)

!

SINGLE_SCORE

である部分的に初期化された

!

実体が生成される

4.36

派生型のポインタ成分は,指示先としてその派生型の実体をもってもよい。型定義中の指定では,

その型の実体中のそのようなポインタを暗黙的に空状態として初期化してもよい。

TYPE NODE

INTEGER

:: VALUE = 0

TYPE (NODE), POINTER

:: NEXT_NODE => NULL ( )

END TYPE

このような型は,型

NODE

の実体の線形リストを構成するのに用いることができる。使用例は,

C.1.5

参照。

4.5.3.5

成分順序

成分順序

(component order)

は,派生型の親でない成分の順序とする。成分順序は,組込み書式付き入出力 及び 構

造体構成子で用いられる(成分キーワードは使わない。)。親成分は,直接拡張型

(

4.5.6

)

の成分順序には含まれない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

46

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

直接拡張型でない派生型の成分順序は,派生型定義での成分の宣言された順序とする。直接拡張型の成分順序は,

親型の成分順序に続けて,拡張された派生型定義での成分の宣言された順序をつなげたものとする。

4.37

4.25

の派生型定義において,型

t1

の成分順序は,

a

だけである(

t1

には一つの成分だけしか

存在しない。)。型

t2

の成分順序は,

a

に続いて

flag

となる。親成分(

t1

)は成分順序には現れない。

4.5.3.6

成分の参照許可属性

R447

成分

PRIVATE

is

PRIVATE

C454

(R447)

成分

PRIVATE

文は,その型定義がモジュールの宣言部にある場合にだけ書くことができる。

型定義に成分

PRIVATE

文が存在する場合,派生型の成分定義部で宣言された成分の暗黙の参照許可属性は,非公

開とする。そうでない場合は,公開とする。参照許可指定子によって明示的に成分の参照許可属性の宣言をしてもよ

い。宣言をしない場合は,成分の参照許可属性は,型定義で宣言された暗黙の参照許可属性とする。

成分が非公開である場合,その成分名は,その型定義を含むモジュールの中でだけ参照可能とする。

注記

4.38

型パラメタは成分ではないので,その効果は常に公開となる。

注記

4.39

派生型の成分の参照許可属性 及び 派生型名の参照許可属性は互いに独立している。したがっ

て,次の四つの組合せがあり得る。

(1)

公開の成分をもった公開の型名

(2)

公開の成分をもった非公開の型名

(3)

非公開の成分をもった公開の型名

(4)

非公開の成分をもった非公開の型名

4.40

非公開の成分をもつ型

MODULE DEFINITIONS

TYPE POINT

PRIVATE

REAL :: X, Y

END TYPE POINT

END MODULE DEFINITIONS

このような型定義は,

USE

文によってこのモジュールを参照している任意の有効域で参照可能である

が,成分

X

及び

Y

は,このモジュール内でだけ参照可能である。

4.41

各成分の参照許可指定子によって暗黙の参照許可属性を上書きする例

TYPE MIXED

PRIVATE

INTEGER :: I

INTEGER, PUBLIC :: J

END TYPE MIXED

TYPE (MIXED) :: M

成分

M%J

は,

M

が参照可能な範囲ではどこでも参照可能である。成分

M%I

は,型

MIXED

が定義されて

いるモジュール内だけで参照可能である。

4.5.4

型束縛手続

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

47

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R448

型束縛手続部

is

CONTAINS

[

束縛

PRIVATE

]

手続束縛文

[

手続束縛文

] ...

R449

束縛

PRIVATE

is

PRIVATE

C455

(R448)

束縛

PRIVATE

文は,型定義がモジュールの宣言部にあるときだけ書くことができる。

R450

手続束縛文

is

個別束縛

or

総称束縛

or

後始末束縛

R451

個別束縛

is

PROCEDURE

[

(

引用仕様名

)

] [ [

,

束縛属性並び

]

::

]

束縛名

[

=>

手続名

]

C456

(R451) “

=>

手続名

を書いたとき,区切りの

2

連コロンを省略してはならない。

C457

(R451) “

=>

手続名

を書いたとき,引用仕様名を書いてはならない。

C458

(R451)

手続名は,参照可能なモジュール手続名か 又は 明示的引用仕様をもった外部手続名でなければ

ならない。

=>

手続名

も引用仕様名も書かないとき,

=>

手続名

の手続名に束縛名が書かれたときと同じになる。

R452

総称束縛

is

GENERIC

[

,

参照許可属性

]

::

総称指定

=>

束縛名並び

C459

(R452)

モジュールの宣言部内で,それぞれの総称束縛は,その派生型において同じ総称指定をもつ他の

すべての総称束縛と同じ参照許可属性を,明示的 又は 暗黙的に指定しなければならない。

C460

(R452)

束縛名並びの束縛名は,その型の個別束縛の名前でなければならない。

C461

(R452)

総称指定が総称名でないとき,それぞれの個別束縛は,当該実体仮引数

(

4.5.3.3

)

をもたなけれ

ばならない。

C462

(R452)

総称指定が

OPERATOR(

利用者定義演算子

)

であるとき,それぞれの束縛の引用仕様は

12.3.2.1.1

で示す指定方法に従っていなければならない。

C463

(R452)

総称指定が

ASSIGNMENT(=)

であるとき,それぞれの束縛の引用仕様は

12.3.2.1.2

で示す指定方

法に従っていなければならない。

C464

(R452)

総称指定が派生型入出力総称指定であるとき,それぞれ束縛の引用仕様は

9.5.3.7

で示す指定方

法に従っていなければならない。引数

dtv

9.5.3.7.2

参照)の型は,その派生型定義の型名でなければ

ならない。

R453

束縛属性

is

PASS

[

(

引数名

)

]

or

NOPASS

or

NON OVERRIDABLE

or

DEFERRED

or

参照許可指定子

C465

(R453)

同じ束縛属性は,一つの束縛属性並び中に

2

回以上書いてはならない。

C466

(R451)

束縛の引用仕様が定義している型の仮引数をもたないとき,

NOPASS

を書かなければならない。

C467

(R451)

PASS(

引数名

)

を書いたとき,束縛の引用仕様には,引数名をもった仮引数を書かなければなら

ない。

C468

(R453)

一つの束縛属性並びに

PASS

NOPASS

を同時に書いてはならない。

C469

(R453)

一つの束縛属性並びに

NON OVERRIDABLE

DEFERRED

を同時に書いてはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

48

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C470

(R453)

引用仕様名を書いたときに限り

DEFERRED

を書かなければならない。

DEFERRED

を書いたときに

限り,引用仕様名を書かなければならない。

C471

(R451)

上書き束縛

(

4.5.6.2

)

は,上書きするものの束縛が遅延するときだけ,

DEFERRED

属性を指定

しなければならない。

C472

(R451) NON OVERRIDABLE

属性をもった継承束縛

(

4.5.6.1

)

を上書きしてはならない。

手続束縛文での束縛は,型束縛手続

(type-bound procedure)

を指定する。型束縛手続は,当該実体仮引数

(

4.5.3.3

)

をもってもよい。総称束縛は,その個別束縛に対して型束縛の総称引用仕様を指定する。

DEFERRED

属性をもつ束

縛は,遅延束縛

(deferred binding)

とする。遅延束縛は,抽象型

(

4.5.6

)

の定義中にだけ書かなければならない。

型束縛手続は,型定義の有効範囲の中で束縛名

(binding name)

で識別してもよい。この名前は,個別束縛に対し

ては束縛名とし,総称指定が総称名である総称束縛に対しては総称名とする。後始末束縛 又は 総称指定が総称名と

異なる総称束縛は,束縛名をもたない。

個別束縛の引用仕様は,手続名によって指定された手続の引用仕様 又は 引用仕様名によって指定された手続の引

用仕様とする。

4.42

型 及び 型束縛手続の例

TYPE POINT

REAL :: X, Y

CONTAINS

PROCEDURE, PASS :: LENGTH => POINT_LENGTH

END TYPE POINT

...

ここで,次の定義が同じモジュールのモジュール副プログラム部の中にあるとする。

REAL FUNCTION POINT_LENGTH (A, B)

CLASS (POINT), INTENT (IN) :: A, B

POINT_LENGTH = SQRT ( (A%X - B%X)**2 + (A%Y - B%Y)**2 )

END FUNCTION POINT_LENGTH

一つの派生型定義内の複数の総称束縛に,同じ総称指定を書いてもよい。同じ総称指定をもつ追加された総称束縛

は,総称引用仕様を拡張する。

注記

4.43

総称手続名の場合とは異なり,総称型束縛手続名は,それと同じ型をもつ個別型束縛手続名と

同じ名前であってはならない(

16.2

参照)。

型定義が束縛

PRIVATE

文を含むとき,型の手続束縛の暗黙の参照許可属性は非公開とし,束縛

PRIVATE

文を含

まないとき,公開とする。手続束縛の参照許可属性は,参照許可指定子によって明示的に指定してもよい。明示的な

指定がない場合は,宣言された暗黙の型定義による参照許可属性とする。

公開の型束縛手続は,その型のすべての参照可能な型の実体から参照可能とする。非公開の型束縛手続は,その型

定義を含むモジュールの中でだけ参照可能とする。

注記

4.44

型束縛手続の参照許可属性は,成分定義部の

PRIVATE

文の影響を受けない。データ成分の参

照許可属性は,型束縛手続部の

PRIVATE

文の影響を受けない。

4.5.5

後始末サブルーチン

R454

後始末束縛

is

FINAL

[

::

]

後始末サブルーチン名並び

C473

(R454)

後始末サブルーチン名は,ちょうど一つの仮引数をもつモジュール手続の名前でなければなら

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

49

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ない。その引数は,省略不可であり,定義しようとする派生型の,ポインタでもなく,割付け変数でもな

く,多相的でもない変数でなければならない。仮引数は,

INTENT(OUT)

であってはならない。

C474

(R454)

同じ型に対して,後始末サブルーチン名を

2

回以上指定してはならない。

C475

(R454)

同じ型に対して,同じ種別型パラメタ 及び 同じ次元数をもった仮引数をもつ後始末サブルーチ

ン名を

2

回以上指定してはならない。

キーワード

FINAL

は,後始末サブルーチン

(final subroutine)

の並びを指定する。後始末サブルーチンは,その型

のデータ要素が後始末されるときに実行される(

4.5.5.1

参照)。

派生型が後始末可能

(finalizable)

であるとは,後始末サブルーチンをもっているか,又は ポインタでもなく割付け

成分でもない,後始末可能である型の成分をもっている場合とする。ポインタでないデータ要素は,その型が後始末

可能であるとき,後始末可能とする。

注記

4.45

後始末サブルーチンは,結果的には常に参照可能である。その型の参照許可属性,他の型束縛

手続 又は サブルーチン名自体によらず,要素を後始末するために後始末サブルーチンが呼ばれる。

注記

4.46

後始末サブルーチンは,型拡張による継承も上書きもできない。親型の後始末サブルーチンは,

直接拡張型の後始末サブルーチンが呼ばれた後に呼ばれる。

4.5.5.1

後始末の処理

後始末可能な要素だけが,後始末できる。要素が後始末される

(finalized)

とき,次の手順が順番に実施される。

(1)

要素の実行時の型が後始末サブルーチンをもち,その仮引数が後始末される要素と同じ種別型パラメタ 及び 同

じ次元数をもつ場合,その要素を実引数として後始末サブルーチンが呼び出される。そうでなくて,仮引数が後

始末される要素と同じ種別型パラメタをもつ要素別後始末サブルーチンが存在する場合は,その要素を実引数と

して後始末サブルーチンが呼び出される。そうでもなければ,この時点でサブルーチンは呼び出されない。

(2)

型定義に書かれた後始末可能な成分が,後始末される。後始末されようとしている要素が配列のとき,要素の配

列要素の後始末可能な成分が,個別に後始末される。

(3)

要素が直接拡張型であって,その親型が後始末可能であるとき,親成分は,後始末される。

複数の要素が,

4.5.5.2

で示す条件の結果として後始末されるとき,後始末される順序は,処理系依存とする。後

始末サブルーチンは,既に後始末されている実体を引用も確定もしてはならない。

実体が後始末されていないとき,定義された状態は保持され,不定になることはない。

4.5.5.2

後始末される時期

ポインタが解放されると,その指示先は後始末される。割付け要素が解放されると,その要素は後始末される。

仮引数でも関数結果でもない,ポインタでもなく割付け実体でもない実体は,

RETURN

文 又は

END

文の実行に

よって未定義になる(

16.5.6

(

3

)

参照)直前に後始末される。実体がモジュール内で定義され,かつ そのモジュー

ルを参照する活動状態にある手続が存在しないとき,その実体が後始末されるかどうかは,処理系依存とする。

実行可能な構造構文が関数を参照しているとき,関数結果は,その参照を含む最も内側の実行可能な構造構文の実

行後に後始末される。

実行可能な構造構文が構造体構成子 又は 配列構成子を参照しているとき,その構成子で生成された要素は,その

参照を含む最も内側の実行可能な構造構文の実行後に後始末される。

有効域内の宣言式が関数を参照しているとき,関数結果は,その有効域内の実行構文の実行の直前に後始末される。

有効域中の宣言式が構造体構成子 又は 配列構成子を引用しているとき,構成子によって生成された要素は,その

有効域の実行構文の実行の前に後始末される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

50

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

手続が呼び出されるとき,

INTENT(OUT)

属性をもつ仮引数と結合する実引数であり,ポインタでもなく割付け

実体でもない実体は,後始末される。

組込み代入が実行されるとき,変数は,式の評価後 かつ その変数の確定前に後始末される。

注記

4.47

記憶域の管理のために後始末を使うときは,利用者定義代入と組み合わせて使うことが多い。

実体がポインタ割付けによって割り付けられ,その後,ポインタ結合の状態が変更されたためにその実体へのすべ

てのポインタが到達不可能になった場合,後始末されるかどうかは,処理系依存とする。後始末されるときに,後始

末サブルーチンがいつ呼び出されるかは,処理系依存とする。

4.5.5.3

後始末されない要素

誤り条件(例えば,割付け処理の失敗など)又は

STOP

文 若しくは

END PROGRAM

文の実行のいずれかによっ

てプログラムの実行が終了した場合,終了の直前に存在していた要素は,後始末されない。

注記

4.48

SAVE

属性をもつか 又は 主プログラムで生成された,ポインタでもなく割付け実体でもない

実体は,

RETURN

文 又は

END

文の実行の直接の結果で後始末されることはない。

モジュール内の変数は,その定義状態 及び 値を保持しているとき,そのモジュールを参照する活

動状態にある手続が存在しなくても,後始末されない。

4.5.6

型の拡張

拡張可能型

(extensible type)

は,

BIND

属性をもたない非連続の派生型とする。

基底型

(base type)

は,

EXTENDS

属性をもたない拡張可能型とする。直接拡張型

(extended type)

は,

EXTENDS

属性をもつ型とする。直接拡張型の親型

(parent type)

は,

EXTENDS

属性に指定する型名とする。

注記

4.49

親型の名前は,

USE

文を使って変更した局所名でもよい。

基底型は,それ自体だけの拡張型

(extension type)

とする。直接拡張型は,それ自体 及び その親型が拡張型であ

るすべての型の拡張型とする。

抽象型

(abstract type)

は,

ABSTRACT

属性をもつ型とする。

4.50

遅延束縛

(

4.5.4

)

は,型束縛手続の実現をその型の拡張まで遅延する。遅延束縛は,抽象型のと

きだけ書くことができる。実体の実行時の型は抽象型にならないので,遅延束縛は呼び出されない。

遅延束縛がないときは,抽象型の拡張が抽象型である必要はない。抽象型の例を次に示す。

TYPE, ABSTRACT :: FILE_HANDLE

CONTAINS

PROCEDURE(OPEN_FILE), DEFERRED, PASS(HANDLE) :: OPEN

...

END TYPE

より詳細な例を,

C.1.4

に示す。

4.5.6.1

継承

直接拡張型は,親型のすべての型パラメタ,すべての成分,及び 上書き

(

4.5.6.2

)

も後始末もしない手続束縛を含

む。これらは,親型から直接拡張型へ継承

(inherit)

されるという。継承は,これらが親型においてもっていたすべて

の属性を保持する。直接拡張型の派生型定義によって,型パラメタ,成分 及び 手続束縛を加えることができる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

51

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

4.51

親型の参照不可の成分 及び 束縛も継承される。しかし,これらは直接拡張型においても参照

不可のままである。拡張しようとする型が参照結合によって参照され,非公開の要素をもつとき,参

照不可の要素が発生する。

注記

4.52

基底型は,成分,束縛 又は パラメタをもつ必要はない。直接拡張型は,親型より多くの成分,

束縛 又は パラメタをもつ必要はない。

直接拡張型は,親型の型 及び 型パラメタをもつ,スカラであってポインタでも割付け成分でもない親成分

(parent

component)

をもつ。この成分の名前は,親型名とする。この成分は,親型の参照許可属性をもつ。親成分の成分は,

親型から継承された対応する成分と継承結合されている

(inheritance associated)

という(

16.4.4

参照)。型の先祖成

(ancestor component)

は,その型の親成分 又は 親成分の先祖成分とする。

注記

4.53

直接拡張型で宣言された成分 又は 型パラメタの名前は,親型の参照可能な成分 又は 型パラメ

タの名前と同じであってはならない。

4.54

直接拡張型の例

TYPE POINT

!

基底型

REAL :: X, Y

END TYPE POINT

TYPE, EXTENDS(POINT) :: COLOR_POINT

! TYPE(POINT)

の拡張

!

成分

X

Y

及び 成分名

POINT

が親から継承されている。

INTEGER :: COLOR

END TYPE COLOR_POINT

4.5.6.2

型束縛手続の上書き

型定義で指定された総称束縛ではない束縛が,親型の束縛と同じ束縛名をもつとき,その型定義に指定した束縛が,

親型からの束縛を上書き

(override)

する。

上書きする束縛 及び 上書きされる束縛が満たすべき条件を,次に示す。

(1)

両方とも当該実体仮引数をもっているか,又は 両方とももっていないかでなければならない。

(2)

上書きされる束縛手続が純粋であるとき,上書きする束縛手続も純粋でなければならない。

(3)

両方とも要素別処理手続であるか,又は 両方とも要素別処理手続でないかでなければならない。

(4)

両方とも仮引数の個数が同じでなければならない。

(5)

当該実体仮引数が存在するとき,名前と位置が対応していなければならない。

(6)

位置が対応する仮引数は,当該実体仮引数の型を除いて,同じ名前 及び 特性をもたなければならない。

(7)

両方ともサブルーチンであるか 又は 同じ結果の特性

(

12.2.2

)

をもった関数でなければならない。

(8)

上書き束縛される手続が

PUBLIC

属性をもつとき,上書き束縛する手続は,

PRIVATE

属性をもってはなら

ない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

52

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

4.55

手続上書きの例。

4.42

を拡張している。

TYPE, EXTENDS (POINT) :: POINT_3D

REAL :: Z

CONTAINS

PROCEDURE, PASS :: LENGTH => POINT_3D_LENGTH

END TYPE POINT_3D

...

ここで,次の定義が同じモジュールのモジュール副プログラム部の中にあるとする。

REAL FUNCTION POINT_3D_LENGTH ( A, B )

CLASS (POINT_3D), INTENT (IN) :: A

CLASS (POINT), INTENT (IN) :: B

SELECT TYPE(B)

CLASS IS(POINT_3D)

POINT_3D_LENGTH = SQRT( (A%X-B%X)**2 + (A%Y-B%Y)**2 + (A%Z-B%Z)**2 )

RETURN

END SELECT

PRINT *, ’In POINT_3D_LENGTH, dynamic type of argument is incorrect.’

STOP

END FUNCTION POINT_3D_LENGTH

型定義で指定された総称束縛が,継承束縛と同じ総称指定をもつとき,総称引用仕様が拡張され,

16.2.3

で示され

た要件を満足しなければならない。

型定義で指定された総称束縛が,親から継承されたのと同じ派生型入出力総称指定をもつとき,派生型入出力総称

指定に対する型束縛の総称引用仕様が拡張され,

16.2.3

で示された要件を満足しなければならない。

後からの束縛が先の束縛と同じであるか,対応している束縛を上書きしているか,又は 対応している束縛を継承し

ているとき,型の束縛 及び その型の拡張の束縛は対応しているという。

4.5.7

派生型の値

成分値

(component value)

とは,次のものとする。

(1)

ポインタ成分の成分値は,そのポインタ結合とする。

(2)

割付け成分の成分値は,その割付け状態とし,割り付けられたときは,加えてその実行時の型,型パラメタ,上

下限 及び 値とする。

(3)

ポインタ成分でもなく割付け成分でもない成分の成分値は,その成分の値とする。

特定の派生型の値の集合は,その派生型の定義に合った成分値のすべての可能な列からなる。

4.5.8

派生型指定子

派生型指定子は,特定の派生型 及び 型パラメタを指定するために複数の文脈で使われる。

R455

派生型指定子

is

型名

[

(

型パラメタ指定並び

)

]

R456

型パラメタ指定

is

[

キーワード

=

]

型パラメタ値

C476

(R455)

型名は,参照可能な派生型の名前でなければならない。

C477

(R455)

型パラメタ指定並びは,型がパラメタをもつときだけ書かなければならない。

C478

(R455)

その型の各パラメタに対応して,高々一つの型パラメタ指定が存在しなければならない。型パラ

メタが暗黙の値をもっていないとき,その型パラメタに対応する型パラメタ指定が存在しなければなら

ない。

C479

(R456)

型パラメタ指定並びの型パラメタ指定に先行する

キーワード

=

を省略するときだけ,型パラメ

タ指定から

キーワード

=

を省略できる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

53

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C480

(R456)

キーワードは,その型のパラメタ名でなければならない。

C481

(R456)

仮引数 若しくは 結合名の宣言 又は 仮引数の割付けのいずれかのときだけ,型パラメタ指定の

型パラメタ値として

*

を使うことができる。

型パラメタのキーワードで指定されていない型パラメタ値は,型パラメタ順序

(

4.5.2.1

)

の型パラメタに対応する。

型パラメタのキーワードをもつとき,その値はキーワードによって名付けられる型パラメタに代入される。必要なら

ば,その値は,組込み代入の規則

(

7.4.1.3

)

に従って,型パラメタと同じ種別の値に変換される。

型パラメタ値を指定しない型パラメタの値は,その暗黙の値とする。

4.5.9

派生型の値の構成

派生型の定義は,対応する 構造体構成子

(structure constructor)

を暗黙的に定義し,これによってその派生型の値

を構成することができる。構成された値の型 及び 型パラメタは,派生型指定子によって指定される。

R457

構造体構成子

is

派生型指定子

(

[

成分指定並び

]

)

R458

成分指定

is

[

キーワード

=

]

成分データ源

R459

成分データ源

is

or

データ指示先

or

手続指示先

C482

(R457)

派生型指定子には,抽象型

(

4.5.6

)

を指定してはならない。

C483

(R457)

成分には,高々一つの成分指定を書くことができる。

C484

(R457)

成分が成分指定をもつとき,継承結合されたいかなる成分に対しても,成分指定を与えてはなら

ない。

C485

(R457)

成分は,暗黙の初期値設定をもたず,成分指定をもっているか暗黙の初期値設定をもっている他

の成分と継承結合していないとき,成分指定をもたなければならない。

C486

(R458)

その構成子中の先行する各成分指定から

キーワード

=

を省略するときだけ,成分指定から

キーワード

=

を省略できる。

C487

(R458)

キーワードは,その型の成分の名前でなければならない。

C488

(R457)

型名 及び 成分指定が書かれた型のすべての成分は,構造体構成子を含んでいる有効域内で参照

可能でなければならない。

C489

(R457)

派生型指定子が総称名と同じ型名であるとき,成分指定並びは,総称引用として解決される

(

12.4.4.1

)

関数引用の有効な実引数指定並びであってはならない。

C490

(R459)

データ指示先は,手続ポインタではないポインタ成分に対応しなければならない。手続指示先

は,手続ポインタである成分に対応しなければならない。

C491

(R459)

データ指示先は,対応する成分と同じ次元数でなければならない。

注記

4.56

名前

(

)

の形は,可能であれば,総称関数引用として解釈される。総称関数引用として解釈

できないときだけ,構造体構成子と解釈される。

成分キーワードが存在しないとき,成分データ源には対応する成分が成分順序

(

4.5.3.5

)

に従って代入される。成

分キーワードが存在するとき,キーワードによって名付けられた成分に式が代入される。ポインタではない成分に対

して,その成分 及び 式の宣言時の型 及び 型パラメタは,

7.4.1.2

7.8

で示した組込み代入文での変数 及び 式と

同様に適合しなければならない。必要ならば,その組込み型のそれぞれの値は,組込み代入の規則

(

7.4.1.3

)

に従っ

て型 及び 型パラメタが派生型の対応する成分と一致する値に変換される。ポインタでもなく割付け成分でもない成

分に対しては,式の形状は成分の形状と適合しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

54

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

暗黙の初期値設定が存在する成分が,対応する成分データ源をもたないとき,暗黙の初期値設定が,その成分に対

して適応される。

4.57

定義した成分順序に親成分を書くことはないので,親成分の成分値は,成分キーワードによって

だけ指定できる。

4.54

で示した型を用いた,等しい値の例を示す。

! x = 1.0, y = 2.0, color = 3

という成分をもった値を生成する。

TYPE(POINT) :: PV = POINT(1.0, 2.0)

!

ここで

TYPE(POINT)

の成分が

!

参照可能であるとする。

...

COLOR_POINT( point=point(1,2), color=3)

!

親成分に対する値を設定する。

COLOR_POINT( point=PV, color=3)

! TYPE(point)

が非公開の成分を

!

もっているときも有効である。

COLOR_POINT( 1, 2, 3)

!

すべての

TYPE(point)

の成分が

!

参照可能でなければならない。

構造体構成子は,引用している型を定義する前に書いてはならない。

4.58

4.17

の派生型定義を使用した派生型定数式の例

PERSON (21, ’JOHN SMITH’)

この例は,次のように書いてもよい。

PERSON (NAME = ’JOHN SMITH’, AGE = 21)

4.59

4.24

で定義した派生型

GENERAL POINT

を使った構成子の例

general_point(dim=3) ( (/ 1., 2., 3. /) )

ポインタ成分に対して,対応する成分データ源は,ポインタ代入文

(

7.4.2

)

中のそのようなポインタに対して許さ

れるデータ指示先 又は 手続指示先でなければならない。成分データ源がポインタのとき,成分の結合は,ポインタ

の結合とする。成分データ源がポインタでないとき,その成分は,その成分データ源とのポインタ結合とする。

4.60

例えば,変数

TEXT

が次のとおりに宣言

(

5.1

)

されていて,

CHARACTER, DIMENSION (1:400), TARGET :: TEXT

変数

BIBLIO

が,

4.31

の派生型定義

REFERENCE

TYPE (REFERENCE) :: BIBLIO

を使って宣言されているとき,

BIBLIO = REFERENCE (1, 1987, 1, "This is the title of the referenced &

&paper", TEXT)

この文は有効であり,実体

BIBLIO

のポインタ成分

SYNOPSIS

は,指示先実体

TEXT

と結合する。

派生型の成分が割付け成分である場合,対応する構成子の式は,引数をもたない組込み関数

NULL

の引用であるか,

同じ次元数をもった割付け要素であるか,又は 同じ次元数の要素と評価されるかのいずれかでなければならない。そ

の式が組込み関数

NULL

の引用である場合,構成子の対応する成分は,

割り付けられていない

状態をもつ。その式

が割付け要素である場合,構成子の対応する成分は,その割付け要素と同じ割付け状態をもつ。更に割付け状態が

割り付けられている

である場合,実行時の型,上下限 及び 値は同じとする。成分の長さ型パラメタが無指定であ

る場合,その値は,式の対応するパラメタと同じとする。その式が同じ次元数の要素と評価される場合,構成子の対

応する成分は,

割り付けられている

割付け状態をもち,式と同じ上下限 及び 値をもつ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

55

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

4.61

構成子が実引数であるとき,割付け成分の割付け状態は,結合する仮引数を通して使用可能と

なる。

4.5.10

派生型の演算 及び 代入

派生型要素の組込み代入は,

7.4.1

で規定する。この規格は,派生型の要素への組込み演算は規定しない。派生型

の要素に対するどの演算 又は 利用者定義代入

(

7.4.1.4

)

も,関数 又は サブルーチン,及び 総称引用仕様

(

4.5.1

12.3.2.1

)

によって明示的に定義しなければならない。

4.6

列挙体 及び 列挙子

列挙体は,列挙子の集合とする。列挙子は,整数型の名前付き定数とする。列挙体定義は,列挙体 及び その対応

する整数型の列挙子の集合を指定する。

R460

列挙体定義

is

列挙体定義文

列挙子定義文

[

列挙子定義文

] ...

列挙体定義終了文

R461

列挙体定義文

is

ENUM , BIND ( C )

R462

列挙子定義文

is

ENUMERATOR

[

::

]

列挙子並び

R463

列挙子

is

名前付き定数

[

=

スカラ整数初期値式

]

R464

列挙体定義終了文

is

END ENUM

C492

(R462)

列挙子に

=

を書いたとき,列挙子並びの前に,区切りの

2

連コロンを書かなければならない。

列挙体に対して,種別は,対応する言語

C

の列挙型と相互利用可能

(

15.2.1

)

となるように選択される。対応する

言語

C

の列挙型は,言語

C

の列挙体指定子(言語

C

の国際規格の

6.7.2.2

参照)で宣言される型とする。この列挙

体指定子は,列挙体定義で指定されたのと同じ値 及び 順序をもつ言語

C

の列挙定数を指定する。

連携処理系

(

2.5.10

)

は,同じ値を同じ順序で指定する言語

C

のすべての列挙体指定子で宣言される型に対して同

じ表現を用いるものでなければならない。

注記

4.62

連携処理系が,与えられた列挙型に対して符号なしの型を用いているとき,

Fortran

処理系は,

たとえ列挙子の幾つかの値が符号付き整数型では表現できないとしても,その列挙体に対して,同じ

範囲である符号付き整数型を用いる。どのような列挙体の値も,言語

C

の列挙体で宣言された値と相

互利用可能となる。

注記

4.63

言語

C

の国際規格は,列挙定数が言語

C

の整数型(言語

C

の国際規格の

6.7.2.2

)に収まるこ

とを保証している。したがって,

Fortran

処理系は,すべての列挙子の値を種別型パラメタ

C INT

もった整数型として評価できる。その後,対応する言語

C

の列挙型と相互利用可能な整数型の種別型

パラメタを決定することができる。

注記

4.64

言語

C

の国際規格は,二つの列挙型が同じ名前 及び 値を同じ順序でもつときだけ,整合性が

あると規定している。更にこの規格は,

Fortran

処理系の連携処理系となる言語

C

の処理系が,二つ

の列挙型の列挙定数の名前が異なっていても,値 及び 順序が同じであるときには,同じ表現を用い

ることを要求している。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

56

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

列挙子は,

PARAMETER

属性が明示的に宣言されたかのように扱われる。列挙子は,組込み代入

(

7.4

)

の規則に

従って定義され,値は次のとおりに決定される。

(1)

スカラ整数初期値式が指定されている場合,列挙子の値はスカラ整数初期値式の結果の値とする。

(2)

スカラ整数初期値式が指定されていない場合であって,列挙子が列挙体定義の最初の列挙子であるとき,列挙

子の値は

0

とする。

(3)

スカラ整数初期値式が指定されていない場合であって,列挙子が列挙体定義の最初の列挙子でないとき,列挙

子の値は,列挙体定義中の直前の列挙子の値に

1

を加えた値とする。

4.65

列挙体定義の例

ENUM, BIND(C)

ENUMERATOR :: RED = 4, BLUE = 9

ENUMERATOR YELLOW

END ENUM

この列挙体の種別型パラメタは,処理系依存である。しかし処理系は,列挙子の値である

4

9

10

表現するのに十分な種別を選択しなければならない。

次の宣言は,上記の宣言と等価である。

INTEGER(SELECTED_INT_KIND(2)), PARAMETER :: RED = 4, BLUE = 9, YELLOW = 10

次の例のように,列挙子の一つを引数とした組込み関数

KIND

を用いて,同じ種別型パラメタ値の

要素が宣言できる。

INTEGER(KIND(RED)) :: X

注記

4.66

列挙子の定義では,複数の

ENUMERATOR

文を用いるか,一つの

ENUMERATOR

文を用い

るかの違いはない。重要なのは,列挙体の定義時の列挙子の順序であり,

ENUMERATOR

文の個数

ではない。

4.7

配列値の構成

配列構成子

(array constructor)

は,スカラ値の列とする。配列構成子は,列中で指定された値を要素の値とする

1

次元配列として解釈される。

R465

配列構成子

is

(/

配列構成子指定

/)

or

左角括弧 配列構成子 右角括弧

R466

配列構成子指定

is

型指定子

::

or

[

型指定子

::

]

配列構成項目並び

R467

左角括弧

is

[

R468

右角括弧

is

]

R469

配列構成項目

is

or

配列構成

DO

形反復

R470

配列構成

DO

形反復

is

(

配列構成項目並び

,

配列構成

DO

制御

)

R471

配列構成

DO

制御

is

配列構成

DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

R472

配列構成

DO

変数

is

スカラ整変数

C493

(R472)

配列構成

DO

変数は,名前付き変数でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

57

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C494

(R466)

型指定子が省略されたとき,一つの配列構成子中の配列構成項目の式の型 及び 種別型パラメタ

は,すべて同じでなければならない。

C495

(R466)

型指定子が組込み型を指定するとき,一つの配列構成子中の配列構成項目の式の型は,

7.8

指定したとおりに型指定子の型の変数と型が適合する組込み型でなければならない。

C496

(R466)

型指定子が派生型を指定するとき,一つの配列構成子中の配列構成項目の式の型は,その派生型

であって,型指定子で指定した型と同じ種別型パラメタ値をもたなければならない。

C497

(R470)

配列構成

DO

形反復の配列構成

DO

変数に,その配列構成

DO

形反復に含まれる配列構成

DO

形反復の配列構成

DO

変数と同じ変数を指定してはならない。

型指定子が省略されたとき,配列構成子中のすべての配列構成項目の式は同じ長さ型パラメタをもたなければなら

ない。このとき,配列構成子の型 及び 型パラメタは,配列構成項目の式と同じとする。

型指定子を書いたとき,その型指定子は,配列構成子の型 及び 型パラメタを指定する。配列構成子中の配列構成

項目の式は,その型 及び 型パラメタの変数への組込み代入と型が適合しなければならない。それぞれの値は,組込

み代入

(

7.4.1.3

参照

)

の規則に従って配列構成子の型パラメタに変換される。

反復回数がゼロである配列構成

DO

形反復中の配列構成項目の文字長は,配列構成

DO

変数にも,初期値式ではな

い式の値にも,依存してはならない。

配列構成項目がスカラ式である場合,スカラ式の値は配列構成子の要素を指定する。配列構成項目が配列式の場合,

配列式の要素の値は,配列要素順序

(

6.2.2.2

)

に対応して配列構成子の要素の列を指定する。配列構成項目が配列構

DO

形反復である場合,配列構成

DO

形反復は,

DO

構文

(

8.1.6.4

)

と同じ配列構成

DO

変数の制御に従って展開

され,配列構成子の要素の列を形成する。

配列構成

DO

形反復におけるループの初期化 及び 実行は,

DO

構文と同じとする。

列が空のときは,その列は,大きさゼロの

1

次元配列を形成する。

4.67

組込み関数

RESHAPE

(

13.7.99

)

を用いた任意の正当な配列形状への

1

次元配列の変形

X = (/ 3.2, 4.01, 6.5 /)

Y = RESHAPE (SOURCE = [ 2.0, [ 4.5, 4.5 ], X ], SHAPE = [ 3, 2 ] )

この結果,

3

×

2

の配列となる

Y

の値は,次のとおりになる。

2.0

3.2

4.5

4.01

4.5

6.5

4.68

配列構成

DO

形反復をもつ配列構成子

(/ (I, I = 1, 1075) /)

[ 3.6, (3.6/I, I = 1, N) ]

4.69

型定義

PERSON

(

4.17

)

を参照した派生型配列値の構成

(/ PERSON (40, ’SMITH’), PERSON (20, ’JONES’) /)

4.70

型定義

LINE

4.28

)を参照し

2

次元配列を成分としてもつ派生型スカラ値の構成

LINE (RESHAPE ( (/ 0.0, 0.0, 1.0, 2.0 /), (/ 2, 2 /) ), 0.1, 1)

ここでは,組込み関数

RESHAPE

を用いて,座標

(0, 0)

から座標

(1, 2)

までの幅

0.1cm

の実線を表

現する値を構成している。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

58

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.71

大きさがゼロの配列構成子の例

(/ INTEGER :: /)

(/ ( I, I = 1, 0) /)

4.72

長さ型パラメタを指定する配列構成子の例

(/ CHARACTER(LEN=7) :: ’Takata’, ’Tanaka’, ’Hayashi’ /)

この配列構成子で型指定がない場合,すべての定数が同じ文字長でなければならない。

5

データ実体の宣言 及び 指定

すべてのデータ実体は,型 及び 次元数をもち,型パラメタ 及び 実体の使用法を決定するその他の性質をもつこ

ともできる。ひとまとめにして,これらの性質をデータ実体の 属性

(attribute)

という。 名前付きデータ実体の型は,

型宣言文

(type declaration statement)

によって明示的に指定するか,又は その名前の第

1

文字によって暗黙的に決

定する(

5.3

参照)。実体のすべての属性を一つの型宣言文に含めてもよいし,別々の宣言文で指定してもよい。

5.1

次の文は,

INCOME

及び

EXPENDITURE

という名前の二つのデータ実体を整数型であると宣言する。

INTEGER :: INCOME, EXPENDITURE

次の文は,

X

Y

及び

Z

という名前の三つのデータ実体を宣言する。

REAL, DIMENSION (-5:+5) :: X, Y, Z

これらは三つとも,基本実数型であり,下限が

5

,上限が

+5

,大きさが

11

1

次元の形状明示

配列となる。

5.1

型宣言文

R501

型宣言文

is

宣言型指定子

[ [

,

属性指定子

] ...

::

]

データ要素宣言並び

R502

宣言型指定子

is

組込み型指定子

or

TYPE (

派生型指定子

)

or

CLASS (

派生型指定子

)

or

CLASS (

*

)

C501

(R502)

宣言型指定子において,

:

及び

*

以外の型パラメタ値は,宣言式でなければならない。

C502

(R502) “

CLASS(

派生型指定子

)

の場合,その派生型指定子には,拡張可能型を指定しなければならない。

注記

5.2

宣言型指定子は,非実行文中で使われる。型指定子は,配列構成子,

SELECT TYPE

構成子 又

ALLOCATE

文中で使われる。

C503

(R502) “

TYPE(

派生型指定子

)

の場合,その派生型には,抽象型(

4.5.6

参照)を指定してはならない。

R503

属性指定子

is

参照許可指定子

or

ALLOCATABLE

or

ASYNCHRONOUS

or

DIMENSION (

配列形状指定

)

or

EXTERNAL

or

INTENT (

授受特性指定

)

or

INTRINSIC

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

59

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

言語束縛指定子

or

OPTIONAL

or

PARAMETER

or

POINTER

or

PROTECTED

or

SAVE

or

TARGET

or

VALUE

or

VOLATILE

R504

データ要素宣言

is

実体名

[

(

配列形状指定

)

] [

*

文字長

] [

初期値指定

]

or

関数名

[

*

文字長

]

C504

(R504)

データ要素宣言中に現れる

:

*

以外の文字長中の型パラメタ値は,宣言式でなければな

らない。

R505

実体名

is

名前

C505

(R505)

実体名は,データ実体の名前でなければならない。

R506

初期値指定

is

=

初期値式

or

=>

空初期化

R507

空初期化

is

関数引用

C506

(R507)

関数引用は,引数なしの組込み関数

NULL

の引用でなければならない。

C507

(R501)

同じ属性指定子を,一つの型宣言文中で

2

回以上指定してはならない。

C508

一つのデータ要素には,一つの有効域内で,どの属性も

2

回以上明示的に指定してはならない。

C509

(R501)

CLASS

によって宣言された要素は,仮引数であるか,

ALLOCATABLE

属性 又は

POINTER

性をもっていなければならず,

VALUE

属性をもってはならない。

C510

(R501) POINTER

属性 又は

ALLOCATABLE

属性をもって宣言された配列は,無指定上下限並び

5.1.2.5.3

参照)の形の配列形状指定で指定しなければならない。

C511

(R501) ALLOCATABLE

属性 及び

POINTER

属性をもたない関数結果としての実体名に対する配列形

状指定は,明示上下限並びでなければならない。

C512

(R501) POINTER

属性を指定したとき,

ALLOCATABLE

属性,

TARGET

属性, 及び

INTRINSIC

属性は指定してはならない。

C513

(R501) TARGET

属性を指定したとき,

POINTER

属性,

EXTERNAL

属性,

INTRINSIC

属性 及び

PARAMETER

属性は指定してはならない。

C514

(R501) PARAMETER

属性は,仮引数,ポインタ,割付け要素,関数 及び 共通ブロック中の実体には

指定してはならない。

C515

(R501) INTENT

属性,

VALUE

属性 及び

OPTIONAL

属性は,仮引数に対してだけ指定してよい。

C516

(R501) INTENT

属性は,

POINTER

属性をもたない仮手続には指定してはならない。

C517

(R501) SAVE

属性は,共通ブロック中の個々の実体,仮引数,手続,関数結果,自動割付けデータ実体

及び

PARAMETER

属性をもつ実体には指定してはならない。

C518

一つのデータ要素は,

INTRINSIC

属性をもつとき,

EXTERNAL

属性をもつことはできない。

C519

(R501)

データ要素宣言並び中の関数以外のデータ要素には,

EXTERNAL

属性 及び

INTRINSIC

属性

を指定してはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

60

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C520

(R504) “

*

文字長

は,型指定が文字型である場合にだけ指定してよい。

C521

(R504)

関数名は,外部関数,組込み関数,仮手続関数,手続ポインタ 又は

文関数

の名前でなければな

らない。

C522

(R501) PARAMETER

属性(

5.1.2.10

参照)があるときは,初期値指定を省略してはならない。

C523

(R501)

初期値指定を書いたとき,そのデータ要素宣言並びの前の区切りの

2

連コロンを省略してはなら

ない。

C524

(R504)

初期値指定は,実体名が仮引数,関数結果,型宣言が初期値設定プログラム単位以外にある名前

付き共通ブロック中の実体,無名共通ブロック中の実体,割付け変数,外部名,組込み名 又は 自動割付

け実体のいずれかであるならば,指定してはならない。

C525

(R504)

初期値指定に

=>

を書いたとき,実体は,

POINTER

属性をもたなければならない。初期値指

定に

=

を書いたとき,実体は,

POINTER

属性をもってはならない。

C526

(R501) VOLATILE

属性を指定したとき,

PARAMETER

属性,

INTRINSIC

属性,

EXTERNAL

属性,

及び

INTENT(IN)

属性は,指定してはならない。

C527

(R501) VALUE

属性を指定したとき,

PARAMETER

属性,

EXTERNAL

属性,

POINTER

属性,

ALLO-

CATABLE

属性,

DIMENSION

属性,

VOLATILE

属性,

INTENT(INOUT)

属性 及び

INTENT(OUT)

属性は,指定してはならない。

C528

(R501) VALUE

属性を指定したとき,長さ型パラメタ値は,省略するか,初期値式で指定しなければな

らない。

C529

(R501) VALUE

属性は,仮手続に対して指定してはならない。

C530

(R501) ALLOCATABLE

属性,

POINTER

属性 及び

OPTIONAL

属性は,手続言語束縛指定子をもつ

手続の仮引数に対して指定してはならない。

C531

(R503)

言語束縛指定子は,モジュールの宣言部にだけ書くことができる。

C532

(R501)

言語束縛指定子で宣言された要素は,相互利用可能変数(

15.2

参照)でなければならない。

C533

(R501)

言語束縛指定子が

NAME

指定子とともに指定された場合,データ要素宣言並びはただ一つの

データ要素宣言でなければならない。

C534

(R503) PROTECTED

属性は,モジュールの宣言部にだけ書くことができる。

C535

(R501) PROTECTED

属性は,共通ブロック中にない手続ポインタ 又は 名前付き変数に対してだけ指

定できる。

C536

(R501) PROTECTED

属性を指定したとき,

INTRINSIC

属性 及び

PARAMETER

属性は,指定して

はならない。

PROTECTED

属性と

EXTERNAL

属性を同時に指定するときは,

POINTER

属性も指定

しなければならない。

C537

PROTECTED

属性をもつポインタでない実体が参照結合で参照された場合,その実体は,変数定義文

脈(

16.5.7

参照) 及び ポインタ代入文中のデータ指示先 又は 手続指示先に現れてはならない。

C538

PROTECTED

属性をもつポインタである実体が参照結合で参照された場合,それは,次のいずれにも

現れてはならない。

(1)

NULLIFY

文中のポインタ実体

(2)

ポインタ代入文中のデータポインタ実体 又は 手続ポインタ実体

(3)

ALLOCATE

文中 又は

DEALLOCATE

文中の割付け実体

(4)

仮引数に

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもつポインタがあるような手続

を引用するとき,その仮引数に結合する実引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

61

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

一つの有効域内で個別組込み関数を識別する名前は,

13.6

で規定する型をもつ。明示的な型宣言文は,必要ではな

いが,指定してもよい。型宣言文中に総称組込み関数名を書いて型を指定しても,その関数の総称性は失われない。

関数結果は,

POINTER

属性 又は

ALLOCATABLE

属性をもつとして宣言してよい。

配列形状指定,長さ型パラメタに対応する宣言型指定子中の型パラメタ値 又は データ要素宣言中の文字長中に現

れる宣言式は,引用仕様本体

(

12.3.2.1

)

,副プログラムの宣言部 又は

FUNCTION

文の型指定子

(

12.5.2.1

)

以外で

は,初期値式でなければならない。データ実体が,初期値式ではない宣言式の値に依存して宣言されていて,かつ 仮

引数でないとき,その実体を 自動割付けデータ実体

(automatic data object)

と呼ぶ。

注記

5.3

自動割付けデータ実体は,

SAVE

文 及び

DATA

文に書いてはならないし,

SAVE

属性をもって

宣言したり,

=

初期値式

によって初期確定にしてはならない。

宣言型指定子 又は データ要素宣言中の文字長中の型パラメタが初期値式以外の式によって確定になったとき,そ

の型パラメタの値は,手続に入る時に定まり,手続の実行中に宣言式中の変数が再確定されたり不定になったりして

も,その影響を受けない。

データ要素宣言が初期値指定を含み,実体名が

PARAMETER

属性をもたない場合,その要素は,明示的に初期化

された変数とする。変数が暗黙的初期値指定をもつ派生型でなければ,明示的な初期化を

DATA

文で行うこともでき

る。初期値指定が

=

初期値式

であるとき,その実体は,組込み代入の規則(

7.4.1.3

参照)に従って,型,型パラ

メタ,形状が実体名に一致するように変換された後,初期値式によって決まる値で確定になる。一つの変数 又は そ

の一部分に対して,プログラム中で

2

回以上明示的に初期値を指定してはならない。変数が配列であるとき,その変

数は,その型宣言文 又は それより前にある同じ有効域内の属性宣言文で形状が指定されていなければならない。

初期値指定が

=>

空初期化

であるとき,実体はポインタでなければならず,その初期の結合状態は空状態になる。

初期値指定をもつ実体は,名前付き共通ブロック中の実体 及び

PARAMETER

属性をもつ実体を除いて,暗黙的

に保存される。この暗黙の

SAVE

属性は,型宣言文中に

SAVE

属性を書くこと,

SAVE

文(

5.2.12

参照)にその実

体名を指定すること, 又は 同じ有効域内で保存要素並びを使わずに

SAVE

文で指定することによって明示的に確認

してもよい。

5.4

型宣言文の例を次に示す。

REAL A (10)

LOGICAL, DIMENSION (5, 5) :: MASK1, MASK2

COMPLEX :: CUBE_ROOT = (-0.5, 0.866)

INTEGER, PARAMETER :: SHORT = SELECTED_INT_KIND (4)

INTEGER (SHORT) K

!

範囲は少なくとも

-9999

9999

である。

REAL (KIND (0.0D0)) A

REAL (KIND = 2) B

COMPLEX (KIND = KIND (0.0D0)) :: C

CHARACTER (LEN=10, KIND = 2)

A

CHARACTER B, C *20

TYPE (PERSON) :: CHAIRMAN

TYPE(NODE), POINTER :: HEAD => NULL ( )

TYPE (humongous_matrix (k=8, d=1000)) :: mat

(最後の例は

4.24

で宣言した型を使っている。)

5.1.1

宣言型指定子

型宣言文中の 宣言型指定子

(declaration type specifier)

は,データ要素宣言並び中のデータ要素に対してその型を

指定する。この明示的な型宣言は,要素名の第

1

文字によって示される暗黙の型(

5.3

参照)を確認してもよいし,そ

れを上書きしてもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

62

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

型宣言文中の組込み型指定子は,組込み型のデータ要素に対してその型を指定する。

5.1.1.1

TYPE

指定子は,派生型のデータ要素の型を指定する。

データ要素が

TYPE

指定子を用いて明示的に宣言されている場合,指定された派生型は,有効域内でそれ以前に定

義されているか 又は 参照結合か親子結合によって参照可能になっていなければならない。データ要素が関数結果で

ある場合,関数結果の型となる派生型は,関数の本体中で定義されているか 又は 参照結合 若しくは 親子結合によっ

て参照可能になっているならば,

FUNCTION

文で指定してもよい。特に関数本体中で定義されている場合,指定さ

れた派生型の派生型定義の直後で,その関数の関数結果変数がその派生型で宣言されているのと同じ効果をもつ。

派生型のスカラデータ要素を構造体という。派生型が

SEQUENCE

の指定をもつ場合,その型をもつスカラ要素

を連続型構造体という。

5.1.1.2

クラス

プログラムの実行中に異なる型をもつことができるデータ要素を,多相的

(polymorphic)

データ要素という。プ

ログラム実行中の一時点におけるデータ要素の型を 実行時の型

(dynamic type)

という。データ要素の 宣言時の型

(declared type)

とは,明示的 又は 暗黙的に宣言された型のことをいう。

CLASS

指定子は,多相的実体を宣言するのに使われる。

CLASS

指定子が型名を含むとき,それが多相的実体の宣

言時の型になる。

CLASS(*)

指定子で宣言された実体は,無制限多相的

(unlimited polymorphic)

であるという。無制限多相的デー

タ要素は,型をもつものとして宣言しない。更に,別の無制限多相的データ要素を含む,すべての他の要素と宣言時

の型が同じであるとはみなさない。

データ要素が多相的でないとき,同一の宣言時の型をもつデータ要素だけと 型が適合する

(type compatible)

。多

相的データ要素が無制限多相的でなければ,型が適合するデータ要素は,同一の宣言時の型をもつものか 又は その

直接拡張型のものとする。無制限多相的データ要素は,宣言時の型をもつとはみなされない。ただし,すべてのデー

タ要素と型が適合する。データ要素がある型と

型が適合している

とは,その型のデータ要素と型が適合している

こととする。

二つのデータ要素の 型が適合しない

(type incompatible)

とは,双方とも,互いに型が適合していないことを指す。

データ要素が他の要素と

TKR

適合する

(TKR compatible; type, kind, and rank compatible)

とは,そのデータ要素

が対象となるデータ要素と型が適合し,両者の種別型パラメタが同一であり,更に次元数が一致していることをいう。

多相的割付け実体は,適合する型のうち任意の型のものを割り付けてよい。多相的ポインタ 又は 多相的仮引数は,

プログラムの実行中,型が適合している実体と結合してよい。

割り付けられた割付け多相的実体の実行時の型は,割付け時の型とする。結合状態にある多相的ポインタの実行時

の型は,指示先の実行時の型とする。割付け実体でなく,かつ ポインタでない多相的仮引数の実行時の型は,それが

結合している実引数の実行時の型とする。割付け状態にない割付け実体であるか 又は 空状態のポインタであるとき,

その実行時の型は,その宣言時の型とする。結合名(

8.1.4

)をもつ実体の実行時の型は,それが結合された選択子の

実行時の型とする。多相的でない実体の実行時の型は,その宣言時の型とする。

注記

5.5

多相的実体の宣言時の型に限り,成分を部分参照で特定できる(

6.1.2

参照)。

5.1.2

属性

型宣言文の属性指定子で指定できる付加的な属性は,宣言されるデータ要素の性質 及び プログラム中での使用上

の制限を指定する。

5.1.2.1

参照許可属性

参照許可属性

(accessibility attribute)

は,言語要素の参照可能性を指定する。指定は,識別子に対して行う。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

63

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R508

参照許可指定子

is

PUBLIC

or

PRIVATE

C539

(R508)

参照許可指定子は,モジュールの宣言部にだけ書くことができる。

モジュール内で指定されるか 又は 参照結合によって参照可能になっている識別子は,

PUBLIC

属性 又は

PRIVATE

属性をもつ。モジュール内で参照許可指定子が明示的に指定されていない識別子は,そのモジュール内での暗黙の参

照許可属性をもつ。モジュールの暗黙の参照許可属性は,公開

(PUBLIC)

とする。ただし,

PRIVATE

文(

5.2.1

照)で変更することができる。モジュール内で参照結合によって参照できる識別子は,

PUBLIC

属性をもつものだけ

とする。

注記

5.6

識別子が参照結合によって参照できるには,それが参照先のモジュール内で

PUBLIC

属性をもっ

ていなければならない。それとは別に,参照結合によって参照する側のモジュール内では

PRIVATE

属性をもつことができる。この場合,

PRIVATE

属性をもつモジュールからは,参照結合できない。

5.7

参照許可指定の例を次に示す。

REAL, PRIVATE :: X, Y, Z

5.1.2.2 ALLOCATABLE

属性

ALLOCATABLE

属性

(ALLOCATABLE attribute)

をもつ実体とは,

ALLOCATE

文(

6.3.1

参照)又は 組込み

代入文(

7.4.1.3

参照)で領域が割り付けられるもののことである。

5.1.2.3 ASYNCHRONOUS

属性

ASYNCHRONOUS

属性

(ASYNCHRONOUS attribute)

は変数が非同期入出力に従うかどうかを指定する。

次の条件がいずれも満たされる場合,変数の基底実体は,有効域内で

ASYNCHRONOUS

属性をもたなければなら

ない。

(1)

変数が,有効域内で,実行文 又は 宣言式中に現れている。

(2)

変数が未了入出力記憶列の作用子

(

9.5.1.4

)

である間に,有効域内の任意の文が実行中である。

非同期入出力文

(

9.5.1.4

)

で変数を使用することによって,暗黙のうちに

ASYNCHRONOUS

属性をもつことが

ある。

実体は,ある有効域(

11.2.1

及び

16.4.1.3

参照)内で

ASYNCHRONOUS

属性をもたなくても,他の有効域内で

もつ場合がある。実体が

ASYNCHRONOUS

属性をもつ場合,その部分実体は,すべて

ASYNCHRONOUS

属性を

もつ。

注記

5.8

ASYNCHRONOUS

属性は,有効域が実行中に,未了入出力記憶列(非同期入出力が実行され

る実際の記憶場所)と結合されている変数に対して指定する。この情報は,コンパイラが,ある種の

コード移動最適化を抑止するのに使うこともできる。

ASYNCHRONOUS

属性は,

VOLATILE

属性と似ている。非同期入出力がある場合のコード移動

最適化の補助情報として使うことができる。

5.1.2.4

データ要素の

BIND

属性

BIND

属性

(BIND attribute)

は,それを指定した変数 又は 共通ブロックが,外部結合(

15.3

参照)をもつ言語

C

の変数と相互利用可能であることを指定する。

R509

言語束縛指定子

is

BIND ( C

[

, NAME

=

スカラ文字初期値式

]

)

C540

(R509)

スカラ文字初期値式は,基本文字型の種別をもたなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

64

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

スカラ文字初期値式の最初と最後の連続する空白を無視した値が,

1

以上の長さであるとき,それは連携処理系の

側にとって有効な識別子でなければならない。

注記

5.9

言語

C

の国際規格では,

C

の基本文字集合以外の文字を含む

C

の識別子を生成する機能を規定

している。このような

C

の識別子は国際文字名と呼ばれている(言語

C

の国際規格の

6.4.3

参照)。

この場合,基本文字型で使われる表現方法では表現できない文字を含む可能性があり,その

C

のデー

タ要素は

Fortran

から参照できない。

BIND

属性をもつものは,自動的に

SAVE

属性をもつ。ただし,

SAVE

文を指定して,明示的に確認してもよい。

注記

5.10

データ要素に対して

BIND

属性を指定しても,連携処理系にとって何らかの効果が現れるとは

限らない。

5.1.2.5 DIMENSION

属性

DIMENSION

属性

(DIMENSION attribute)

は,データ要素が配列であることを指定する。次元数 及び 形状は,

配列形状指定がデータ要素宣言中にあればそれによって,なければ

DIMENSION

属性指定子中の配列形状指定によっ

て指定する。型宣言文で配列を宣言するためには,

DIMENSION

属性指定子を書くか,データ要素宣言に配列形状指

定を書かなければならない。データ要素宣言に配列形状指定を書くと,そのデータ要素に

DIMENSION

属性が指定

される。これらの代わりに

DIMENSION

属性を,

DIMENSION

, ALLOCATABLE

, POINTER

, TARGET

文 又は

COMMON

文のそれぞれの単純宣言文で指定することもできる。

R510

配列形状指定

is

明示上下限並び

or

引継ぎ上下限並び

or

無指定上下限並び

or

大きさ引継ぎ配列形状指定

C541

(R510)

次元数は,最大

7

次元とする。

5.11

DIMENSION

属性指定の例を次に示す。

SUBROUTINE EX (N, A, B)

REAL, DIMENSION (N, 10) :: W

!

自動割付け形状明示配列

REAL A (:), B (0:)

!

形状引継ぎ配列

REAL, POINTER :: D (:, :)

!

配列ポインタ

REAL, DIMENSION (:), POINTER :: P

!

配列ポインタ

REAL, ALLOCATABLE, DIMENSION (:) :: E

!

割付け配列

5.1.2.5.1

形状明示配列

形状明示配列

(explicit-shape array)

とは,明示上下限並びで宣言される名前付き配列とする。明示上下限並びは,

その配列の各次元の上下限を明示的な値で指定する。

R511

明示上下限

is

[

下限

:

]

上限

R512

下限

is

宣言式

R513

上限

is

宣言式

C542

(R511)

上下限が初期値式でない形状明示配列は,副プログラム 又は 引用仕様本体の中でだけ宣言で

きる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

65

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

自動割付け配列

(automatic array)

とは,副プログラム 又は 引用仕様本体の中で宣言され,仮引数ではなく,初期

値式でない上下限をもつ形状明示配列とする。

形状明示配列が初期値式でない上下限をもつとき,その上下限 及び 配列の形状は,手続に入る時に,その上下限

の式を評価して決まる。そのような配列の上下限は,その手続の実行中に宣言式を構成する変数が再確定されたり不

定になったりしても影響を受けない。

それぞれの下限 及び 上限は,配列のそれぞれの次元の上下限 及び その次元の寸法を決定する。下限 及び 上限の

値は,正,負 又は ゼロであってよい。その次元の添字範囲は,上限が下限よりも小さくなければ,下限から上限まで

の整数値とする。上限が下限より小さいとき,添字範囲は空,その次元の寸法はゼロ,配列の大きさはゼロとする。

下限を省略したとき,その暗黙値は

1

とする。次元数は,指定した上下限の組の個数とする。

5.1.2.5.2

形状引継ぎ配列

形状引継ぎ配列

(assumed-shape array)

とは,結合される実引数配列から形状を引き継ぐ,ポインタでない仮引数

配列とする。

R514

引継ぎ上下限

is

[

下限

]

:

次元数は,引継ぎ上下限並び中のコロンの個数とする。

形状引継ぎ配列の各次元の寸法は,結合している実引数配列の対応する次元の寸法とする。下限の値が

d

であり,

結合している実引数配列の対応する次元の寸法が

s

であれば,上限の値は

s

+

d

1

とする。下限の値は,指定した

ときはその値とし,省略したときは

1

とする。

5.1.2.5.3

形状無指定配列

形状無指定配列

(deferred-shape array)

とは,割付け配列 又は 配列ポインタとする。

割付け配列

(allocatable array)

とは,

ALLOCATABLE

属性 及び 指定された次元数をもつ配列とする。その上下

限 及び 形状は,割付け時 又は 引数結合時に決まる。

ALLOCATABLE

属性をもつ配列は,無指定上下限並びを用いて宣言しなければならない。

配列ポインタ

(array pointer)

は,

POINTER

属性 及び 指定された次元数をもつ配列とする。その上下限 及び 形

状は,指示先に結合される時に決まる。

POINTER

属性をもつ配列は,無指定上下限並びを用いて宣言しなければな

らない。

R515

無指定上下限

is

:

次元数は,無指定上下限並び中のコロンの個数とする。

割り付けられていない割付け配列 及び 空状態の配列ポインタの大きさ,上下限 及び 形状は,不定とする。その

ような配列のいかなる部分も,確定してはならないし引用してもならない。ただし,

13.1

で指定する組込み問合せ関

数の引数としては書いてもよい。

割付け配列の各次元の下限 及び 上限の値は,配列を割り付けた時に指定した値とする。

配列ポインタの各次元の上下限は,次の二つの方法で指定できる。

(1)

ALLOCATE

(

6.3.1

)

で指示先を割り付ける時に指定する。

(2)

ポインタ代入

(

7.4.2

)

で指定する。

配列指示先 及び 割付け配列の上下限は,上下限の宣言式中の変数が後で再確定されたり不定になったりしても影

響を受けない。

5.1.2.5.4

大きさ引継ぎ配列

大きさ引継ぎ配列

(assumed-size array)

は,結合される実引数からその大きさを引き継ぐ仮引数配列とする。次元

数 及び 寸法は,実引数配列と仮引数配列との間で異なっていてもよく,実引数配列の大きさだけが,仮引数配列に

引き継がれる。大きさ引継ぎ配列は,大きさ引継ぎ配列形状指定を用いて宣言しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

66

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R516

大きさ引継ぎ配列形状指定

is

[

明示上下限並び

,

] [

下限

:

]

*

C543

大きさ引継ぎ配列形状指定は,仮引数の配列上下限の宣言以外に現れてはならない。

C544

INTENT(OUT)

属性をもつ大きさ引継ぎ配列は,多相的であってはならず,後始末可能な型,割付け可

能な末端成分をもつ型,及び 暗黙的初期値指定が指定された型であってはならない。

大きさ引継ぎ配列の大きさの決定は,次による。

(1)

大きさ引継ぎ配列と結合される実引数が基本文字型以外の型の配列であるとき,大きさは,実引数配列の大きさ

とする。

(2)

大きさ引継ぎ配列と結合される実引数が基本文字型以外の型の配列要素であり,それが大きさ

x

の配列中の添字

順序値(

6.2.2.2

参照)

r

の要素であるとき,大きさは,

x

r

+ 1

とする。

(3)

実引数が基本文字型の配列,基本文字型の配列要素 又は 基本文字型の配列要素部分列(

6.1.1

参照)であり,そ

れが

c

文字記憶単位をもつ配列の第

t

文字記憶単位から始まるとき,その大きさは

MAX(INT((

c

t

+ 1)

/e

)

,

0)

とする。ここで

e

は,文字型仮配列の要素の長さとする。

(4)

実引数が配列要素 又は 配列要素部分列特定子ではない基本文字型スカラであるとき,仮配列の大きさは

MAX(INT

(

l/e

)

,

0)

であるとする。ここで

e

は,文字型仮配列の要素の長さとし,

l

は,実引数の長さとする。

次元数は,明示上下限の個数に

1

を足した数とする。

大きさ引継ぎ配列は,最後の次元の上限をもたない。したがって,最後の次元の寸法 及び 形状をもたない。大き

さ引継ぎ配列名は,形状を要求しない手続引用の実引数として以外,全体配列の引用を書いてはならない。

次元数

n >

1

であるとき,最初の

n

1

次元の上下限は,大きさ引継ぎ配列形状指定があれば,その中で明示上下

限並びによって指定した値とする。最後の次元の下限は,指定したときはその値とし,省略したときは

1

とする。大

きさ引継ぎ配列には,添字 又は 部分配列添字(

6.2.2.3

参照)を指定してもよい。最後の次元に添字三つ組を指定す

るときは,上限を省略してはならない。

大きさ引継ぎ配列が初期値式でない上下限をもつとき,その上下限は,手続に入る時に決まる。そのような配列の

上下限は,その手続の実行中に任意の変数が再確定されたり不定になったりしても影響を受けない。

5.1.2.6 EXTERNAL

属性

EXTERNAL

属性

(EXTERNAL attribute)

は,宣言された関数名が,外部関数,仮関数,手続ポインタ 又は 初

期値設定副プログラムであることを指定する。この属性は,

EXTERNAL

(

12.3.2.2

)

,手続宣言文

(

12.3.2.3

)

,又

は 抽象引用仕様宣言の中にない引用仕様本体

(

12.3.2.1

)

でも宣言できる。

実引数として使われるか 又は 手続ポインタ代入の指示先になっている外部手続 又は 仮手続は,

EXTERNAL

性をもつものとして宣言しなければならない。

EXTERNAL

属性と

POINTER

属性の両方をもつ手続は,手続ポインタとする。

5.1.2.7 INTENT

属性

INTENT

属性

(INTENT attribute)

は,仮引数の授受特性

(intent)

を指定する。

R517

授受特性指定

is

IN

or

OUT

or

INOUT

C545

(R517) INTENT(IN)

属性をもつポインタでない実体は,変数確定文脈(

16.5.7

参照)に現れてはなら

ない。

C546

(R517) INTENT(IN)

属性をもつポインタ実体は,次の箇所に現れてはならない。

(1)

NULLIFY

文中のポインタ実体

(2)

ポインタ代入文中のデータポインタ実体 又は 手続ポインタ実体

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

67

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(3)

ALLOCATE

文 又は

DEALLOCATE

文中の割付け実体

(4)

仮引数に

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもつポインタがあるような手続を

引用するとき,その仮引数に結合する実引数

INTENT(IN)

属性をポインタでない仮引数に指定すると,手続の実行中に,その仮引数を再確定したり不定にした

りしてはならないことを指定する。

INTENT(IN)

属性をポインタである仮引数に書くと,手続の実行中に,その仮引

数の結合を変更してはならないことを指定する。ただし,指示先がポインタを通さずに解放されたときには,不定に

なることはある(

16.4.2.1.3

参照)。

INTENT(OUT)

属性をポインタでない仮引数に指定すると,手続の実行中にその仮引数を,引用するより前に確

定しなければならず,かつ その仮引数と結合する実引数が確定可能でなければならないことを指定する。手続の呼出

し時には,そのような仮引数は,暗黙的初期値指定された派生型実体の成分を除いて不定とする。

INTENT(OUT)

性をポインタである仮引数に書くと,手続の呼出し時に,その仮引数のポインタ結合状態が不定になることを指定す

る。そのようなポインタ仮引数と結合される実引数は,ポインタ変数でなければならない。

INTENT(INOUT)

属性をポインタでない仮引数に指定すると,その仮引数が,手続を呼び出した有効域からデー

タを受け取ったり,そこへデータを返したりできることを指定する。このとき,仮引数は引用しても,確定してもよ

い。そのような仮引数と結合する実引数は,確定可能でなければならない。

INTENT(INOUT)

属性をポインタであ

る仮引数に書くと,その仮引数が,手続を呼び出した有効域からポインタ結合されたデータを受け取ったり,そこへ

ポインタ結合されたデータを返したりできることを指定する。そのようなポインタ仮引数と結合される実引数は,ポ

インタ変数でなければならない。

INTENT

属性を指定しないと,仮引数の使用は,結合される実引数によって制限を受ける(

12.4.1.2

12.4.1.4

参照)。

5.12

INTENT

属性指定の例を次に示す。

SUBROUTINE MOVE (FROM, TO)

USE PERSON_MODULE

TYPE (PERSON), INTENT (IN) :: FROM

TYPE (PERSON), INTENT (OUT) :: TO

INTENT

属性をもつ実体の部分実体は,すべて元の実体と同じ

INTENT

属性をもつ。

注記

5.13

仮引数がポインタを成分にもつ構造体であるとき,そのポインタは,ポインタとしては仮引数

の部分実体であるが,その指示先はそうではない。したがって,それがポインタとして使われている

文脈では,仮引数の部分実体についての制限が適用されるが,参照はずし

(dereference)

されて指示先

を示す文脈では,その制限は適用されない。例えば,

X

が整数型ポインタの成分

P

を含む派生型の仮

引数であり,かつ

X

INTENT(IN)

属性をもっているとき,

X%P => NEW_TARGET

は禁止されるが,

X%P = 0

は許される。ただし,

X%P

は,確定可能な指示先に結合されているものとする。

同様に,ポインタである仮引数に対する

INTENT

属性の制限は,仮引数との結合だけに適用され,

指示先に対する操作を制限するものではない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

68

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

5.14

引数に対する授受特性の指定は,仮引数の使用の意図を記述する以外の用途にも使用することが

できる。処理系は,

INTENT(IN)

属性をもつ仮引数が再確定される可能性のある使われ方をしているか

の検査ができる。また,

INTENT(OUT)

属性をもつ仮引数が確定される前に引用されるかどうかの検査

も可能である。手続が明示的引用仕様をもっていれば,

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもつ仮引数に対応する実引数が確定可能かどうかも検証できる。更に,

INTENT(IN)

属性を

もっている仮引数に対応する実引数は変更されることはないという事実 及び

INTENT(OUT)

属性を

もつ仮引数に対応する実引数の手続呼出し前の値は引用されることはなく,したがって捨ててよいと

いう事実を使って,引用有効域の翻訳最適化に使うことも可能である。

INTENT(OUT)

属性は,それをもつ変数の手続の呼出し後の値が,呼出し前の値によらず,その手

続を実行した結果によることを意味する。引数が,再確定されずに,呼出し前の値を保持する可能性

がある場合は,

INTENT(OUT)

属性よりも

INTENT(INOUT)

属性を指定するのがよい。仮引数の

値を明示的に引用する場面がなくても,そうするのがよい。

INTENT(OUT)

属性をもつ変数は,手

続に入った時点で不定になったとみなすので,その時点で,変数の型に対して指定された暗黙の初期

化が行われる。

INTENT(INOUT)

属性は,

INTENT

属性を省略したものと等価ではない。

INTENT(INOUT)

性をもつ仮引数に対応する実引数は常に確定可能でなければならないが,

INTENT

属性をもたない仮

引数に対応する実引数は,仮引数が実際に再確定された場合にだけ確定可能であることが要求される。

5.1.2.8 INTRINSIC

属性

INTRINSIC

属性

(INTRINSIC attribute)

は,宣言された関数名が,組込み関数の個別名

(

13.6

)

又は 総称名

(

13.5

)

であることを指定する。それが

13.6

に列挙された

印のない個別名であるときにはその名前を実引数として使用で

きることを指定する(

12.4

参照)。

総称名をもつ組込み関数に

INTRINSIC

属性を指定しても,その名前は総称名のままとする。

組込み手続

(

13.6

)

の個別名を実引数として用いる場合,その名前は,

INTRINSIC

属性をもつことを明示的に指定

されていなければならない。

C547

(R503)(R1216)

総称組込み手続の名前が明示的に

INTRINSIC

属性をもつと宣言され,更にそれが,同

一の有効域内で参照可能な一つ以上の総称引用仕様

(

12.3.2.1

)

の総称名でもあるとき,引用仕様内の手

続 及び 個別名をもつ組込み手続は,すべて関数 又は すべてサブルーチンでなければならない。個別名

である組込み手続と引用仕様内の手続は,

16.2.3

のとおり特性が異なる。

5.1.2.9 OPTIONAL

属性

OPTIONAL

属性

(OPTIONAL attribute)

は,その仮引数が,手続の引用において必ずしも実引数と結合しなく

てもよいことを指定する(

12.4.1.6

参照)。組込み関数

PRESENT

を用いて,

OPTIONAL

属性をもつ仮引数が実引数

と結合しているかどうかを調べることができる。

5.1.2.10 PARAMETER

属性

PARAMETER

属性

(PARAMETER attribute)

は,データ要素が名前付き定数であることを指定する。指定した

名前の実体は,必要なら組込み代入の規則(

7.4.1.3

参照)に従って型,型パラメタ,形状が実体名に一致するように

変換された後,等号の右辺に書いた初期値式から決まる値で確定になる。

名前付き定数は,同じ文において以前に定義されているか,それより前の文で定義されているか,又は 参照結合

若しくは 親子結合によって参照可能にされているのでなければ,引用してはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

69

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

5.15

PARAMETER

属性をもった宣言の例を次に示す。

REAL, PARAMETER :: ONE = 1.0, Y = 4.1 / 3.0

INTEGER, DIMENSION (3), PARAMETER :: ORDER = (/ 1, 2, 3 /)

TYPE(NODE), PARAMETER :: DEFAULT = NODE(0, NULL ( ))

5.1.2.11 POINTER

属性

POINTER

属性

(POINTER attribute)

をもつ実体は,プログラムの実行中に別のデータ実体 又は 手続と結合す

ることができる。ポインタは,データポインタ 又は 手続ポインタとする。手続ポインタは

12.3.2.3

による。

データポインタは,引用可能 又は 確定可能な指示先実体と結合されない限り,引用も確定もしてはならない。

データポインタが結合され,ポインタに無指定型パラメタがあれば,その値は,指示先の対応する型パラメタの値

になる。

手続ポインタは,指示先の手続とポインタ結合されない限り,引用してはならない。

5.16

POINTER

属性指定の例を次に示す。より現実的な例を

C.2.1

に示す。

TYPE (NODE), POINTER :: CURRENT, TAIL

REAL, DIMENSION (:, :), POINTER :: IN, OUT, SWAP

5.1.2.12 PROTECTED

属性

PROTECTED

属性

(PROTECTED attribute)

は,モジュールの要素の使用に関する制限を指定する。

PROTECTED

属性を指定された要素がある場合,それが指定されたモジュール内の場合を除き,次のいずれかが

成り立たなければならない。

(1)

ポインタでない実体の場合,確定可能であってはならない。

(2)

ポインタの場合,指示先がポインタを通して解放する以外の方法で解放され不定になるか,又は 指示先が

RETURN

文 若しくは

END

文の実行によって不定になる場合を除いて,ポインタの結合状態は,変更してはならない。

実体が

PROTECTED

属性をもっていれば,その部分実体もすべて

PROTECTED

属性をもつ。

5.17

PROTECTED

属性の例を示す。

MODULE temperature

REAL, PROTECTED ::temp_c, temp_f

CONTAINS

SUBROUTINE set_temperature_c(c)

REAL, INTENT(IN) :: c

temp_c = c

temp_f = temp_c*(9.0/5.0) + 32

END SUBROUTINE

END MODULE

temp c

temp f

PROTECTED

属性を指定することによって,

set temperature c

以外に,そ

れらを変更できないことを保証し,その結果,両者の関係の整合性が取れることになる。

5.1.2.13 SAVE

属性

副プログラムの有効域内で

SAVE

属性

(SAVE attribute)

をもって宣言された要素は,

RETURN

文 又は

END

の実行後も結合状態,割付け状態,定義状態 及び 値を保持する。ただし,要素がポインタであって,

RETURN

又は

END

文の実行後その指示先が不定になる場合(

16.4.2.1.3 (4)

参照)を除く。その要素は,その副プログラム

のすべての分身(

12.5.2.3

参照)によって共有される。

モジュールの有効域内で

SAVE

属性をもって宣言された要素は,要素がポインタであってその指示先が不定になる

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

70

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合を除いて,そのモジュールを参照した手続が

RETURN

文 又は

END

文を実行した時の結合状態,割付け状態,

定義状態 及び 値を保持する。

SAVE

属性をもつ要素を 保存要素

(saved entity)

と呼ぶ。

SAVE

属性をもたない要素を 非保存要素

(unsaved entity)

と呼ぶ。

SAVE

属性は,主プログラム内の宣言に書いてもよいが,効果はない。

5.1.2.14 TARGET

属性

TARGET

属性

(TARGET attribute)

をもつ実体は,ポインタ結合(

7.4.2

参照)できる。参照可能なポインタを,

TARGET

属性をもたない実体にポインタ結合してはならない。

注記

5.18

TARGET

属性を明示的に指定した変数のほかに,ポインタの割付け

(

6.3.1.2

)

によって生成さ

れた実体も

TARGET

属性をもつ。

実体が

TARGET

属性をもつ場合,その部分実体でポインタでないものは,すべて

TARGET

属性をもつ。

5.19

TARGET

属性指定の例を次に示す。より現実的な例を

C.2.2

に示す。

TYPE (NODE), TARGET :: HEAD

REAL, DIMENSION (1000, 1000), TARGET :: A, B

注記

5.20

実体特定子の先頭が指示先の実体である場合,それは

TARGET

属性 又は

POINTER

属性を

もつことになる。特定子がポインタである場合,その特定子は元の指示先の実体の部分実体である保

証はない。しかし,ポインタは,指示先だけを指している場合もあるので,ポインタの指す実体の最

後が指示先でなく,かつ ポインタでもないという保証はできない。

5.1.2.15 VALUE

属性

VALUE

属性

(VALUE attribute)

は,仮引数に対する引数結合(

12.4.1.2

参照)の種類を指定する。

5.1.2.16 VOLATILE

属性

VOLATILE

属性

(VOLATILE attribute)

は,プログラムで指示した以外の方法で,実体が,引用され,確定され

又は 不定になる可能性があることを指定する。

実体は,他の有効域内で

VOLATILE

属性をもたなくても,ある特定の有効域内で

VOLATILE

属性をもつことが

ある(

11.2.1

及び

16.4.1.3

参照)。実体が

VOLATILE

属性をもつ場合,その部分実体はすべて

VOLATILE

属性を

もつ。

注記

5.21

Fortran

処理系は,

VOLATILE

属性をもつ実体の値が要求された場合は,直近に確定された値

を使うのが望ましい。同じ考えに基づき,

Fortran

側での直近の定義が利用可能になっているのが望ま

しい。

Fortran

以外の処理系との相互作用をどう管理するかについては,プログラマ側の責任である。

VOLATILE

属性をもつポインタは,更に結合状態 及び 配列上下限がプログラムで指示した以外の方法で変更され

る可能性がある。

注記

5.22

ポインタの指示先が,プログラムで指示した以外の方法で,引用され,確定され 又は 不定に

なり,その一方で,ポインタが指示先と結合されている場合,ポインタは

VOLATILE

属性をもって

いなければならない。通常,ポインタは,指示先が

VOLATILE

属性をもっていれば,

VOLATILE

属性をもつのが望ましい。同様にして,

EQUIVALENCE

文で共有された記憶列は,そのうち一つが

VOLATILE

属性をもっていれば,全体も

VOLATILE

属性をもつのが望ましい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

71

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

VOLATILE

属性をもつ割付け実体は,更に割付け状態,実行時の型,型パラメタ 及び 配列上下限も,プログラム

で指示した以外の方法で変更される可能性がある。

5.2

属性宣言文

型を除くすべての属性は,型とは独立に,別々の属性宣言文を用いて言語要素に対して指定できる。個々の言語要

素に対して指定できる属性の組合せは,どのように指定する場合にも,型宣言文に対して規定したのと同じ制限を受

ける。このことは,手続宣言文,

EXTERNAL

文 及び

INTRINSIC

文にも適用する。

5.2.1

参照許可宣言文

R518

参照許可宣言文

is

参照許可指定子

[ [

::

]

参照対象並び

]

R519

参照対象

is

参照対象名

or

総称指定

C548

(R518)

参照許可宣言文は,モジュールの宣言部にだけ書くことができる。参照対象並びを省略した参照

許可宣言文は,一つのモジュールの宣言部内に高々一つ指定できる。

C549

(R519)

それぞれの参照対象名は,名前付き変数,手続,派生型,名前付き定数 又は 変数群の名前でな

ければならない。

参照対象並びのある参照許可宣言文は,並び中の言語要素が 公開(

PUBLIC

)であるか 非公開(

PRIVATE

)であるか

の参照許可属性(

5.1.2.1

参照)を指定する。参照対象並びのない参照許可宣言文は,そのモジュールの宣言部にあっ

て参照許可属性をもちうるすべての識別子に対する暗黙の参照許可属性を指定する。参照対象並びのない

PUBLIC

は,暗黙の参照許可属性を

PUBLIC

属性と指定する。参照対象並びのない

PRIVATE

文は,暗黙の参照許可属性を

PRIVATE

属性と指定する。モジュール内にこれらの文がないとき,暗黙の参照許可属性は,

PUBLIC

属性になる。

5.23

参照許可宣言文の例を次に示す。

MODULE EX

PRIVATE

PUBLIC :: A, B, C, ASSIGNMENT (=), OPERATOR (+)

5.2.2 ALLOCATABLE

R520

ALLOCATABLE

is

ALLOCATABLE

[

::

]

実体名

[

(

無指定上下限並び

)

]

[

,

実体名

[

(

無指定上下限並び

)

] ] ...

この文は,並び中の実体に対して

ALLOCATABLE

属性(

5.1.2.2

参照)を指定する。

5.24

ALLOCATABLE

文の例を次に示す。

REAL A, B (:), SCALAR

ALLOCATABLE :: A (:, :), B, SCALAR

5.2.3 ASYNCHRONOUS

R521

ASYNCHRONOUS

is

ASYNCHRONOUS

[

::

]

実体名並び

この文は,並び中の実体に対して,

ASYNCHRONOUS

属性(

5.1.2.3

参照)を指定する。

5.2.4 BIND

R522

BIND

is

言語束縛指定子

[

::

]

束縛要素並び

R523

束縛要素

is

要素名

or

/

共通ブロック名

/

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

72

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C550

(R522) BIND

文中の束縛要素に要素名が含まれる場合,その

BIND

文は,モジュールの宣言部に現れな

ければならず,その要素は相互利用可能変数でなければならない(

15.2.4

及び

15.2.5

参照)。

C551

(R522)

言語束縛指定子が

NAME

指定子である場合,束縛要素並び中の要素は,

1

個だけとする。

C552

(R522)

束縛要素が共通ブロックである場合,その中の各変数は,相互利用可能でなければならない

15.2.4

及び

15.2.5

参照)。

この文は,並び中の変数や共通ブロックに対して,

BIND

属性

(

5.1.2.4

)

を指定する。

5.2.5 DATA

DATA

(DATA statement)

は,明示的初期値指定を行う(

5.1

参照)。

R524

DATA

is

DATA

初期化対応

[ [

,

]

初期化対応

] ...

一つの変数 又は その一部分に対して,プログラム中で明示的初期値指定を

2

回以上してはならない。ポインタで

ない実体に対する型定義に暗黙的初期値指定があるとき,その実体を初期化項目として書いてはならない。

DATA

文中の前もって型宣言されていない変数は,その後,暗黙の型規則を確認する型宣言に書いてもよい。

DATA

文に書いた配列名,部分配列 又は 配列要素は,その配列の性質が前もって宣言されていなければならない。

名前付き共通ブロック中の変数を除き,名前付き変数は,その一部分でも

DATA

文で初期化されていれば

SAVE

属性をもつ。これを

SAVE

文 又は

SAVE

属性をもつ型宣言文で確認してもよい。

R525

初期化対応

is

初期化項目並び

/

初期値表現並び

/

R526

初期化項目

is

変数

or

初期化

DO

形反復

R527

初期化

DO

形反復

is

(

初期化

DO

形項目並び

,

初期化

DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

)

R528

初期化

DO

形項目

is

配列要素

or

スカラ構造体成分

or

初期化

DO

形反復

R529

初期化

DO

変数

is

スカラ整変数

C553

(R526)

初期化項目である変数において,添字,部分配列添字,部分列開始位置 及び 部分列終了位置は,

初期値式でなければならない。

C554

(R526)

初期化項目並び中 又は 初期化

DO

形項目並び中に特定子を書いた変数は,仮引数,参照結合 若

しくは 親子結合によって参照可能な変数,

DATA

文が初期値設定プログラム単位以外にある名前付き共

通ブロックの変数,無名共通ブロックの変数,関数名,関数結果名,自動割付け実体 又は 割付け変数で

あってはならない。

C555

(R526)

初期化項目として書く初期化

DO

形項目 又は 変数は,ポインタ実体の実体特定子であってはな

らない。

C556

(R529)

初期化

DO

変数は,名前付き変数でなければならない。

C557

(R527)

初期化

DO

形反復のスカラ整数式は,定数,部分定数 及び 外側を囲む初期化

DO

形反復の

DO

変数だけを一次子とする式でなければならない。各演算は,組込みでなければならない。

C558

(R528)

配列要素は,変数でなければならない。

C559

(R528)

スカラ構造体成分は,変数でなければならない。

C560

(R528)

スカラ構造体成分は,添字並びをもつ部分参照を少なくとも一つ含まなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

73

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C561

初期化

DO

形項目である配列要素 又は スカラ構造体成分において,各添字は,定数,部分定数 又は そ

の初期化

DO

形反復 若しくは 外側を囲む初期化

DO

形反復の

DO

変数だけを一次子とする式でなけれ

ばならない。各演算は,組込みでなければならない。

R530

初期値表現

is

[

初期値反復数

*

]

初期値定数

R531

初期値反復数

is

スカラ整定数

or

スカラ整部分定数

C562

(R531)

初期値反復数は,正 又は ゼロでなければならない。初期値反復数が名前付き定数であるとき,

それは,同じ有効域内で前もって宣言されているか,又は 参照結合 若しくは 親子結合によって参照可

能になっていなければならない。

R532

初期値定数

is

スカラ定数

or

スカラ部分定数

or

任意符号付き整定数表現

or

任意符号付き実定数表現

or

空初期化

or

構造体構成子

C563

(R532) DATA

文中の定数値が名前付き定数 又は 構造体構成子であるとき,名前付き定数 及び 派生型

は,その有効域内で既に宣言されているか参照結合 又は 親子結合で参照できなければならない。

C564

(R532)

初期値定数が構造体構成子であるとき,各成分は,初期値式でなければならない。

R533

整部分定数

is

部分定数

C565

(R533)

整部分定数は,整数型でなければならない。

R534

部分定数

is

特定子

C566

(R534)

部分定数は,定数の部分実体でなければならない。

C567

(R534)

すべての添字,部分列開始位置 及び 部分列終了位置は,初期値式でなければならない。

初期化項目並びは,展開されてポインタ 及び スカラ変数の列(以降の文中では

変数の展開列

と呼ぶ。)になる。

初期化項目並び中に書いた添字なしのポインタでない配列名は,配列要素順序(

6.2.2.2

参照)に従った配列要素全

体の列と等価とする。部分配列も,配列要素順序に従ったその配列要素の列と等価とする。初期化

DO

形反復は,

DO

構文(

8.1.6.4

参照)と同じ手順で,

DO

変数の制御に従って展開されて,配列要素 又は 構造体成分の列になる。

初期値表現並びは,展開されて初期値定数の列になる。初期値反復数は,続く初期値定数を列の中に指定回数だけ

繰り返す。省略したときは,反復数を

1

とする。

大きさゼロの配列 及び 繰返し回数がゼロである

DO

形反復は,変数の展開列中に変数を与えないが,長さゼロの

スカラ文字変数は,列中に変数を与える。反復数がゼロである初期値定数は,スカラ初期値定数の展開列中に初期値

定数を与えない。

変数の展開列と初期値定数の展開列とは,

1

1

に対応する。各初期値定数は,対応する変数の初期値 又は 空初

期化を指定する。二つの展開列の長さは,同じでなければならない。

初期値定数が空初期化であるとき,かつそのときに限り,対応する初期化項目は,

POINTER

属性をもたなければ

ならない。初期化項目がポインタである場合,その初期結合状態は,空状態とする。

空初期化でない初期値定数は,組込み代入の規則(

7.4.1.2

参照)に従って,対応する変数に適合可能でなければ

ならない。その変数は,組込み代入の規則に従って初期値定数の値で初期確定になる。必要ならば,値は,組込み代

入文の規則

(

7.4.1.3

)

に従って,対応する変数に,型,型パラメタ 及び 形状が適合するように変換される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

74

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

初期値定数が非

10

進定数表現であるとき,対応する変数は,整数型でなければならない。非

10

進定数表現である

初期値定数は,処理系の最大の

10

進指数範囲をもつ表現方法を指定する種別の,整定数表現であるかのように扱わ

れる。

5.25

DATA

文の例を次に示す。

CHARACTER (LEN = 10) NAME

INTEGER, DIMENSION (0:9) :: MILES

REAL, DIMENSION (100, 100) :: SKEW

TYPE (NODE), POINTER :: HEAD_OF_LIST

TYPE (PERSON) MYNAME, YOURNAME

DATA NAME / ’JOHN DOE’ /, MILES / 10*0 /

DATA ((SKEW (K, J), J = 1, K), K = 1, 100) / 5050 * 0.0 /

DATA ((SKEW (K, J), J = K + 1, 100), K = 1, 99) / 4950 * 1.0 /

DATA HEAD_OF_LIST / NULL() /

DATA MYNAME / PERSON (21, ’JOHN SMITH’) /

DATA YOURNAME % AGE, YOURNAME % NAME / 35, ’FRED BROWN’ /

文字変数

NAME

は,定数の長さが変数の長さより短いので,右側に空白詰めされた

JOHN DOE

いう値に初期化される。整数型配列

MILES

10

個の要素すべては,ゼロに初期化される。

2

次元配

SKEW

は,対角要素を含む下三角部がゼロに,上三角部が

1

に初期化される。構造体

MYNAME

及び

YOURNAME

は,

4.17

の派生型

PERSON

を使って宣言されている。ポインタ

HEAD OF LIST

は,

4.36

の派生型

NODE

を使って宣言されていて,初期に空状態になる。

MYNAME

は,構造体構成子で初

期化される。

YOURNAME

は,各成分の値を別々に与えて初期化される。

5.2.6 DIMENSION

R535

DIMENSION

is

DIMENSION

[

::

]

配列名

(

配列形状指定

)

[

,

配列名

(

配列形状指定

)

] ...

この文は,並び中の実体に対して

DIMENSION

属性(

5.1.2.5

参照)及び 配列の性質を指定する。

5.26

DIMENSION

文の例を次に示す。

DIMENSION A (10), B (10, 70), C (:)

5.2.7 INTENT

R536

INTENT

is

INTENT (

授受特性指定

)

[

::

]

仮引数名並び

この文は,並び中の仮引数に対して

INTENT

属性(

5.1.2.7

参照)を指定する。

5.27

INTENT

文の例を次に示す。

SUBROUTINE EX (A, B)

INTENT (INOUT) :: A, B

5.2.8 OPTIONAL

R537

OPTIONAL

is

OPTIONAL

[

::

]

仮引数名並び

この文は,並び中の仮引数に対して

OPTIONAL

属性(

5.1.2.9

参照)を指定する。

5.28

OPTIONAL

文の例を次に示す。

SUBROUTINE EX (A, B)

OPTIONAL :: B

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

75

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

5.2.9 PARAMETER

PARAMETER

(PARAMETER statement)

は,並び中の名前付き定数に対して

PARAMETER

属性(

5.1.2.10

参照)及び 値を指定する。

R538

PARAMETER

is

PARAMETER (

名前付き定数定義並び

)

R539

名前付き定数定義

is

名前付き定数

=

初期値式

名前付き定数は,型,型パラメタ 及び 形状をもち,それらはその宣言部で前もって宣言するか,又は 暗黙の型規

則(

5.3

参照)に従うかしていなければならない。名前付き定数の型が暗黙の型規則によっているならば,その後の

宣言部での宣言は,その暗黙の型 及び 暗黙の型パラメタ値を確認するものでなければならない。

それぞれの名前付き定数は,組込み代入規則(

7.4.1.3

参照)に従って,等号の右辺の初期値式によって与えられる

値で確定になる。必要ならば,値は,組込み代入文の規則(

7.4.1.3

参照)に従って,対応する名前付き定数に,型,

型パラメタ 及び 形状が適合(

5.1.1.2

参照)するように変換される。

5.29

PARAMETER

文の例を次に示す。

PARAMETER (MODULUS = MOD (28, 3), NUMBER_OF_SENATORS = 100)

5.2.10 POINTER

R540

POINTER

is

POINTER

[

::

]

ポインタ宣言並び

R541

ポインタ宣言

is

実体名

[

(

無指定上下限並び

)

]

or

手続要素名

C568

(R541)

手続要素名には,

EXTERNAL

属性

(

5.1.2.6

)

を明示的に指定しなければならない。

この文は,並び中の実体 及び 手続要素に対して

POINTER

属性(

5.1.2.11

参照)を指定する。

5.30

POINTER

文の例を次に示す。

TYPE (NODE) :: CURRENT

POINTER :: CURRENT, A (:, :)

5.2.11 PROTECTED

R542

PROTECTED

is

PROTECTED

[

::

]

要素名並び

この文は,並び中の要素に対して

PROTECTED

属性(

5.1.2.12

参照)を指定する。

5.2.12 SAVE

R543

SAVE

is

SAVE

[ [

::

]

保存要素並び

]

R544

保存要素

is

実体名

or

手続ポインタ名

or

/

共通ブロック名

/

R545

手続ポインタ

is

名前

C569

(R545)

手続ポインタ名は,手続ポインタの名前でなければならない。

C570

(R543)

保存要素並びを省略した

SAVE

文が有効域内にあるとき,同じ有効域内に,ほかに明示的な

SAVE

属性 又は

SAVE

文があってはならない。

保存要素並びのある

SAVE

文は,並び中で指定された要素 又は 並び中で指定された共通ブロックに含まれる要素

に対して

SAVE

属性(

5.1.2.13

参照)を指定する。保存要素並びのない

SAVE

文は,その有効域内のすべての可能

な項目を指定したかのように扱われる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

76

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ある共通ブロック名を,プログラム中の主プログラム以外の有効域内の

SAVE

文に指定したとき,主プログラムの

有効域を除いて,その共通ブロックが現れるすべての有効域内で,その共通ブロック名を

SAVE

文に指定しなければ

ならない。

SAVE

文で宣言した共通ブロックにおいて,

RETURN

文 又は

END

文が実行された時の共通ブロック記

憶列(

5.5.2.1

参照)中の値は,プログラムの実行系列中で次にその共通ブロック名を指定している有効域 又は その

共通ブロックを参照する有効域で用いることができる。名前付き共通ブロックを主プログラムの有効域内で指定した

とき,共通ブロック記憶列の現在の値は,その名前付き共通ブロックを指定している,それぞれの有効域で用いるこ

とができる。名前付き共通ブロック記憶列中の各要素の定義状態は,その共通ブロック記憶列に対してそれまでにな

された結合によって決まる。

SAVE

文は,主プログラム内の宣言部に書いてもよいが,効果はない。

5.31

SAVE

文の例を次に示す。

SAVE A, B, C, / BLOCKA /, D

5.2.13 TARGET

R546

TARGET

is

TARGET

[

::

]

実体名

[

(

配列形状指定

)

]

[

,

実体名

[

(

配列形状指定

)

] ] ...

この文は,並び中の実体に対して

TARGET

属性(

5.1.2.14

参照)を指定する。

5.32

TARGET

文の例を次に示す。

TARGET :: A (1000, 1000), B

5.2.14 VALUE

R547

VALUE

is

VALUE

[

::

]

仮引数名並び

この文は,並び中の仮引数に対して

VALUE

属性(

5.1.2.15

参照)を指定する。

5.2.15 VOLATILE

R548

VOLATILE

is

VOLATILE

[

::

]

実体名並び

この文は,並び中の実体に対して

VOLATILE

属性(

5.1.2.16

参照)を指定する。

5.3 IMPLICIT

IMPLICIT

(IMPLICIT statement)

は,有効域内において,この文で指定された英字を第

1

文字としてもつ名

前のデータ要素が,暗黙的に型宣言されるときの型 (もしあれば) 及び 型パラメタを指定する。その有効域内で暗

黙の型規則を適用しないと指定することもできる。

R549

IMPLICIT

is

IMPLICIT

暗黙型宣言並び

or

IMPLICIT NONE

R550

暗黙型宣言

is

宣言型指定子

(

英字範囲並び

)

R551

英字範囲

is

英字

[

-

英字

]

C571

(R549)

ある有効域内で

IMPLICIT NONE

を指定するときには,どの

PARAMETER

文よりも前に指定し

なければならず,その有効域内に他の

IMPLICIT

文を書いてはならない。

C572

(R551) “

-

2

番目の英字を書くとき,

2

番目の英字は

1

番目の英字より

ABC

順で後になければなら

ない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

77

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

英字範囲として

-

で区切られた二つの英字は,

1

番目の文字から

2

番目の文字までの英字を

ABC

順でいちいち

指定した並びと等価とする。例えば,

A-C

は,

A,B,C

に等しい。一つの有効域内のすべての

IMPLICIT

文を通じて,

同じ英字を,単独の英字として書くか英字範囲に含めるかして,

2

回以上指定してはならない。

各有効域内において,それぞれの英字

A

,

B

, . . . ,

Z

と型 及び 型パラメタとの間の対応付けが存在する。対応付け

は,空でありうる。

IMPLICIT

文は,英字範囲並び中の英字に対して対応付けを指定する。

IMPLICIT NONE

は,すべ

ての対応付けを空にする。プログラム単位 又は 引用仕様本体において,対応付けが指定されていない英字は,

I

,

J

,

. . . ,

N

であれば基本整数型に,それ以外であれば基本実数型に暗黙的に対応付けられる。内部手続 又は モジュール

手続において,対応付けが指定されていない英字は,暗黙的に親有効域の対応付けに従う。

型宣言文で明示的に宣言されていなくて,組込み関数でもなく,更に参照結合 又は 親子結合によって参照可能に

なったのでもないデータ要素は,その名前の第

1

文字の対応付けが空でないとき,その対応付けに従った型 及び 型

パラメタをもつとして暗黙的に宣言される。データ要素の第

1

文字の対応付けは,

IMPLICIT

文によって前もって定

めた対応付けか,又は その英字に対する暗黙的な対応付けとする。 ある派生型が局所的な有効範囲で参照不能であっ

ても,その親有効範囲で参照可能であれば,その対応付けは有効とする。データ要素は,それに対する最も外側の有

効域内で明示的に型宣言されたかのように扱われる。

FUNCTION

文中の明示的な型指定は,その関数副プログラム

の結果変数名について,

IMPLICIT

文を上書きする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

78

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

5.33

IMPLICIT

文の例を次に示す。

MODULE EXAMPLE_MODULE

IMPLICIT NONE

...

INTERFACE

FUNCTION FUN (I)

!

すべてのデータ要素を明示的に宣言する必要はない。

INTEGER FUN

END FUNCTION FUN

END INTERFACE

CONTAINS

FUNCTION JFUN (J)

!

すべてのデータ要素を明示的に宣言する必要がある。

INTEGER JFUN,J

...

END FUNCTION JFUN

END MOULE EXAMPLE_MODULE

SUBROUTINE SUB

IMPLICIT COMPLEX (C)

C = (3.0, 2.0)

! C

は暗黙的に複素数型であると宣言される。

...

CONTAINS

SUBROUTINE SUB1

IMPLICIT INTEGER (A, C)

C = (0.0, 0.0)

! C

は親子結合によって複素数型となる。

Z = 1.0

! Z

は暗黙的に実数型であると宣言される。

A = 2

! A

は暗黙的に整数型であると宣言される。

CC = 1

! CC

は暗黙的に整数型であると宣言される。

...

END SUBROUTINE SUB1

SUBROUTINE SUB2

Z = 2.0

! Z

は暗黙的に実数型であると宣言されるが,

! SUB1

中の同じ名前の変数とは異なる。

...

END SUBROUTINE SUB2

SUBROUTINE SUB3

USE EXAMPLE_MODULE

!

参照結合による整数型関数

FUN

の参照

Q = FUN (K)

! Q

は暗黙的に実数型であると宣言される。

...

! K

は暗黙的に整数型であると宣言される。

END SUBROUTINE SUB3

END SUBROUTINE SUB

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

79

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

5.34

IMPLICIT

文に,派生型の宣言型指定子を指定してもよい。次の

IMPLICIT

文 及び 型定義があ

るとする。

IMPLICIT TYPE (POSN) (A-B, W-Z), INTEGER (C-V)

TYPE POSN

REAL X, Y

INTEGER Z

END TYPE POSN

英字

A

,

B

,

W

,

X

,

Y

又は

Z

で始まる変数は,暗黙的に型

POSN

となり,これら以外の変数は暗黙的に

整数型となる。

5.35

局所的な有効範囲で参照不能な派生型への対応付けの例を次に示す。

PROGRAM MAIN

IMPLICIT TYPE(BLOB) (A)

TYPE BLOB

INTEGER :: I

END TYPE BLOB

TYPE(BLOB) :: B

CALL STEVE

CONTAINS

SUBROUTINE STEVE

INTEGER :: BLOB

..

AA = B

..

END SUBROUTINE STEVE

END PROGRAM MAIN

サブルーチン

STEVE

において,

BLOB

が異なる意味を与えられているので,変数を型

BLOB

として

明示的に宣言することはできない。しかし,英字

A

に対して型

BLOB

が暗黙的に対応付けられている

ので,

AA

は型

BLOB

になる。

5.4 NAMELIST

NAMELIST

(NAMELIST statement)

は,データ転送(

9.5

及び

10.10

参照)に当たって,一つの名前で参照

できる名前付きデータ実体群を指定する。

R552

NAMELIST

is

NAMELIST /

変数群名

/

変数群要素並び

[ [

,

]

/

変数群名

/

変数群要素並び

] ...

C573

(R552)

変数群名は,参照結合によって参照可能になった名前であってはならない。

R553

変数群要素

is

変数名

C574

(R553)

変数群要素は,大きさ引継ぎ配列であってはならない。

C575

(R552)

変数群名が

PUBLIC

属性をもつとき,変数群要素並びの各項目は,

PRIVATE

属性をもっては

ならない。

NAMELIST

文で指定した変数の順序が,出力時の値の順序になる。

同じ変数群名を,有効域内で二つ以上の

NAMELIST

文に書いてもよい。 一つの有効域内で同じ変数群名を

2

以上書くと,その変数群要素をその順に全部つないだ並びとして扱われる。

一つの変数群要素を,二つ以上の変数群に含めてもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

80

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

変数群要素は,参照結合 若しくは 親子結合によって参照されるか,又は,その型,型パラメタ 及び 形状が同じ有

効域内の宣言文か手続の頭書きで前もって指定されるか 若しくは その有効域の暗黙の型規則で決められたものでな

ければならない。変数群要素が暗黙の型規則によっているならば,その後の型宣言文は,その暗黙の型 及び 型パラ

メタを確認するものでなければならない。

5.36

NAMELIST

文の例を次に示す。

NAMELIST /NLIST/ A, B, C

5.5

データ実体の記憶列結合

一般に,データ実体の物理的記憶単位 及び 記憶順序は指定できない。しかし,

EQUIVALENCE

文,

COMMON

文 若しくは

SEQUENCE

文を使うか,又は

BIND(C)

型属性指定子を指定することによって,記憶単位の順序 及び

配置を制御することができる。記憶列結合の一般的な機構は,

16.4.3

による。

5.5.1 EQUIVALENCE

EQUIVALENCE

(EQUIVALENCE statement)

は,有効域内で二つ以上の実体が同じ記憶単位を共有すること

を指定する。これは,その記憶単位を共有する実体の記憶列結合を引き起こす。

記憶列共有する実体が異なる型 又は 型パラメタをもつとき,

EQUIVALENCE

文は,型変換 又は 数学的な等値化

を行わない。スカラ変数と配列が記憶列共有しているとき,スカラ変数は配列の性質をもたないし,配列はスカラの

性質をもたない。

R554

EQUIVALENCE

is

EQUIVALENCE

結合対応並び

R555

結合対応

is

(

結合実体

,

結合実体並び

)

R556

結合実体

is

変数名

or

配列要素

or

部分列

C576

(R556)

結合実体は,仮引数,ポインタ,割付け変数,割付け末端成分をもつ派生型の実体,不連続派生

型の実体,成分選択のどの水準かにポインタをもつ派生型の実体,自動割付け実体,関数名,入口名,結

果名,

BIND

属性をもつ変数,共通ブロック内にあって

BIND

属性をもつ変数 又は 名前付き定数を基底

実体とする特定子であってはならない。

C577

(R556)

結合実体は,二つ以上の部分参照をもつ特定子であってはならない。

C578

(R556)

結合実体は,

TARGET

属性をもってはならない。

C579

(R556)

結合実体の添字 及び 文字部分列式は,整数初期値式(

7.1.7

参照)でなければならない。

C580

(R555)

結合実体の一つが基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 又は 数

値連続型であるとき,結合対応中の実体はすべてこれらの型でなければならない。

C581

(R555)

結合実体の一つが基本文字型 又は 文字連続型であるとき,結合対応中の実体はすべてこれらの

型でなければならない。

C582

(R555)

結合実体の一つが数値連続型でも文字連続型でもない連続した派生型であるとき,結合対応中の

実体はすべてこれと同じ型パラメタ値をもった同じ型でなければならない。

C583

(R555)

結合実体の一つが基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 及び 基

本文字型を除いた組込み型であるとき,結合対応の実体はすべてこれと同じ種別パラメタ値をもった同じ

型でなければならない。

C584

(R556)

結合実体の一つが

PROTECTED

属性をもっている場合,その結合対応中のすべての実体も

PROTECTED

属性をもっていなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

81

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C585

(R556)

結合実体の名前は,参照結合によって参照可能になった名前であってはならない。

C586

(R556)

部分列は,長さゼロであってはならない。

注記

5.37

EQUIVALENCE

文は,連続型構造体の結合 及び 基本種別でない型パラメタをもつ組込み型

の実体を結合してもよいが,これらの実体を

EQUIVALENCE

文中に書く場合には,厳格な規則が

ある。

EQUIVALENCE

文中に書く構造体は,連続型構造体でなければならない。連続型構造体が数値連

続型でも文字連続型でもない場合,その構造体は,同じ型パラメタ値をもった同じ型の実体とだけ結

合できる。

数値連続型構造体は,別の数値連続型構造体と結合でき,基本整数型,基本実数型,倍精度実数型,

基本複素数型 又は 基本論理型の実体とも結合できる。したがって,構造体の末端成分は,これらの

組込み型の実体とだけ結合されることになる。

文字連続型構造体は,基本文字型の実体 及び 別の文字連続型構造体と結合できる。

基本種別でない型パラメタをもつ組込み型の実体は,同じ型 及び 同じ種別型パラメタをもつ実体

とだけ結合できる。

EQUIVALENCE

文と暗黙的初期値指定との相互作用は,

16.4.3.3

で更に規定する。

5.5.1.1

記憶列共有結合

EQUIVALENCE

文は,結合対応に書いたデータ実体の記憶列(

16.4.3.1

参照)が互いに記憶列結合することを指

定する。結合対応中の大きさがゼロでない列の先頭の記憶単位は,すべて同じ記憶単位とする。結合対応中の大きさ

がゼロの列は,互いに記憶列結合し,かつ 大きさがゼロでない列と同じ先頭の記憶単位にも結合する。これは結合対

応中のデータ実体の記憶列結合を引き起こし,更に他のデータ実体との記憶列結合を引き起こすこともある。

5.5.1.2

基本文字型実体の記憶列共有

基本文字型のデータ実体は,基本文字型の実体とだけ記憶列共有できる。記憶列共有するデータ実体の長さは,同

じである必要はない。

EQUIVALENCE

文は,一つの結合対応に書いたすべての基本文字型データ実体の記憶列が互いに記憶列結合する

ことを指定する。結合対応中の大きさがゼロでない列は,すべて同じ先頭の文字記憶単位をもつ。結合対応中の大き

さがゼロの列は,互いに記憶列結合し,かつ 大きさがゼロでない列と同じ先頭の文字記憶単位にも結合する。これは

結合対応中のデータ実体の記憶列結合を引き起こし,更に他のデータ実体との記憶列結合を引き起こすこともある。

5.38

次の宣言があるとする。

CHARACTER

(LEN = 4) :: A, B

CHARACTER

(LEN = 3) :: C (2)

EQUIVALENCE (A, C (1)), (B, C (2))

このときの

A

B

及び

C

の結合を次に図示する。

-

A

-

B

-

C(1)

-

C(2)

1

2

3

4

5

6

7

5.5.1.3

配列名 及び 配列要素特定子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

82

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

大きさがゼロでない配列について,添字並びを付けずに配列名を

EQUIVALENCE

文に書くことは,その配列の先

頭の要素を指定した配列要素特定子を書くのと同じ効果がある。

5.5.1.4 EQUIVALENCE

文の制限

EQUIVALENCE

文によって,同じ記憶単位が一つの記憶列中に

2

回以上現れるような指定をしてはならない。

5.39

禁止例を次に示す。これは,

A(1)

A(2)

に対して同じ記憶単位を指定することになるので禁止

される。

REAL, DIMENSION (2) :: A

REAL :: B

EQUIVALENCE (A (1), B), (A (2), B)

!

規格合致でない。

EQUIVALENCE

文によって,連続する記憶単位を不連続とするような指定をしてはならない。

5.40

禁止例を次に示す。

REAL A (2)

DOUBLE PRECISION D (2)

EQUIVALENCE (A (1), D (1)), (A (2), D (2))

!

規格合致でない。

5.5.2 COMMON

COMMON

(COMMON statement)

は,物理的な記憶場所のブロックを指定する。これを 共通ブロック

(common

block)

と呼ぶ。共通ブロックは,プログラム中のどの有効域からも参照可能とする。したがって,

COMMON

文は,

記憶列結合(

16.4.3

参照)に基づいた大域データ参照を可能にする。

COMMON

文で指定される共通ブロックは,名前付きのものを 名前付き共通ブロック

(named common block)

呼び,名前付きでないものを 無名共通ブロック

(blank common)

と呼ぶ。

R557

COMMON

is

COMMON

[

/

[

共通ブロック名

]

/

]

共通ブロック実体並び

[ [

,

]

/

[

共通ブロック名

]

/

共通ブロック実体並び

] ...

R558

共通ブロック実体

is

変数名

[

(

明示上下限並び

)

]

or

手続ポインタ名

C587

(R558)

一つの変数名 又は 手続ポインタ名は,一つの有効域内のすべての共通ブロック実体並びを通じ

1

回だけ書くことができる。

C588

(R558)

共通ブロック実体として,仮引数,割付け変数,割付け可能な末端成分をもつ派生型の実体,自

動割付け実体,関数名,入口名,

BIND

属性をもつ変数 又は 結果名を指定してはならない。

C589

(R558)

共通ブロック実体に指定する派生型実体は,暗黙的初期値指定なしの連続型(

4.5.1

参照)又は

BIND

属性をもつ型でなければならない。

C590

(R558)

変数名 及び 手続ポインタ名は,参照結合によって参照可能になった名前であってはならない。

COMMON

文において,共通ブロック名に続く共通ブロック実体並び中に名前を書いたデータ実体は,その共

通ブロック中にあると宣言される。先頭の共通ブロック名を省略すると,最初の共通ブロック実体並び中に名前を書

いたデータ実体は,無名共通ブロック中にある。共通ブロック名を省略した二つの

/

に続く共通ブロック実体並び

中に名前を書いたデータ実体もまた,無名共通ブロック中にある。

一つの有効域内の一つ以上の

COMMON

文に,同じ名前をもつ共通ブロック 又は 無名共通ブロックを

2

回以上書

いてもよい。一つの有効域内で同じ共通ブロック名を

2

回以上書くと,それらに続く共通ブロック実体並びは,その

順に全部一つにつないだ並びとして扱われる。同様に無名共通ブロックの共通ブロック実体並びも,その順に全部一

つにつないだ並びとして扱われる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

83

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

変数名

(

明示上下限並び

)

の形を書くと,変数名は

DIMENSION

属性をもつと宣言され,配列の性質を指定さ

れる。数値連続型(

4.5.1

参照)又は 文字連続型(

4.5.1

参照)の派生型実体を共通ブロック実体として書くと,そ

れは個々の成分を共通ブロック実体並び中に直接列挙したのと等価とする。

5.41

COMMON

文の例を次に示す。

COMMON /BLOCKA/ A, B, D(10,30)

COMMON I, J, K

5.5.2.1

共通ブロック記憶列

有効域内のそれぞれの共通ブロックについて,共通ブロック記憶列

(common block storage sequence)

が,次のと

おりに形成される。

(1)

記憶列は,その共通ブロックの共通ブロック実体並び中のデータ実体の記憶列(

16.4.3.1

参照)に含まれるすべ

ての記憶単位の列から形成される。記憶列の順序は,その有効域内での共通ブロック実体並びの出現順と同じと

する。

(2)

(

1

)

で形成された記憶列は,記憶列共有結合によって記憶列結合したすべての記憶単位を含むように拡張される。

この拡張は,最後の記憶単位の後ろに記憶単位を追加する方向にだけ許される。共通ブロック中のデータ要素と

結合したデータ実体は,その共通ブロック中にあるとみなす。

その有効域内に書いた

COMMON

文 及び

EQUIVALENCE

文だけが,その有効域での共通ブロック記憶列の形成

に関与する。

5.5.2.2

共通ブロックの大きさ

共通ブロックの大きさ

(size of a common block)

とは,記憶列共有による列の拡張を含んだ共通ブロック記憶列の

大きさとする。

5.5.2.3

共通ブロック結合

プログラム中で,同じ名前をもち大きさがゼロでない共通ブロックの記憶列の先頭の記憶単位は,すべて同じ記憶

単位とする。同じ名前をもち大きさがゼロである共通ブロックの記憶列は,すべて互いに記憶列結合する。プログラ

ム中で,大きさがゼロでない無名共通ブロックの記憶列の先頭の記憶単位は,すべて同じ記憶単位とする。大きさが

ゼロである無名共通ブロックの記憶列は,すべて互いに結合し,かつ 大きさがゼロでない無名共通ブロックの先頭の

記憶単位とも結合される。これによって,異なる有効域間での実体の結合を可能とする。参照結合 又は 親子結合に

よって,これらの結合している実体を,同じ有効域で参照可能にしてもよい。

基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 又は 数値連続型であってポインタでない実

体は,これらの型のポインタでない実体とだけ結合できる。

基本文字型 又は 文字連続型であってポインタでない実体は,これらの型のポインタでない実体とだけ結合できる。

数値連続型 及び 文字連続型以外の派生型であってポインタでない実体は,同じ型パラメタ値をもつ同じ型のポイ

ンタでない実体とだけ結合できる。

基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 及び 基本文字型以外の組込み型であってポ

インタでない実体は,同じ型 及び 同じ型パラメタをもったポインタでない実体とだけ結合できる。

データポインタは,同じ型 及び 次元数をもつデータへのポインタとだけ記憶列結合できる。データポインタが記

憶列結合している場合,型パラメタを無指定にするときは,同じ型パラメタでなければならない。無指定でない型パ

ラメタが無指定のときは,同じ値をもたなければならない。手続ポインタは,手続ポインタとだけ記憶列結合できる。

この場合,引用仕様は双方とも明示的か 又は 双方とも暗黙的でなければならない。引用仕様が明示的である場合,双

方の特性は,同じでなければならない。引用仕様が暗黙的である場合,双方ともサブルーチンであるか,又は 双方と

も同じ型と同じ型パラメタをもつ関数でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

84

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

TARGET

属性をもつ実体は,同じ型 及び 型パラメタと

TARGET

属性をもつ他の実体とだけ記憶列結合となり

うる。

注記

5.42

共通ブロックは,それを参照しているどの有効域内でもその共通ブロックに対して記憶単位の

同一の列を指定している場合,異なる種類の記憶単位を含んでもよい。例えば,単一の共通ブロック

が数値実体 及び 文字実体の両方を含んでもよい。

異なる有効域内での,基本種別の実体,倍精度実数型の実体 及び 連続型構造体の間の結合は,結

合実体

(

5.5.1

)

に対する規則に従って許される。

5.5.2.4

名前付き共通ブロックと無名共通ブロックとの相違

無名共通ブロックは,次の事項を除いて,名前付き共通ブロックと同じ性質をもつ。

(1)

RETURN

文 又は

END

文の実行によって,名前付き共通ブロック中のデータ実体はその共通ブロック名を

SAVE

文で宣言してなければ不定になりうるが,無名共通ブロック中のデータ実体は不定になることはない(

16.5.6

参照)。

(2)

同じ名前の名前付き共通ブロックはプログラム中のすべての有効域で同じ大きさでなければならないが,無名共

通ブロックは異なる大きさであってもよい。

(3)

名前付き共通ブロック中のデータ実体は初期値設定プログラム単位(

11.3

参照)中で,

DATA

文 又は 型宣言文

によって初期確定にできるが,無名共通ブロック中の実体は初期確定にできない。

5.5.2.5 COMMON

文 及び

EQUIVALENCE

文の制限

EQUIVALENCE

文によって,二つの異なる共通ブロックの記憶列を結合してはならない。

記憶列共有結合によって,

COMMON

文中で指定した先頭の実体の記憶単位よりも前に,記憶単位を付け加える拡

張を行ってはならない。

5.43

禁止例を次に示す。

COMMON /X/ A

REAL B (2)

EQUIVALENCE (A, B (2))

!

規格合致でない。

記憶列共有結合によって,暗黙的初期値指定をもつ派生型の実体と共通ブロック中の実体とを結合してはならない。

6

データ実体の使用

実体特定子を,値を要求する文脈で書くことを 引用

(reference)

という。引用は,そのデータ実体が確定となって

いる場合にだけ許される。ポインタの引用は,確定となっている指示先実体にそのポインタが結合している場合にだ

け許される。データ実体は,

16.5.5

で示す事象が生じた場合に値とともに確定になる。

R601

変数

is

特定子

C601

(R601)

特定子は,定数 又は その部分実体であってはならない。

R602

変数名

is

名前

C602

(R602)

変数名は,変数の名前でなければならない。

R603

特定子

is

実体名

or

配列要素

or

部分配列

or

構造体成分

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

85

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

部分列

R604

論理変数

is

変数

C603

(R604)

論理変数は,論理型でなければならない。

R605

基本論理変数

is

変数

C604

(R605)

基本論理変数は,基本論理型でなければならない。

R606

文字変数

is

変数

C605

(R606)

文字変数は,文字型でなければならない。

R607

基本文字変数

is

変数

C606

(R607)

基本文字変数は,基本文字型でなければならない。

R608

整変数

is

変数

C607

(R608)

整変数は,整数型でなければならない。

6.1

次の宣言があるとする。

CHARACTER (10) A, B (10)

TYPE (PERSON) P

!

4.17

参照

このとき,

A

B

B(1)

B(1:5)

P % AGE

及び

A(1:1)

は,すべて変数になる。

定数(

3.2.2

参照)は,定数表現 又は 名前付き定数とする。定数表現は,その型,型パラメタ 及び 値を示す構文

形式に従って記述されたスカラとする。名前付き定数は,

PARAMETER

属性(

5.1.2.10

及び

5.2.9

参照)をもつ

名前を関連付けられている定数とする。定数の引用は,常に許される。定数の再確定は,禁止する。

6.1

スカラ

スカラ

(scalar)

2.4.4

参照)は,その型の単一の値によって表現される,配列(

6.2

参照)でないデータ要素とす

る。スカラの値は,確定している場合には,その型を特徴付ける値の集合の一つの要素とする。

注記

6.2

派生型のスカラ実体は,その成分の値からなる単一の値である(

4.5.7

参照)。

スカラの次元数は,ゼロとする。

6.1.1

部分列

部分列

(substring)

は,文字列(

4.4.4

参照)の連続した一部分とする。部分列の形は,次の規則による。

R609

部分列

is

親列

(

部分列範囲

)

R610

親列

is

スカラ変数名

or

配列要素

or

スカラ構造体成分

or

スカラ定数

R611

部分列範囲

is

[

スカラ整数式

]

:

[

スカラ整数式

]

C608

(R610)

親列は,文字型でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

86

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

部分列範囲の

1

番目のスカラ整数式の値を 開始位置

(starting point)

といい,

2

番目を 終了位置

(ending point)

いう。部分列の長さは,その部分列中の文字の個数とする。開始位置 及び 終了位置をそれぞれ

f

及び

l

とすると,

部分列の長さは,

max(

l

f

+ 1

,

0)

となる。

親列の長さを

n

とし,親列中の文字に

1

,

2

,

3

, . . . , n

と番号が付いているとする。このとき,部分列中の文字は,開

始位置から終了位置までの親列中の文字とする。開始位置 及び 終了位置は,開始位置が終了位置を越えない場合は,

1

,

2

, . . . , n

の間でなければならない。開始位置が終了位置を越える場合,部分列の長さは,ゼロとする。開始位置を

省略したとき,暗黙値は

1

とする。終了位置を省略したとき,暗黙値は

n

とする。

親が変数の場合,部分列も変数とする。

6.3

文字部分列の例を次に示す。

B (1) (1:5)

親列が配列要素

P % NAME (1:1)

親列が構造体成分

ID (4:9)

親列がスカラ変数名

’0123456789’ (N:N)

親列が文字定数

6.1.2

構造体成分

構造体成分

(structure component)

は,派生型の実体の部分とし,実体特定子によって参照できる。構造体成分は,

スカラであっても配列であってもよい。

R612

データ参照

is

部分参照

[

%

部分参照

] ...

R613

部分参照

is

部分名

[

(

部分配列添字並び

)

]

C609

(R612)

部分名は,右端のものを除いては,派生型でなければならない。

C610

(R612)

部分名は,左端のものを除いては,直前の部分名の宣言時の型の成分の名前でなければならない。

C611

(R612)

右端の部分名が抽象型である場合,データ参照は多相的でなければならない。

C612

(R612)

左端の部分名は,データ実体の名前でなければならない。

C613

(R613)

部分参照に部分配列添字並びの指定のある場合,部分配列添字の個数は部分名の次元数と等しく

なければならない。

部分配列添字並びの指定のない部分参照の次元数は,部分名の次元数とする。部分配列添字並びの指定のある部分

参照の次元数は,その並び中の添字三つ組 及び ベクトル添字の個数とする。

C614

(R612)

ゼロでない次元数の部分参照は,一つのデータ参照中に二つ以上あってはならない。ゼロでない

次元数の部分参照より右にある部分名は,

ALLOCATABLE

属性 及び

POINTER

属性をもっていてはな

らない。

ゼロでない次元数の部分参照がある場合,データ参照の次元数はその部分参照の次元数とする。それがない場合,

データ参照の次元数は,ゼロとする。データ参照の 基底実体

(base object)

とは,その左端の部分名を名前にもつデー

タ実体をいう。

データ参照の型 及び (もしあれば) 型パラメタは,右端の部分名の型 及び 型パラメタとする。

二つ以上の部分引用をもつデータ参照は,右端を除いたその部分名がポインタでない場合,基底実体の部分実体で

ある。右端の部分名だけがポインタである場合,そのデータ参照は,ポインタ結合状態にある文脈である場合に限り,

その基底実体の部分実体である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

87

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

6.4

X

をポインタ要素

P

をもつ派生型の実体とする。このとき,

X%P

は,参照はずしの文脈ではな

くポインタそのものと見た文脈の中では

X

の部分実体である。

一方,

X%P

の指す指示先は

X

の部分実体ではない。したがって,

X%P

が参照はずしされている文脈

の中では,引用されている指示先は

X

の部分実体ではない。

R614

構造体成分

is

データ参照

C615

(R614)

構造体成分中には,部分参照が二つ以上なければならない。構造体成分中の右端の部分参照は,

部分配列添字並びの指定がない部分参照でなければならない。

構造体成分は,基底実体の宣言より前で引用 又は 確定してはならない。構造体成分は,その右端の部分名が

POINTER

属性をもつと定義されている場合にだけ,ポインタとする。

6.5

構造体成分の例を次に示す。

SCALAR_PARENT % SCALAR_FIELD

スカラの親のスカラ成分

ARRAY_PARENT (J) % SCALAR_FIELD

配列要素の親成分

ARRAY_PARENT (1:N) % SCALAR_FIELD

部分配列の親成分

より現実的な例を,

C.3.1

に示す。

注記

6.6

構文規則に従うと,添字並びが付かない成分名で終わっているデータ参照は,たとえ他のデー

タ参照の中の成分名に添字並びが付いていたとしても,構造体成分である。添字並びが付いて成分名

で終わっているデータ参照は,配列要素 又は 部分配列のいずれかである。部分列式で終了している

1

次元以上のデータ参照は,部分配列である。部分列式で終了している

0

次元のデータ参照は,部分

列である。

派生型の実体の部分成分

subcomponent

とは,その実体の成分 又は 部分実体とする。

6.1.3

型パラメタ問合せ

型パラメタ問合せ

(type parameter inquiry)

は,データ実体の型パラメタの問合せに用いる。組込み型と派生型の

双方に適用される。

R615

型パラメタ問合せ

is

特定子

%

型パラメタ名

C616

(R615)

型パラメタ名は特定子によって特定される実体の宣言時の型の型パラメタ名でなければならない。

結合されていないポインタ 又は 割り付けられていない割付け変数の無指定の型パラメタに対する型パラメタ問合

せは,してはならない。

注記

6.7

型パラメタ問合せの構文規則は,構造体成分の引用と同様である。ただし,意味が異なる。ま

ず,型パラメタ問合せは変数ではないので,代入ができない。できることは,式中の一次子としてで

きることに限られる。特に,型パラメタ問合せは,その中の特定子が配列であったとしても,スカラ

である。

組込み型の型パラメタに対しても,組込み関数である関数

KIND

及び

LEN

を使って,型パラメタ

問合せができる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

88

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

6.8

型パラメタ問合せの例を示す。

a%kind

!-- a

は実数型である。この値は

KIND(a)

の返す値と同じである。

s%len

!-- s

は文字型である。この値は

LEN(s)

の返す値と同じである。

b(10)%kind

!--

配列要素に対する問合せの例。

p%dim

!-- p

は派生型

general_point

とする。

最後の例中で,型

general point

の定義については

4.24

を参照。

6.2

配列

配列

(array)

は,すべてが同じ型 及び 同じ型パラメタをもつスカラデータの集合とし,それらの要素を四角い形

に配置したものとする。配列を構成するスカラデータを,配列要素

(array element)

という。

配列要素の参照の順序は,配列要素順序(

6.2.2.2

参照)に従うことが指定されている場所以外では,配列名特定

子を書くことによっては指示されない。

6.2.1

全体配列

全体配列

(whole array)

は,名前付き配列とし,その名前は,添字並びをもたない名前付き定数(

5.1.2.10

及び

5.2.9

参照)でも名前付き変数でもよい。

実行文中に書いた全体配列変数は,その配列のすべての要素を指定する(

2.4.5

参照)。大きさ引継ぎ配列を実行文

中に全体配列として書くことができるのは,配列の形状を要求しない手続引用の実引数としてだけとする。

非実行文中に書いた全体配列名は,結合対応中に全体配列が現れた場合(

5.5.1.3

参照)を除いて,配列全体を指

定する。

6.2.2

配列要素 及び 部分配列

R616

配列要素

is

データ参照

C617

(R616)

すべての部分参照の次元数は,ゼロでなければならない。最後の部分参照は,添字並びをもたな

ければならない。

R617

部分配列

is

データ参照

[

(

部分列範囲

)

]

C618

(R617)

部分配列中には,ゼロでない次元数の部分参照がちょうど一つなければならず,最後の部分参照

がゼロでない次元数の部分配列添字並びをもつか 又は 他の部分参照がゼロでない次元数をもつかのいず

れかでなければならない。

C619

(R617)

部分列範囲をもつ部分配列の最も右にある部分名は,文字型でなければならない。

R618

添字

is

スカラ整数式

R619

部分配列添字

is

添字

or

添字三つ組

or

ベクトル添字

R620

添字三つ組

is

[

添字

]

:

[

添字

] [

:

刻み幅

]

R621

刻み幅

is

スカラ整数式

R622

ベクトル添字

is

整数式

C620

(R622)

ベクトル添字は,

1

次元の整数配列式でなければならない。

C621

(R620)

大きさ引継ぎ配列の最後の次元の添字三つ組の

2

番目の添字を省略してはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

89

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

配列要素は,スカラとする。部分配列は,配列とする。部分列範囲をもつ部分配列のそれぞれの要素は,その部分

配列中の対応する要素中の特定された部分列とする。

6.9

次の宣言があるとする。

REAL A (10, 10)

CHARACTER (LEN = 10) B (5, 5, 5)

このとき,次の左の形は,右のものを表す。

A(1,2)

配列要素

A(1:N:2,M)

1

次元部分配列

B(:,:,:)(2:3)

形状が

(5,5,5)

の配列で,各要素が

B

それぞれの要素の長さ

2

の部分列であるもの

注記

6.10

特に指定されない限り,配列要素 及び 部分配列は,その全体配列の属性を引き継がない。特

に,

POINTER

属性 及び

ALLOCATABLE

属性をもつことはない。

6.11

配列要素 及び 部分配列の例を次に示す。

ARRAY_A (1:N:2) % ARRAY_B (I, J) % STRING (K)(:)

部分配列

SCALAR_PARENT % ARRAY_FIELD (J)

配列要素

SCALAR_PARENT % ARRAY_FIELD (1:N)

部分配列

SCALAR_PARENT % ARRAY_FIELD (1:N) % SCALAR_FIELD

部分配列

6.2.2.1

配列要素

配列要素の添字の値は,その次元の上下限の範囲内の値でなければならない。

6.2.2.2

配列要素順序

一つの配列中の要素は,配列要素順序

(array element order)

と呼ばれる列を形成する。この列中での配列要素の位

置は,その要素を特定する添字並びの添字順序値によって決定される。添字順序値は,

6.1

の式で計算する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

90

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

6.1

添字順序値

次元数

添字上下限

添字並び

添字順序値

1

j

1

:

k

1

s

1

1 + (

s

1

j

1

)

2

j

1

:

k

1

,

j

2

:

k

2

s

1

,

s

2

1 + (

s

1

j

1

)

+ (

s

2

j

2

)

×

d

1

3

j

1

:

k

1

,

j

2

:

k

2

,

j

3

:

k

3

s

1

,

s

2

,

s

3

1 + (

s

1

j

1

)

+ (

s

2

j

2

)

×

d

1

+ (

s

3

j

3

)

×

d

2

×

d

1

.

.

.

.

.

.

.

.

.

.

.

.

7

j

1

:

k

1

,

. . .

,

j

7

:

k

7

s

1

,

. . .

,

s

7

1 + (

s

1

j

1

)

+ (

s

2

j

2

)

×

d

1

+ (

s

3

j

3

)

×

d

2

×

d

1

+

· · ·

+ (

s

7

j

7

)

×

d

6

×

d

5

× · · · ×

d

1

注記

1

d

i

= max(

k

i

j

i

+ 1, 0)

は,

i

番目の次元の寸法とする。

2

配列の大きさがゼロでない場合,

i

= 1

,

2

, . . . ,

7

に対して

j

i

s

i

k

i

とする。

6.2.2.3

部分配列

部分配列

(array section)

は,配列部分実体とする。部分配列には,部分列範囲を指定してもよい。

部分配列添字並びの指定のある部分配列において,その部分配列添字並び中のそれぞれの添字三つ組 及び ベクト

ル添字は,添字の列を指定する。その列は,空であってもよい。その列中のそれぞれの添字は,列が空である場合を

除いて,その次元の上下限の範囲内になければならない。それぞれの部分配列添字で指定される単一の添字 又は 添

字の列からすべての可能な添字並びが得られる。部分配列は,配列中の,それらの添字並びによって決定される要素

の集合とする。

部分配列添字並びの指定のない部分配列において,その部分配列の次元数 及び 形状は,次元数がゼロでない部分

参照の次元数 及び 形状とする。部分配列添字並びの指定のある部分配列において,その部分配列の次元数は,部分

配列添字並び中の添字三つ組 及び ベクトル添字の個数とする。その形状は,

i

番目の要素が,

i

番目の添字三つ組 又

は ベクトル添字で指定された列の中の整数値の個数であるような,

1

次元配列とする。これらの列のいずれかが空で

ある場合,部分配列の大きさは,ゼロとする。部分配列の要素の添字順序は,その部分配列が表す配列データ実体の

添字順序とする。

6.2.2.3.1

添字三つ組

添字三つ組

(subscript triplet)

は,ゼロ個以上の添字の値からなる規則的な添字の列を指定する。添字三つ組の

3

番目の式は,添字の値の増分値とし,刻み幅

(stride)

と呼ぶ。添字三つ組の添字 及び 刻み幅は,省略してもよい。添

字三つ組の

1

番目の添字を省略した場合,その配列の下限の値の添字を指定したのと等価とする。

2

番目の添字を省

略した場合,その配列の上限の値の添字を指定したのと等価とする。刻み幅を省略した場合,刻み幅

1

を指定したの

と等価とする。

刻み幅は,ゼロであってはならない。

刻み幅が正である場合,添字三つ組によって指定される添字の列は,

1

番目の添字値から開始し,刻み幅の増分値

をもち,

2

番目の添字値を超えない最大の整数までの等間隔の整数の列とする。

1

番目の添字値が

2

番目より大きい

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

91

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合,列は,空とする。

6.12

A(5,4,3)

と宣言された配列の部分配列

A(3:5,2,1:2)

は,形状

(3

,

2)

の次の

2

次元配列となる。

A(3,2,1)

A(3,2,2)

A(4,2,1)

A(4,2,2)

A(5,2,1)

A(5,2,2)

刻み幅が負である場合,添字の列は,

1

番目の添字値から開始し,刻み幅の増分値をもち,

2

番目の添字値以上の

最小の整数までの減少列とする。

2

番目の添字値が

1

番目より大きい場合,列は,空とする。

6.13

B(10)

と宣言された配列の部分配列

B(9:1:-2)

は,形状

(5)

の配列となる。その配列の要素は,

順に,

B(9)

B(7)

B(5)

B(3)

B(1)

となる。

注記

6.14

配列要素を選択するすべての添字値がその次元の宣言された上下限の範囲内にあれば,添字三

つ組中の添字は,その範囲内になくてもよい。例えば,

B(10)

と宣言された配列の部分配列

B(3:11:7)

は,形状

(2)

の配列となる。その配列の要素は,順に,

B(3)

B(10)

となる。

6.2.2.3.2

ベクトル添字

ベクトル添字

(vector subscript)

は,その配列式の要素の値に対応した添字の列を指定する。式の要素は,すべて

確定となっていなければならない。重複部分配列

(many-one array section)

は,二つ以上の要素が同じ値をもつベク

トル添字で指定された部分配列とする。重複部分配列は,代入文の左辺 又は

READ

文の入力項目として書いてはな

らない。

ベクトル添字をもつ部分配列は,確定 又は 再確定される仮引数と結合する引数であってはならない。ベクトル添

字をもつ部分配列は,ポインタ代入文の指示先であってはならない。ベクトル添字をもつ部分配列は,内部ファイル

であってはならない。

6.15

Z

を形状

(5

,

7)

2

次元配列,

U

及び

V

をそれぞれ形状

(3)

及び

(4)

1

次元配列とし,

U

及び

V

が次の値をもっているとする。

U = (/ 1, 3, 2 /)

V = (/ 2, 1, 1, 3 /)

このとき,

Z(3,V)

は,次の順の

Z

の第

3

行要素からなる。

Z(3,2)

Z(3,1)

Z(3,1)

Z(3,3)

Z(U,2)

は,次の列要素からなる。

Z(1,2)

Z(3,2)

Z(2,2)

Z(U,V)

は,次の要素からなる。

Z(1,2)

Z(1,1)

Z(1,1)

Z(1,3)

Z(3,2)

Z(3,1)

Z(3,1)

Z(3,3)

Z(2,2)

Z(2,1)

Z(2,1)

Z(2,3)

Z(3,V)

及び

Z(U,V)

は,

Z

の要素を重複して含むから,これらをこの部分配列の形で再確定しては

ならない。

6.3

動的結合

ポインタ指示先の生成,結合 及び 解放の動的制御は,

ALLOCATE

文,

NULLIFY

文,

DEALLOCATE

文 及び

ポインタ代入によって行う。

ALLOCATE

文(

6.3.1

参照)は,ポインタの指示先を生成する。ポインタ代入(

7.4.2

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

92

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

参照)は,存在する指示先にポインタを結合する。

NULLIFY

文(

6.3.2

参照)は,指示先との結合を解除してポイ

ンタを空状態にする。

DEALLOCATE

文(

6.3.3

参照)は,指示先を解放する。動的結合は,任意の型のスカラ 及

び 配列に適用できる。

ALLOCATE

文 及び

DEALLOCATE

文は,

ALLOCATABLE

属性をもつ変数の生成 及び 解放にも使用する。

注記

6.16

ポインタ 及び 動的結合に関する詳細な記述を,

C.3.3

に示す。

6.3.1 ALLOCATE

ALLOCATE

(ALLOCATE statement)

は,ポインタ指示先 及び 割付け変数を動的に生成する。

R623

ALLOCATE

is

ALLOCATE (

[

型指定子

::

]

割付け指定並び

[

,

割付け指定選択子列

]

)

R624

割付け指定選択子

is

STAT =

状態変数

   

or

ERRMSG =

誤り通報変数

or

SOURCE =

初期値指定式

R625

状態変数

is

スカラ整変数

R626

誤り通報変数

is

スカラ基本文字変数

R627

初期値指定式

is

R628

割付け指定

is

割付け実体

[

(

割付け上下限並び

)

]

R629

割付け実体

is

変数名

or

構造体成分

R630

割付け上下限

is

[

割付け下限

:

]

割付け上限

R631

割付け下限

is

スカラ整数式

R632

割付け上限

is

スカラ整数式

C622

(R629)

それぞれの割付け実体は,手続を指していないポインタ 又は 割付け変数でなければならない。

C623

(R623)

文中で割付け実体が無指定型パラメタをもつ場合,型指定子 又は

SOURCE

指定子が現れなけ

ればならない。

C624

(R623)

型指定子がある場合,その指定する型は,それぞれの割付け実体と型が適合していなければなら

ない。

C625

(R623)

割付け実体が無制限多相的 又は 抽象型である場合,型指定子 又は

SOURCE

指定子が現れなけ

ればならない。

C626

(R623)

それぞれの割付け実体の対応する型パラメタが引き継がれる仮引数である場合に限り,型指定子

中の型パラメタ値は

*

でなければならない。

C627

(R623)

型指定子がある場合,それぞれの割付け実体の種別型パラメタ値は,その型指定子で対応する型

パラメタ値と同じでなければならない。

C628

(R628)

割付け実体が配列の場合に限り,割付け上下限並びを指定しなければならない。

C629

(R628)

割付け上下限並び中の割付け上下限の個数は,割付け実体の次元数と同じでなければならない。

C630

(R624)

一つの割付け選択子並び中に,同じ割付け選択子を複数回指定してはならない。

C631

(R623) SOURCE

指定子がある場合,型指定子があってはならない。また,割付け並び中の割付け実体

は一つだけでなければならず,かつ 初期値指定式と型が適合(

5.1.1.2

参照)していなければならない。

C632

(R623)

初期値指定式は,スカラ 又は 割付け実体と同じ次元数をもつものでなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

93

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C633

(R623)

対応する割付け実体と初期値指定式の種別型パラメタは,同じ値でなければならない。

割付け実体,その上下限パラメタ 及び 型パラメタは,状態変数の値にも誤り通報変数の値にも依存してはならな

い。更に,同じ

ALLOCATE

文に現れる割付け実体中の値,上下限,長さ型パラメタ,割付け状態,結合状態のいず

れにも依存してはならない。

状態変数,初期値指定式,誤り通報変数はいずれもそれらが現れる

ALLOCATE

文中で割り付けられてはならな

い。更に,同じ

ALLOCATE

文に現れる割付け実体中の値,上下限,長さ型パラメタ,割付け状態,結合状態のいず

れにも依存してはならない。

型指定子はなくてもよいが,指定されたときには割り付けられる実体の実行時の型 及び 型パラメタを指定する。

型指定子がある場合,多相的実体の割付けをすると,指定された実行時の型をもつ実体を割り付ける。初期値指定式

がある場合,実行時の型 及び 型パラメタがその式と同じである実体を割り付ける。それ以外の場合,宣言時の型と

同じ実行時の型をもつ実体を割り付ける。

型指定子を伴う

ALLOCATE

文が実行されると,型指定子中の型パラメタ値で,型パラメタが指定される。型パラ

メタとして指定された値が,割付け実体の宣言中で指定された値と異なる場合,誤り条件が発生する。

ALLOCATE

文における型指定子中の型パラメタ値が

“*”

の場合,引継ぎ型パラメタの現在の値を指す。型パラメ

タ値が式の場合,その式中の変数が後に再確定されても不定になっても,型パラメタ値に影響しない。

6.17

ALLOCATE

文の例を次に示す。

ALLOCATE (X (N), B (-3:M, 0:9), STAT = IERR_ALLOC)

配列に対して

ALLOCATE

文を実行すると,割付け上限 及び 割付け下限の値がその配列の上下限を定める。上下

限の式中のどれかの変数が後に再確定されても不定になっても,その配列の上下限には影響しない。割付け下限を省

略したとき,暗黙値は

1

とする。上限が下限より小さい場合,その次元の寸法 及び 配列の大きさは,ゼロとする。

注記

6.18

割付け実体は,長さゼロの文字型であってもよい。

SOURCE

指定子がある場合,初期値指定式は割付け指定と形状適合(

2.4.5

参照)していなければならない。割付

け実体の長さ型パラメタの値が指定され,それが初期値指定式の対応する型パラメタの値と異なる場合,誤り条件が

発生する。割付けが成功した場合,割付け実体の値は,初期値指定式のものとなる。

6.19

値と実行時の型が,他の実体を参照することで決定する

ALLOCATE

文の例を,次に示す。

CLASS(*), ALLOCATABLE :: NEW

CLASS(*), POINTER :: OLD

! ...

ALLOCATE (NEW, SOURCE=OLD)

! OLD

のもつ値と実行時の型で

NEW

を割り付ける。

より大規模な例を,

C.3.2

に示す。

STAT

指定子のある

ALLOCATE

文の実行が正常に終了した場合,状態変数は,値ゼロで確定となる。

ALLOCATE

文の実行中に誤り条件が発生した場合,状態変数は,処理系依存の正の整数値で確定となり,それぞれの割付け実体

は,処理系依存の状態になる。割付けに成功した割付け実体は,

割り付けられている

という状態 又は

結合して

いる

というポインタ結合状態になり,割付けに失敗した割付け実体は,直前の割付け状態 又は ポインタ結合状態を

保つ。

STAT

指定子のない

ALLOCATE

文の実行中に誤り条件が発生した場合,その実行可能プログラムの実行は,終了

する。

誤り通報指定子については,

6.3.1.3

による。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

94

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

6.3.1.1

割付け変数の割付け

割付け要素の割付け状態は,プログラムの実行中の任意の時点で,次のいずれかとする。

(1)

割付け変数は,

ALLOCATE

文によって割り付けられた場合,代入中に割り付けられた場合,又は割付け転送手

続(

13.5.16

参照)によってそう指定された場合に

割り付けられている

状態になる。この状態をもつ割付け変

数は,引用,確定 又は 解放をしてもよい。

ALLOCATE

文で割り付けようとすることは,

ALLOCATE

文の誤

り条件となる。この状態をもつ変数に対して,組込み関数

ALLOCATED

13.7.9

参照)は真を返す。

(2)

割付け変数は,割り付けられている状態にないとき,

割り付けられていない

状態をもつという。割付け変数

は,解放(

6.3.3

参照)された場合,又は割付け転送手続によってそう指定された場合に,割り付けられていない

状態になる。この状態をもつ割付け変数は,引用も確定もしてはならない。また,

ALLOCATABLE

属性をもっ

ていない仮引数に,実引数として与えてもならない。ただし,組込み問合せ関数の一部では例外がある。割付け

変数が割り付けられていない状態にあれば,

ALLOCATE

文で割り付けてもよい。

DEALLOCATE

文によって

この変数を解放しようとすることは,

DEALLOCATE

文の誤り条件となる。この状態の変数に対して,組込み

関数

ALLOCATED

13.7.9

参照)は,偽を返す。

プログラム実行の当初において,割付け変数はすべて

割り付けられていない

状態にある。

SAVE

属性をもつ割付け変数は,

割り付けられていない

という初期状態をもつ。この状態は,手続の実行中に変

えてもよい。

割付け変数の割付け状態が変更されるとき,その変数と結合状態にある割付け変数の割付け状態も,その変更に従っ

て変更される。割付け変数が割り付けられると,それと結合状態にあるすべての割付け変数について,型パラメタの

値で無指定状態のままであったものは,確定する。

SAVE

属性をもたない割付け変数のうち,手続内で局所的な変数であるものは,手続の呼出し時には

割り付けら

れていない

という割付け状態をもつ。この状態は,手続の実行中に変えてもよい。

SAVE

属性をもたない割付け実

体のうち,モジュール内 又は その実体の部分実体内で局所的な変数であるものは,

割り付けられていない

という

初期状態をもつ。この状態は,手続の実行中に変えてもよい。

派生型をもつ実体が

ALLOCATE

文で生成されたとき,その時点では,その末端成分で,

ALLOCATABLE

属性を

もつものは,すべて

割り付けられていない

という状態をもつ。

6.3.1.2

ポインタ指示先の割付け

ポインタの割付けは,

TARGET

属性を暗黙的にもつ実体を生成する。ポインタに対して,続いて

ALLOCATE

を実行し,それが成功すると,そのポインタは,指示先と結合し,指示先の引用 又は 確定に使用できるようになる。

このポインタ指示先 又は その一部分に,ポインタ代入によって別のポインタを結合してもよい。指示先と結合して

いるポインタを割り付けることは,誤りではない。この場合,ポインタの属性 及び

ALLOCATE

文に指定した配列

上下限,型,型パラメタによって要求されるポインタ指示先が新たに生成され,ポインタは,その指示先と結合され

る。そのポインタのそれまでの指示先との結合は解除される。以前の指示先が割付けによって生成されたものであっ

た場合,その指示先は,それと結合している他のポインタがないときには,参照不能になる。ポインタが不定の結合

状態をもたない限り,そのポインタが結合されているか否かは,組込み関数

ASSOCIATED

13.7.13

参照)によって

知ることができる。

関数結果がポインタである関数の実行の開始時には,そのポインタの結合状態は,不定とする。そのような関数から

の戻りの前には,そのポインタに指示先を結合するか 又は そのポインタの結合状態を空状態にしなければならない。

6.3.1.3

誤り通報指定子

誤り条件が

ALLOCATE

文 又は

DEALLOCATE

文の実行中に発生したとき,処理系は,誤り通報変数にそれを

説明する通報を代入しなければならない。誤り条件が発生しなかったときは,処理系は,誤り通報変数の値を変更し

てはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

95

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

6.3.2 NULLIFY

NULLIFY

(NULLIFY statement)

は,ポインタを空状態にする。

R633

NULLIFY

is

NULLIFY (

ポインタ実体並び

)

R634

ポインタ実体

is

変数名

or

構造体成分

or

手続ポインタ名

C634

(R634)

ポインタ実体は,

POINTER

属性をもたなければならない。

ポインタ実体は,同じ

NULLIFY

文中の他のポインタ実体の値,上下限 又は 結合状態に依存してはならない。

注記

6.20

NULLIFY

文が多相的ポインタ(

5.1.1.2

参照)に適用されると,そのポインタの実行時の型

は宣言されたものになる。

6.3.3 DEALLOCATE

DEALLOCATE

(DEALLOCATE statement)

は,割付け変数を解放し,また,ポインタ指示先を解放してポイ

ンタを空状態にする。

R635

DEALLOCATE

is

DEALLOCATE (

割付け実体並び

[

,

解放指定選択子並び

]

)

C635

(R635)

それぞれの割付け実体は,手続を指していないポインタ 又は 割付け変数でなければならない。

R636

解放指定選択子

is

STAT =

状態変数

   

or

ERRMSG =

誤り通報変数

C636

(R636)

一つの解放指定選択子並びに,同じ解放指定選択子が二つ以上現れてはならない。

割付け実体は,同じ

DEALLOCATE

文中の他の割付け実体の値,上下限,割付け状態 又は 結合状態に依存して

はならない。同じ

DEALLOCATE

文中の状態変数 及び 誤り通報変数の値に依存してもならない。

状態変数 及び 誤り通報変数は,同じ

DEALLOCATE

文で解放されてはならない。状態変数は,同じ

DEALLOCATE

文中の他の割付け実体の値,上下限,割付け状態 又は 結合状態に依存してもならない。

STAT

指定子のある

DEALLOCATE

文の実行が正常に終了した場合,状態変数は,値ゼロで確定となる。

DEALLO-

CATE

文の実行中に誤り条件が発生した場合,状態変数は,処理系依存の正の整数値で確定となり,正常に解放され

た割付け実体は,

割り付けられていない

状態になるか 又は ポインタの結合状態が空状態になる。正常に解放され

なかった割付け実体は,直前の割付け状態 又は ポインタとの結合状態を保つ。

注記

6.21

正しく解放されなかった割付け実体の状態は,組込み関数

ALLOCATED

又は組込み関数

ASSOCIATED

で個々に検査できる。

STAT

指定子のない

DEALLOCATE

文の実行中に誤り条件が発生した場合,その実行可能プログラムの実行は,終

了する。

誤り通報指定子は,

6.3.1.3

による。

6.22

DEALLOCATE

文の例を次に示す。

DEALLOCATE (X, B)

6.3.3.1

割付け変数の解放

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

96

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

割り付けられていない割付け変数を更に解放しようとすると,

DEALLOCATE

文で誤り条件が発生する。

TARGET

属性をもつ割付け変数を解放すると,その割付け変数と結合しているすべてのポインタの結合状態は,不定になる。

RETURN

文 又は

END

文によって手続の実行が終了したとき,その手続内で局所的な名前をもつ割付け変数のう

ち,割付け状態 及び 定義状態を保持するものは,

SAVE

属性をもつか,関数結果変数 又は その部分実体とする。そ

のほかの場合,その変数は解放される。

注記

6.23

変数が割り付けられている状態であるか解放されているかは,組込み関数

ALLOCATED

によっ

て知ることができる。

RETURN

文 又は

END

文によって手続の実行が終了し,モジュールに対する活動状態にある有効域がなくなった

場合,そのモジュールの局所変数であって

SAVE

属性をもたない割付け実体が割り付けられているとき,割付け状態

を保持するか解放されるかは,処理系依存とする。

6.24

SAVE

属性の割付け情報の効果を,次の例で示す。

MODULE MOD1

TYPE INITIALIZED_TYPE

INTEGER :: I = 1

!

暗黙的初期値設定

END TYPE INITIALIZED_TYPE

SAVE :: SAVED1, SAVED2

INTEGER :: SAVED1, UNSAVED1

TYPE(INITIALIZED_TYPE) :: SAVED2, UNSAVED2

ALLOCATABLE :: SAVED1(:), SAVED2(:), UNSAVED1(:), UNSAVED2(:)

END MODULE MOD1

PROGRAM MAIN

CALL SUB1

! SUB1

PRINT

文で呼んでいる組込み関数

ALLOCATED

!

返す値は,次のとおりになる。

!

偽,偽,偽,偽

!

モジュール

MOD1

が参照され,その中の変数が割り付けられる。

!

このサブルーチンから戻ってきた後に,

SAVE

属性がない変数

!

の割付け状態が保持されるかどうかは,処理系依存となる。

CALL SUB1

! SUB1

PRINT

文で呼んでいる最初の二つの組込み関数

! ALLOCATED

の返す値は,次のとおりになる。

!

真,真

!

その次の

PRINT

文中の二つの組込み関数

ALLOCATED

の返す値は,処理系

!

依存となり,それぞれ真にも偽にもなりうる。

CONTAINS

SUBROUTINE SUB1

USE MOD1

! SAVE

属性をもつ変数ともたない変数を参照する。

PRINT *, ALLOCATED(SAVED1), ALLOCATED(SAVED2), &

&

ALLOCATED(UNSAVED1), ALLOCATED(UNSAVED2)

IF (.NOT. ALLOCATED(SAVED1)) ALLOCATE(SAVED1(10))

IF (.NOT. ALLOCATED(SAVED2)) ALLOCATE(SAVED2(10))

IF (.NOT. ALLOCATED(UNSAVED1)) ALLOCATE(UNSAVED1(10))

IF (.NOT. ALLOCATED(UNSAVED2)) ALLOCATE(UNSAVED2(10))

END SUBROUTINE SUB1

END PROGRAM MAIN

ある関数の結果が,

ALLOCATABLE

属性をもつか 又は 構造体であってその部分実体が

ALLOCATABLE

属性を

もち,実行構文中でその関数を引用し,その関数引用が実行されたとき,返された結果 又は 結果の部分実体として

割り付けられた割付け要素は,その引用を含む最も内側の実行構文が実行された後に,解放される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

97

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ある関数の結果がそれ自体

ALLOCATABLE

属性をもつか 又は それが構造体であって部分実体が

ALLOCATABLE

属性をもち,有効域中の宣言式でその関数の引用が実行されたとき,返された結果 又は 結果の部分実体として割り

付けられた割付け要素は,その有効域中の実行構文の実行の前に解放される。

手続が呼び出されるとき,

INTENT(OUT)

属性をもつ割付け仮引数と結合している,割り付けられている状態に

ある割付け実体である実引数は,解放される。

INTENT(OUT)

属性をもつ割付け仮引数と結合している,割り付け

られている状態にある割付け実体である実引数の部分実体は,解放される。

組込み代入文(

7.4.1.3

参照)が実行されると,割り付けられている状態にある割付け実体としての変数の部分実

体は,すべてその代入が行われる前に解放される。

派生型の変数が解放されると,割り付けられている状態にある割付け実体としての部分実体は,すべて解放される。

割付け実体である成分が,後始末可能な実体の部分実体である場合,その成分が自動的に解放される前に,その実

体の後始末が起こる。

自動解放が起こるときの効果は,解放指定選択子並びを指定せずに

DEALLOCATE

文を実行したときの効果と同

じとする。

6.25

次の例において,サブルーチン

PROCESS

から戻る時,

X

SAVE

属性をもっているので,

X

の割

付け状態は保持されなければならない。

TEMP

SAVE

属性をもっていないので,解放される。次の

PROCESS

の実行時には,

TEMP

割り付けられていない

という割付け状態になる。

SUBROUTINE PROCESS

REAL, ALLOCATABLE :: TEMP(:)

REAL, ALLOCATABLE, SAVE :: X(:)

...

END SUBROUTINE PROCESS

6.3.3.2

ポインタ指示先の解放

DEALLOCATE

文中にポインタがある場合,そのポインタの結合状態は,確定でなければならない。空状態のポイ

ンタ 又は

ALLOCATE

文によって生成されたのでない指示先をもつポインタを解放しようとすると,

DEALLOCATE

文で誤り条件が発生する。ポインタが割付け要素と結合されている場合,そのポインタを解放してはならない。

DEALLOCATE

文中にポインタがある場合,そのポインタは,割付けによって生成された実体全体と結合してい

なければならない。ポインタ指示先を解放すると,その指示先 又は その指示先の一部分と結合している他のポイン

タのポインタ結合状態は,不定になる。

7

式 及び 代入

この箇条

7

では,式

,

組込み代入文,利用者定義代入文,ポインタ代入文,配列選別代入文

(WHERE)

及び

FORALL

文 に関する形式,解釈 及び 評価方法を規定する。

7.1

(expression)

は,データの引用 又は 計算のいずれかを表現し,式の値は,スカラ 又は 配列のいずれかとする。

式は,演算対象,演算子 及び 括弧を用いて構成する。

演算対象は,スカラ 又は 配列のいずれかとする。演算は,組込み演算 又は 利用者定義演算

(

7.2

)

のいずれかとす

る。式それ自身を演算対象として用いることによって,より複雑な式を構成することができる。

式の評価によって値を得る。その値は,型,

(もし必要ならば)型パラメタ 及び 形状をもつ(

7.1.4

参照)。

7.1.1

式の形式

式は,一次子,単項段階式,数値段階式,文字段階式,関係段階式 及び 論理段階式を用いて定義する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

98

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

これらの種類は,異なる演算子優先順位に関連しており,一般的には他の種類を用いて定義する。式の最も単純な

形式は,一次子とする。次に与える規則は,式の構文を規定する。式の意味は,

7.2

で規定する。

7.1.1.1

一次子

R701

一次子

is

定数

or

特定子

or

配列構成子

or

構造体構成子

or

関数引用

or

型パラメタ問合せ

or

型パラメタ名

or

(

)

C701

(R701)

型パラメタ名は,型パラメタの名前でなければならない。

C702

(R701)

特定子は,大きさ引継ぎの全体配列であってはならない。

7.1

一次子の例を次に示す。

構文要素

1.0

定数

’ABCDEFGHIJKLMNOPQRSTUVWXYZ’ (I:I)

部分定数

A

変数

(/ 1.0, 2.0 /)

配列構成子

PERSON (12, ’Jones’)

構造体構成子

F (X, Y)

関数引用

(S + T)

(

)

7.1.1.2

単項段階式

利用者定義単項演算子は,最も高い演算子優先順位をもつ

(

7.7

)

。単項段階式は,必要ならば利用者定義単項演

算子を前に付けた一次子とする。

R702

単項段階式

is

[

利用者定義単項演算子

]

一次子

R703

利用者定義単項演算子

is

.

英字

[

英字

] ...

.

C703

(R703)

利用者定義単項演算子の英字は,

63

文字を超えてはならず,どの組込み演算子 又は 論理定数表

現とも同じであってはならない。

7.2

簡単な単項段階式の例を次に示す。

構文要素

A

一次子

(R701)

.INVERSE. B

単項段階式

(R702)

複雑な単項段階式の例を次に示す。

.INVERSE. (A + B)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

99

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.1.1.3

数値段階式

数値段階式は,必要ならば数値演算子であるべき乗演算子,乗除演算子 及び 加減演算子を伴う単項段階式とする。

R704

乗除演算対象

is

単項段階式

[

べき乗演算子 乗除演算対象

]

R705

加減演算対象

is

[

加減演算対象 乗除演算子

]

乗除演算対象

R706

数値段階式

is

[ [

数値段階式

]

加減演算子

]

加減演算対象

R707

べき乗演算子

is

**

R708

乗除演算子

is

*

or

/

R709

加減演算子

is

+

or

-

7.3

簡単な数値段階式の例を次に示す。

構文要素

説明

A

単項段階式

A

は一次子である。

(R702)

B ** C

乗除演算対象

B

は単項段階式であり,

**

はべき乗演算子であり,

C

は乗除演算対象である。

(R704)

D * E

加減演算対象

D

は加減演算対象であり,

*

は乗除演算子であり,

E

は乗除演算対象である。

(R705)

+1

数値段階式

+

は加減演算子であり,

1

は加減演算対象である。

(R706)

F - I

数値段階式

F

は数値段階式であり,

-

は加減演算子であり,

I

は加減演算対象である。

(R706)

複雑な数値段階式の例を次に示す。

- A + D * E + B ** C

7.1.1.4

文字段階式

文字段階式は,必要ならば文字演算子である連結演算子を伴う数値段階式とする。

R710

文字段階式

is

[

文字段階式 連結演算子

]

数値段階式

R711

連結演算子

is

//

7.4

簡単な文字段階式の例を次に示す。

構文要素

A

数値段階式

(R706)

B // C

文字段階式

(R710)

複雑な文字段階式の例を次に示す。

X // Y // ’ABCD’

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

100

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.1.1.5

関係段階式

関係段階式は,必要ならば関係演算子を伴う文字段階式とする。

R712

関係段階式

is

[

文字段階式 関係演算子

]

文字段階式

R713

関係演算子

is

.EQ.

or

.NE.

or

.LT.

or

.LE.

or

.GT.

or

.GE.

or

==

or

/=

or

<

or

<=

or

>

or

>=

7.5

簡単な関係段階式の例を次に示す。

構文要素

A

文字段階式

(R710)

B == C

関係段階式

(R712)

D < E

関係段階式

(R712)

複雑な関係段階式の例を次に示す。

(A + B) /= C

7.1.1.6

論理段階式

論理段階式は,必要ならば論理演算子である否定演算子,論理積演算子,論理和演算子 及び 論理等否演算子を伴

う関係段階式とする。

R714

論理積演算対象

is

[

否定演算子

]

関係段階式

R715

論理和演算対象

is

[

論理和演算対象 論理積演算子

]

論理積演算対象

R716

論理等否演算対象

is

[

論理等否演算対象 論理和演算子

]

論理和演算対象

R717

論理段階式

is

[

論理段階式 論理等否演算子

]

論理等否演算対象

R718

否定演算子

is

.NOT.

R719

論理積演算子

is

.AND.

R720

論理和演算子

is

.OR.

R721

論理等否演算子

is

.EQV.

or

.NEQV.

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

101

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.6

簡単な論理段階式の例を次に示す。

構文要素

A

関係段階式

(R712)

.NOT. B

論理積演算対象

(R714)

C .AND. D

論理和演算対象

(R715)

E .OR. F

論理等否演算対象

(R716)

G .EQV. H

論理段階式

(R717)

S .NEQV. T

論理段階式

(R717)

複雑な論理段階式の例を次に示す。

A .AND. B .EQV. .NOT. C

7.1.1.7

式の一般形

式は,必要ならば利用者定義

2

項演算子を伴う論理段階式とする。利用者定義

2

項演算子は,演算子優先順位が最

も低い(

7.7

)。

R722

is

[

式 利用者定義

2

項演算子

]

論理段階式

R723

利用者定義

2

項演算子

is

.

英字

[

英字

] ...

.

C704

(R723)

利用者定義

2

項演算子の英字は,

63

文字を超えてはならず,どの組込み演算子 又は 論理定数表

現とも同じであってはならない。

7.7

簡単な式の例を次に示す。

構文要素

A

論理段階式

(R717)

B .UNION. C

(R722)

複雑な式の例を次に示す。

(B .INTERSECT. C) .UNION. (X - Y)

A + B == C * D

.INVERSE. (A + B)

A + B .AND. C * D

E // G == H (1:10)

7.1.2

組込み演算

組込み演算

(intrinsic operation)

は,組込み単項演算 又は 組込み

2

項演算のいずれかとする。組込み単項演算

(intrinsic unary operation)

は,

組込み演算子

x

2

という形式の演算とする。ここで,

x

2

は,組込み単項演算子に

関して

7.1

に規定された組込み型

(

4.4

)

をもつ。

組込み

2

項演算

(intrinsic binary operation)

は,

x

1

組込み演算子

x

2

という形式の演算とする。ここで,

x

1

及び

x

2

は,組込み

2

項演算子に関して

7.1

に規定された組込み型

(

4.4

)

をもち,かつ 形状適合である

(

7.1.5

)

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

102

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.1

組込み演算に関する演算対象 及び 演算結果の型

組込み演算子

op

x

1

の型

x

2

の型

[

x

1

]

op x

2

の型

単項の

+

-

I

R

Z

I

R

Z

2

項の

+

-

*

/

**

I

I

R

Z

I

R

Z

R

I

R

Z

R

R

Z

Z

I

R

Z

Z

Z

Z

//

C

C

C

.EQ.

.NE.

==

/=

I

I

R

Z

L

L

L

R

I

R

Z

L

L

L

Z

I

R

Z

L

L

L

C

C

L

.GT.

.GE.

.LT.

.LE.

I

I

R

L

L

>

>=

<

<=

R

I

R

L

L

C

C

L

.NOT.

L

L

.AND.

.OR.

.EQV.

.NEQV.

L

L

L

注記

記号

I

R

Z

C

及び

L

は,それぞれ整数型,実数型,複素数型,文字型 及び

論理型を表す。

x

2

について二つ以上の型が与えられているところでは,演算結果

の型は,結果の列の同じ相対位置に与える。演算対象が文字型の組込み演算子に

ついて,その二つの演算対象の種別型パラメタは,同じでなければならない。

数値組込み演算

(numeric intrinsic operation)

は,組込み演算子が数値演算子(

+

-

*

/

及び

**

)である組込

み演算とする。数値組込み演算子

(numeric intrinsic operator)

は,数値組込み演算における演算子とする。

数値組込み

2

項演算において,二つの演算対象は,異なる数値型 又は 異なる種別型パラメタをもってもよい。整

数によってべき乗する値を除いて,もし二つの演算対象が異なる型 又は 異なる種別型パラメタをもつならば,演算

結果の型 又は 種別型パラメタとは異なる型 又は 種別型パラメタをもつ演算対象は,演算を実行する前に演算結果の

型 及び 種別型パラメタに変換する。実数型 又は 複素数型の値を整数によってべき乗するときには,整数型演算対象

を変換する必要はない。

同様にして,文字組込み演算

(character intrinsic operation)

,関係組込み演算

(relational intrinsic operation)

び 論理組込み演算

(logical intrinsic operation)

は,それぞれ 文字組込み演算子

(character intrinsic operator)

//

),

関係組込み演算子

(relational intrinsic operator)

.EQ.

.NE.

.GT.

.GE.

.LT.

.LE.

==

/=

>

>=

<

及び

<=

)並びに 論理組込み演算子

(logical intrinsic operator)

.AND.

.OR.

.NOT.

.EQV.

及び

.NEQV.

)によって定

義する。組込み演算子

//

では,種別型パラメタは,同じでなければならない。文字演算対象の関係組込み演算子

では,その演算対象の種別型パラメタは,同じでなければならない。

数値関係組込み演算

(numeric relational intrinsic operation)

は,演算対象が数値型である関係組込み演算とする。

文字関係組込み演算

(character relational intrinsic operation)

は,二つの演算対象が文字型である関係組込み演算と

する。

7.1.3

利用者定義演算

利用者定義演算

(defined operation)

は,利用者定義単項演算 又は 利用者定義

2

項演算のいずれかとする。利用者

定義単項演算

(defined unary operation)

は,次のいずれかとする。

(1)

利用者定義単項演算子

x

2

という形式をもち,関数副プログラム 及び 総称引用仕様

(

4.5.1

,

12.3.2.1

)

によっ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

103

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

て定義する。

(2)

単項組込み演算子

x

2

という形式をもち,関数副プログラム 及び 総称引用仕様によって定義する。

単項演算

op x

2

を定義する関数は,次の条件をすべて満たさなければならない。

(1)

その関数を定義するのに用いる

FUNCTION

(

12.5.2.1

)

又は

ENTRY

(

12.5.2.4

)

が,一つの仮引数

d

2

けを指定する。

(2)

次のいずれかを満たす。

(a)

総称引用仕様

(

12.3.2.1

)

が,

OPERATOR(

op

)

という総称指定をもつ関数を指定する。

(b)

OPERATOR(

op

)

という総称指定をもつ

x

2

の宣言時の型に総称束縛

(

4.5.4

)

があり,かつ その

x

2

の実行時

の型における関数への対応する束縛がある。

(3)

d

2

の型が

x

2

の実行時の型と適合する。

(4)

d

2

に型パラメタがあるとき,それは 対応する

x

2

の型パラメタと一致する。

(5)

次のいずれかを満たす。

(a)

x

2

の次元数は,

d

2

のそれと一致する。

(b)

その関数が要素別処理関数であり,かつ この演算を定義する関数が他にない。

仮引数

d

2

が配列であるとき,

x

2

の形状は,

d

2

の形状と一致する。

利用者定義

2

項演算

(defined binary operation)

は,次のいずれかとする。

(1)

x

1

利用者定義

2

項演算子

x

2

という形式をもち,関数副プログラム 及び 総称引用仕様によって定義する。

(2)

x

1

組込み演算子

x

2

という形式をもち,関数副プログラム 及び 総称引用仕様によって定義する。

2

項演算

x

1

op x

2

を定義する関数は,次の条件をすべて満たさなければならない。

(1)

その関数を定義するのに用いる

FUNCTION

(

12.5.2.1

)

又は

ENTRY

(

12.5.2.4

)

が,二つの仮引数

d

1

d

2

を指定する。

(2)

次のいずれかを満たす。

(a)

総称引用仕様

(

12.3.2.1

)

が,

OPERATOR(

op

)

という総称指定をもつ関数を指定する。

(b)

OPERATOR(

op

)

という総称指定をもつ

x

1

又は

x

2

の宣言時の型に総称束縛

(

4.5.4

)

があり,かつ その

x

1

又は

x

2

の実行時の型における関数への対応する束縛がある。

(3)

d

1

及び

d

2

の型が

x

1

及び

x

2

の実行時の型とそれぞれ適合する。

(4)

d

1

及び

d

2

に型パラメタがあるとき,それは

x

1

及び

x

2

それぞれの対応する型パラメタと一致する。

(5)

次のいずれかを満たす。

(a)

x

1

及び

x

2

の次元数は,

d

1

及び

d

2

の次元数とそれぞれ一致する。

(b)

その関数が要素別処理関数であり,

x

1

及び

x

2

が形状適合であって,この演算を定義する関数がほかに

ない。

仮引数

d

1

又は

d

2

が配列であるとき,

x

1

及び

x

2

の形状は,

d

1

及び

d

2

の形状とそれぞれ一致する。

注記

7.8

組込み演算子は,利用者定義演算中の演算子として使用できる。その場合に,演算子の総称特性

は,拡張される。

拡張演算

(extension operation)

は,演算子が利用者定義単項演算子 又は 利用者定義

2

項演算子である利用者定義

演算とする。そのような演算子を 拡張演算子

(extension operator)

と呼ぶ。拡張演算に使用される演算子は,その演

算子に対する総称引用仕様が二つ以上の関数を規定するものであってもよい。

利用者定義要素別処理演算

(defined elemental operation)

は,関数が要素別処理

(

12.7

)

である利用者定義演算と

する。

7.1.4

式の型

,

型パラメタ 及び 形状

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

104

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

式の型,型パラメタ 及び 形状は,式の中で使用する演算子 並びに 一次子の型,型パラメタ 及び 形状に依存し,

式の構文から再帰的に決定される。式の型は,組込み型

(

4.4

)

又は 派生型

(

4.5

)

の中の一つとする。

式が多相的な一次子 又は 利用者定義演算であるとき,式の型パラメタ 並びに 宣言時の型 及び 実行時の型は,そ

れらの一次子 又は 利用者定義演算と同じとする。それ以外の式では,式の型パラメタ 及び 実行時の型は,その式の

宣言時の型 及び 型パラメタと同じになる。それらを単に式の型 及び 型パラメタと呼ぶ。

R724

論理式

is

C705

(R724)

論理式は,論理型でなければならない。

R725

文字式

is

C706

(R725)

文字式は,文字型でなければならない。

R726

基本文字式

is

C707

(R726)

基本文字式は,基本文字型でなければならない。

R727

整数式

is

C708

(R727)

整数式は,整数型でなければならない。

R728

数値式

is

C709

(R728)

数値式は,整数型,実数型 又は 複素数型でなければならない。

7.1.4.1

一次子の型

,

型パラメタ 及び 形状

一次子の型,パラメタ 及び 形状は,その一次子が定数,変数,配列構成子,構造体構成子,関数引用,型パラメ

タ問合せ,型パラメタ名 又は 括弧付き式であるか否かに従って決定される。一次子が定数の場合,その型,型パラ

メタ 及び 形状は,定数のそれとする。構造体構成子の場合,その一次子はスカラとし,その型 及び 型パラメタは

4.5.9

に規定するとおりとする。配列構成子の場合,その型,型パラメタ 及び 形状は,

4.7

に規定するとおりとする。

変数 又は 関数引用の場合,その型,型パラメタ 及び 形状は,それぞれ変数

(

5.1.1

5.1.2

)

又は 関数引用

(

12.4.2

)

のそれとする。関数引用が総称

(

12.3.2.1, 13.5

)

である場合,その型,型パラメタ 及び 形状は,実引数の型,型パ

ラメタ 及び 次元数によって

12.4.4.1

のとおりに決まる個別の関数引用による。型パラメタ問合せ 又は 型パラメタ

名である場合,その型パラメタの種別をもつスカラ整数とする。

一次子が括弧付き式の場合,その型,型パラメタ 及び 形状は,その式のそれとする。

次のいずれかとしてポインタを用いたときは,結合された指示先実体が引用される。

(1)

組込み演算 又は 利用者定義演算の中の一次子

(2)

括弧付き一次子の式

(3)

組込み代入文の右辺のただ一つの一次子

その一次子の型,型パラメタ 及び 形状は,現在の指示先のそれとする。指示先と結合していないポインタを一次

子として書くことができるのは,対応する仮引数がポインタであると宣言されている手続の引用における実引数とし

て 又は ポインタ代入文の指示先としてだけとする。

空状態の配列ポインタ 又は 割り付けられていない割付け配列は,形状をもたないが,次元数をもつ。組込み関数

NULL

の結果の型,型パラメタ 及び 次元数は,文脈に依存する

(

13.7.88

)

7.1.4.2

演算結果の型

,

型パラメタ 及び 形状

組込み演算

[

x

1

]

op x

2

の結果の型は,

7.1

によって規定する。

組込み演算の結果の形状は,

op

が単項演算子であるか 又は

x

1

がスカラであるとき,

x

2

の形状とし,それ以外の

ときは

x

1

の形状とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

105

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

利用者定義演算

[

x

1

]

op x

2

の結果の型,型パラメタ,及び 形状は,その演算を定義する関数で指定する

(

7.2

)

組込み型の式は,種別型パラメタをもつ。文字型の式は,更に文字長パラメタをもつ。

組込み演算の結果の型パラメタは,次による。

(1)

x

1

及び

x

2

が文字型である場合,式

x

1

//

x

2

//

は文字組込み演算)の文字長パラメタは,演算対象の長さ

の和とし,その種別型パラメタは,

x

1

の種別型パラメタとする。ただし,その種別型パラメタは,

x

2

の種別型

パラメタと同じでなければならない。

(2)

op

を組込み単項演算子,

x

2

を整数型,実数型,複素数型 又は 論理型とする場合,式

op x

2

の種別型パラメタ

は,演算対象のそれとする。

(3)

op

を数値組込み

2

項演算子とし,その一方の演算対象が整数型であり,かつ 他方の演算対象が実数型 又は 複

素数型である場合,式

x

1

op x

2

の種別型パラメタは,実数型 又は 複素数型のそれとする。

(4)

op

が数値組込み

2

項演算子の場合,その二つの演算対象が同じ型 及び 同じ種別型パラメタをもつか,又は 一

方の演算対象が実数型であって他方が複素数型で同じ種別型パラメタをもつとき,式

x

1

op x

2

の種別型パラメ

タは,演算対象の種別型パラメタと同一とする。二つの演算対象が整数型で,かつ 異なる種別型パラメタをもつ

とき,式の種別型パラメタは,

10

進指数範囲が異なるならば,より大きな

10

進指数範囲をもつ演算対象の種別

型パラメタとする。

10

進指数範囲が等しいならば,式の型パラメタは処理系依存とするが,種別型パラメタはど

ちらかの演算対象と同じとする。二つの演算対象が実数型 又は 複素数型のいずれかで,かつ 異なる種別型パラ

メタをもつとき,式の種別型パラメタは,

10

進精度が異なるならば,より大きな

10

進精度をもつ演算対象の種

別型パラメタとする。

10

進精度が等しいならば,式の種別型パラメタは処理系依存とするが,種別型パラメタは

どちらかの演算対象と同じとする。

(5)

op

が論理組込み

2

項演算子の場合,その二つの演算対象が同じ種別型パラメタをもつとき,式

x

1

op x

2

の種別

型パラメタは,演算対象の種別型パラメタと同一とする。二つの演算対象が論理型で,かつ 異なる種別型パラメ

タをもつとき,式の種別型パラメタは処理系依存とするが,種別型パラメタはどちらかの演算対象と同じとする。

(6)

op

が関係組込み演算子の場合,式

x

1

op x

2

は,基本論理型の種別型パラメタをもつ。

7.1.5

要素別処理演算の適合規則

要素別処理演算

(elemental operation)

は,組込み演算 又は 利用者定義要素別処理演算のいずれかとする。二つの

データ要素が同じ形状の配列であるか,又は データ要素の一方 若しくは 両方がスカラであるとき,二つのデータ要

素は,形状適合

(shape conformance)

であるとする。

すべての要素別処理

2

項演算について,二つの演算対象は,形状適合でなければならない。演算対象の一方がスカ

ラであり,かつ 他方が配列である場合,そのスカラは,配列演算対象と等しい形状をもち,かつ 配列のすべての要

素が(それがあるときは)そのスカラ値に等しい配列として扱われる。

7.1.6

宣言式

宣言式

(specification expression)

は,長さ型パラメタ

(C501)

,配列の上下限

(R512, R513)

などの宣言に用いるの

に適した制限をもつ式とする。

R729

宣言式

is

スカラ整数式

C710

(R729)

スカラ整数式は,制限式でなければならない。

制限式

(restricted expression)

は,その中のすべての演算が組込みであり,かつ すべての一次子が次のいずれかで

ある式とする。その中のそれぞれの添字,部分配列添字,部分列開始位置,部分列終了位置 及び 型パラメタ値は,制

限式とし,すべての呼び出される後始末サブルーチンは純粋とする。

(1)

定数 又は 部分定数。

(2)

OPTIONAL

属性 及び

INTENT(OUT)

属性のいずれももたない仮引数としての基底実体をもつ実体特定子。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

106

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(3)

共通ブロック内の基底実体をもつ実体特定子。

(4)

参照結合 又は 親子結合によって参照可能となった基底実体をもつ実体特定子。

(5)

配列構成子。その中のすべての要素 及び 配列構成

DO

制御の各スカラ整数式が制限式である。

(6)

構造体構成子。その中のすべての成分が,制限式である。

(7)

各特定子 又は 関数引数が次のいずれかである宣言問合せ。

(a)

制限式。

(b)

その性質の問合せができる変数。ただし,その性質は,次のいずれでもない。

(i)

大きさ引継ぎ配列の最後の次元の上限に依存するもの。

(ii)

無指定 。

(iii)

制約式以外の式で確定されるもの。

(8)

他の組込み関数の引用。すべての引数が,制限式である。

(9)

宣言関数の引用。すべての引数が,制限式である。

(10)

定義される派生型の型パラメタ。

(11)

配列構成子中の配列構成

DO

変数。対応する配列構成

DO

制御の各スカラ整数式が,制限式である。

(12)

括弧でくくられた制限式。

宣言問合せ

(specification inquiry)

は次のいずれかの引用とする。

(1)

配列問合せ関数

(

13.5.7

)

(2)

2

進数問合せ関数

BIT SIZE

(3)

文字問合せ関数

LEN

(4)

種別問合せ関数

KIND

(5)

文字問合せ関数

NEW LINE

(6)

数値問合せ関数

(

13.5.6

)

(7)

型パラメタ問合せ

(

6.1.3

)

(8)

IEEE

問合せ関数

(

14.9.1

)

宣言関数

(specification function)

は,純粋な関数であり,標準組込み関数でなく,内部関数でなく,

文関数でなく,

手続引数をもたない関数とする。

宣言関数の評価は,呼び出される副プログラムによって定義される手続を,直接的にも間接的にも呼び出してはな

らない。

注記

7.9

宣言関数は,宣言式中でデータ実体の属性を決定するのに用いることができる組込みでない関数

である。純粋な関数でなければならないという条件から,同じ宣言部で宣言された他の実体に影響す

るような副作用をもたないことが保証される。内部関数であってはならないという条件から,同じ宣

言部で宣言された他の実体について(親子結合を通じて)問い合わせることができないことが保証さ

れる。再帰の禁止は,手続の構築中に,手続の新しいインスタンスを作ることを避けることにある。

宣言式の中の変数は,型をもたなければならず,もし必要ならば型パラメタももたなければならない。その型 及び

型パラメタは,同じ有効域内の先行する宣言,その有効域について有効な暗黙の型規則,親子結合 又は 参照結合に

よって指定する。宣言式の中の変数が暗黙の型規則によっているとき,その後の型宣言文は,その暗黙の型 及び 暗

黙の型パラメタを確認するものでなければならない。

宣言式が同じ宣言部の中で宣言されたデータ要素の型パラメタ 又は 配列上下限に依存する宣言問合せを含む場合,

その型パラメタ 又は 配列上下限は,宣言部の先行する部分に宣言されていなければならない。その宣言は,同じ文の

中の宣言問合せの左側にあってもよいが,同じデータ要素宣言内にあってはならない。宣言式が同じ宣言部の中で宣

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

107

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

言された配列要素の値を引用する場合,その配列は,宣言部の先行する部分で完全に宣言されていなければならない。

モジュール中の宣言式が総称の引用を含む場合,その総称は宣言式を伴うモジュールで定義された個別手続であって

はならない。

7.10

宣言式の例を次に示す。

LBOUND (B, 1) + 5

!

B

は,大きさ引継ぎ仮配列とする。

M + LEN (C)

!

M

及び

C

は,仮引数とする。

2 * PRECISION (A)

!

A

は,

USE

文によって参照可能になった実数変数とする。

7.1.7

初期値式

初期値式

(initialization expression)

は,種別型パラメタ,初期化,又は 名前付き定数として用いるのに適した制

限のある式である。これは,すべての演算が組込みであり,かつ すべての一次子が次のいずれかである式とする。た

だし,その中のすべての添字,部分配列添字,部分列開始位置,部分列終了位置 及び 型パラメタ値は,初期値式と

する。

(1)

定数 又は 部分定数。

(2)

配列構成子。その中のすべての要素,及び すべての配列構成

DO

制御のすべてのスカラ整数式は,初期値式で

ある。

(3)

構造体構成子。その中のすべての割付け成分に対応する成分指定は,変形組込み関数

NULL

の引用であり,それ

以外の成分指定が,初期値式である。

(4)

要素別処理標準組込み関数の引用。すべての引数が,初期値式である。

(5)

NULL

以外の変形標準組込み関数の引用。すべての引数が,初期値式である。

(6)

変形組込み関数

NULL

の引用。初期値式以外の式で定義されるか 又は 仮定される型パラメタをもつ引数をもた

ない。

(7)

組込みモジュール

IEEE ARITHMETIC

(

14

)

からの変形関数

IEEE SELECTED REAL KIND

の引用。すべての引数が,

初期値式である。

(8)

宣言問合せ。すべての特定子 又は 関数引数は,次のいずれかとする。

(a)

初期値式。

(b)

その性質の問合せができる変数。ただし,その性質は,次のいずれでもない。

(i)

引き継がれるもの。

(ii)

無指定。

(iii)

初期値式以外の式で確定されるもの。

(9)

定義された派生型の種別型パラメタ。

(10)

配列構成子中の配列構成

DO

変数。配列構成

DO

制御に対応するすべてのスカラ整数式が,初期値式である。

(11)

括弧でくくられた初期値式。

R730

初期値式

is

C711

(R730)

初期値式は,上に定めた初期値式の制限に従わなければならない。

R731

文字初期値式

is

文字式

C712

(R731)

文字初期値式は,初期値式でなければならない。

R732

整数初期値式

is

整数式

C713

(R732)

整数初期値式は,初期値式でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

108

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R733

論理初期値式

is

論理式

C714

(R733)

論理初期値式は,初期値式でなければならない。

初期値式が同じ宣言部の中で宣言されたデータ要素の型パラメタ 又は 配列上下限に依存する宣言問合せを含む場

合,その型パラメタ 又は 配列上下限は,宣言部の先行する部分に宣言されていなければならない。その宣言は,同

じ文の中のその宣言問合せの左側にあってもよいが,同じデータ要素宣言中にあってはならない。モジュール中の初

期値式が総称の引用を含む場合,その総称は初期値式を伴うモジュールで定義された個別手続であってはならない。

7.11

初期値式の例を次に示す。

3

-3 + 4

’AB’

’AB’ // ’CD’

(’AB’ // ’CD’) // ’EF’

SIZE (A)

DIGITS (X) + 4

4.0 * atan(1.0)

ceiling(number_of_decimal_digits / log10(radix(0.0)))

ここで,

A

は定数上下限をもつ形状明示配列とし,

X

は基本実数型とする。

7.1.8

演算の評価

組込み演算は,演算対象の値を必要とする。

処理系が採用している算術で定義されない数値演算は,実行してはならない。実数型一次子の値が負であって,べ

き指数が実数型であるべき乗は,してはならない。

関数引用の評価は,文の中の他のデータ要素の評価に影響を与えたり与えられたりしてはならない。関数引用がそ

の関数の実引数を確定 又は 不定にする場合,その引数 又は それに結合している実体は同じ文の他の場所に現れては

ならない。ただし,

IF

(

8.1.2.4

)

の論理式,単純

WHERE

(

7.4.3.1

)

の選別式 又は

FORALL

(

7.4.4

)

の添字

若しくは 刻み幅における関数引用の実行は,選択的に実行される文の中の変数を確定にしてもよい。

7.12

関数

F

の引用が

I

を確定 若しくは 不定にし,又は 関数

G

の引用が

X

を確定 若しくは 不定にす

るとき,次の文は,許されない。

A (I) = F (I)

Y = G (X) + X

これに対し,次の文で,

F

又は

G

は,

X

を確定してもよい。

IF (F (X)) A = X

WHERE (G (X)) B = X

関数引用を含む式の宣言時の型は,関数の実引数の評価に影響を与えたり与えられたりしない。

配列要素の引用の実行には,その添字の評価を必要とする。配列要素の引用を含む式の型は,その添字の評価に影

響を与えたり与えられたりしてはならない。部分配列の引用の実行には,部分配列添字の評価を必要とする。部分配

列を含む式の型は,その部分配列添字の評価に影響を与えたり与えられたりしてはならない。部分列の引用の実行に

は,文字位置式の評価を必要とする。部分列を含む式の型は,その文字位置式の評価に影響を与えたり与えられたり

してはならない。処理系は,大きさゼロの配列の添字式 及び 長さゼロの文字データ要素についての文字列式を評価

する必要はない。

配列構成子の評価には,それが含む任意の配列構成

DO

形反復中の配列構成

DO

制御のすべてのスカラ整数式の評

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

109

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

価を必要とする。配列構成子を含む式の型は,そのような上下限 及び 刻み幅の評価に影響を与えたり与えられたり

してはならない。

要素別処理

2

項演算をスカラと配列 又は 同じ形状の二つの配列に適用すると,その演算は,配列演算対象の配列

要素に対応して要素ごとに実行される。処理系は,要素ごとの演算を任意の順序で実行してよい。

7.13

次の配列式は,

A

及び

B

と同じ形状の配列を作る。

A + B

演算結果の個々の配列要素は,

A

の最初の要素に

B

の最初の要素を加えた値,

A

2

番目の要素に

B

2

番目の要素を加えた値などをもつ。

要素別処理単項演算が配列演算対象に作用するとき,演算は,要素ごとに任意の順序で実行してよく,演算結果は,

演算対象と同じ形状とする。

7.1.8.1

演算対象の評価

処理系は,式の演算対象のすべてを完全に評価しなくても式の値を決定できるとき,演算対象を完全に評価する必

要はない。

注記

7.14

この原則は,論理式,大きさゼロの配列 及び 長さゼロの文字列に適用できることが多いが,他

のあらゆる式にも適用できる。例えば,

X

Y

及び

Z

を実数とし,

L

を論理型関数とするとき,次の

式の評価において,もし

X

Y

よりも大きいならば,関数引用

L (Z)

は評価する必要がない。

X > Y .OR. L (Z)

A

を大きさゼロの配列とし,

W

を関数とするとき,次の配列式において,関数引用

W (Z)

は評価す

る必要がない。

W (Z) + A

文が評価する必要のない関数引用を式の一部に含むとき,引用の実行によって値が確定するすべてのデータ要素は,

その関数引用を含む式の評価の終了時には不定のままとなる。

注記

7.15

注記

7.14

の例では,もし

L

又は

W

が引数を確定にするならば,ある条件の下では,式の評価

は,

Z

を不定にする。これは,

L(Z)

又は

W(Z)

が評価されるか否かによらない。

7.1.8.2

括弧の保存

7.1.8.2

7.1.8.7

では,

7.1.1

及び

7.2

において規定する規則の適用によって得られる式とは異なる式を処理系が

評価できる条件を定める。ただし,括弧でくくられた式は,一つのデータ要素として扱われなければならない。

7.16

A

B

及び

C

を数値型とするとき,処理系は,式

A + (B - C)

の評価において,

B

C

の差をま

ず評価し,次に加算を実行しなければならない。数学的に等価な式

(A + B) - C

として評価しては

ならない。

7.1.8.3

数値組込み演算の評価

7.2.1

で定める規則は,数値組込み演算の解釈を規定する。それらの規則に従って一度解釈が確立したら,処理系

は,括弧の保存を犯さない限り,その式と数学的に同値な別の式を評価してもよい。

二つの数値型の式は,その一次子がとりうるすべての値に対して数学的な値が等しいとき,数学的に同値とする。

しかし,数学的に同値な数値型の式は,異なる計算結果を生成することがありうる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

110

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.17

(1./3.)*3.

1.

との値の違いは,計算上の違いとし,数学的な違いとはしない。式

5/2

5./2.

との値の違いは,数学的な違いとし,計算上の違いとはしない。整数型の除算の数学的な定義

は,

7.2.1.1

で定める。

7.18

式を評価するときに処理系に許されている変形の例を次に示す。

A

B

及び

C

は,任意の実数演算

対象 又は 複素数演算対象を表し,

I

及び

J

は,整数演算対象を表し,

X

Y

及び

Z

は,任意の数値

演算対象を表す。

許されている変形

X + Y

Y + X

X * Y

Y * X

-X + Y

Y - X

X + Y + Z

X + (Y + Z)

X - Y + Z

X - (Y - Z)

X * A / Z

X * (A / Z)

X * Y - X * Z

X * (Y - Z)

A / B / C

A / (B * C)

A / 5.0

0.2 * A

式を評価するときに処理系に禁止されている変形の例を次に示す。

禁止されている変形

I / 2

0.5 * I

X * I / J

X * (I / J)

I / J / A

I / (J * A)

(X + Y) + Z

X + (Y + Z)

(X * Y) - (X * Z)

X * (Y - Z)

X * (Y - Z)

X * Y - X * Z

所要の解釈を得るための括弧のほかに,式の実際の評価において処理系に許される変形を制限するための括弧を用

いてもよい。これは,式の評価の途中で生成される中間値の大きさと精度を制御するのに役立つ。

7.19

次の式においては,括弧付き式

(B - C)

をまず評価し,その後で

A

に加えなければならない。

A + (B - C)

括弧を入れると,式の数学的な値が変わることもある。例えば,次の二つの式は,

I

及び

J

が整数

型のとき,異なる数学的な値をもつことがある。

A * I / J

A * (I / J)

数値組込み演算におけるそれぞれの演算対象は,処理系が用いる評価の順序に従った型をもつ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

111

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.20

Z

R

及び

I

をそれぞれ複素数型,実数型 及び 整数型のデータ実体とするとき,

Z + R + I

の評価において,

I

に加えられる演算対象の型は,複素数型 又は 実数型のいずれでもよく,それは

どの演算対象の対(

Z

R

R

I

,又は

Z

I

)が最初に加算されるかによる。

7.1.8.4

文字組込み演算の評価

7.2.2

で定める規則は,文字組込み演算の解釈を規定する。処理系は,式の現れる文脈で要求されるだけの文字組

込み演算を評価しなければならない。

7.21

文字組込み演算の評価

CHARACTER (LEN = 2) C1, C2, C3, CF

C1 = C2 // CF (C3)

この文で,

C1

C2

も長さ

2

であるから,

C1

の値を決定するには

C2

の値だけで十分なので,関数

CF

を評価する必要はない。

7.1.8.5

関係組込み演算の評価

7.2.3

で定める規則は,関係組込み演算の解釈を規定する。それらの規則に従って一度式の解釈が確立したら,処

理系は,式中の括弧の保存を犯さない限り,その式と関係として同値な別の式を評価してもよい。

7.22

I

及び

J

を整数型とするとき,処理系は,

I > J

J - I < 0

として評価してもよい。

二つの関係組込み演算は,その一次子がとりうるすべての値に対して論理値が等しいとき,関係として同値である

とする。

7.1.8.6

論理組込み演算の評価

7.2.4

で定める規則は,論理組込み演算の解釈を規定する。それらの規則に従って一度式の解釈が確立したら,処

理系は,式中の括弧の保存を犯さない限り,その式と論理的に同値な別の式を評価してもよい。

7.23

L1

L2

及び

L3

を論理変数とするとき,処理系は,

L1 .AND. L2 .AND. L3

L1 .AND. (L2

.AND. L3)

として評価してもよい。

二つの論理式は,その一次子がとりうるすべての値に対して論理値が等しいとき,論理的に同値であるとする。

7.1.8.7

利用者定義演算の評価

7.2

で定める規則は,利用者定義演算の解釈を規定する。それらの規則に従って一度式の解釈が確立したら,処理

系は,括弧の保存を犯さない限り,その式と同値な別の式を評価してもよい。

派生型の二つの式は,その一次子がとりうるすべての値に対して値が等しいとき,同値であるとする。

7.2

組込み演算の解釈

組込み演算は,

7.1.2

の演算とする。これらの演算は,数値,文字,関係 及び 論理に分ける。

7.2.1

7.2.4

で規

定する解釈は,スカラ 及び 配列の両者に適用する。配列の場合は,スカラについての解釈を要素ごとに適用する。

利用者定義演算の解釈は,演算を定義した関数によって提供される。組込み演算 又は 利用者定義演算からなる式

の型,型パラメタ 及び 解釈は,その式を含む文脈,大きい式の型 及び 型パラメタによらない。

7.24

X

を実数型,

J

を整数型の変数とし,

INT

を実数から整数への組込み型変換関数とするとき,式

INT(X+J)

は整数型であり,式

X+J

は実数型である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

112

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

演算子

<

<=

>

>=

==

及び

/=

は,それぞれ常に

.LT.

.LE.

.GT.

.GE.

.EQ.

及び

.NE.

と同じ解釈をもつ。

7.2.1

数値組込み演算

数値演算は,数値の計算をするのに用いる。数値演算を評価して数値を得る。数値組込み演算の演算対象として許

される型は,

7.1.2

で規定する。

数値組込み演算子 及び その解釈を,

7.2

に示す。ここで,

x

1

は演算子の左側の演算対象を表し,

x

2

は右側の

演算対象を表す。

7.2

数値組込み演算子の解釈

演算子

意味

演算子の使用法

解釈

**

べき乗

x

1

**

x

2

x

1

x

2

乗する

/

除算

x

1

/

x

2

x

1

x

2

で割る

*

乗算

x

1

*

x

2

x

1

x

2

を乗じる

-

減算

x

1

-

x

2

x

1

から

x

2

を引く

-

符号反転

-

x

2

x

2

の符号を反転する

+

加算

x

1

+

x

2

x

1

x

2

を足す

+

恒等

+

x

2

x

2

と同じ

除算の解釈は,演算対象の型による

(

7.2.1.1

)

x

1

及び

x

2

が整数型であり,かつ

x

2

が負の値であるとき,

x

1

**

x

2

は,

1/(

x

1

** ABS (

x

2

))

に整数型の除算

(

7.2.1.1

)

の規則を適用したものと解釈する。

7.25

2 ** (-3)

は,

1/(2 ** 3)

と同じであり,その値はゼロになる。

7.2.1.1

整数型の除算

整数型の演算対象を他の整数型の演算対象で割ることができる。二つの整数の数学的な商は,整数とは限らない。

しかし,

7.1

は,二つの整数型演算対象をもつ除算は,整数型の式として解釈することを規定する。割り切れない

ときの整数演算の結果は,ゼロからその商までの範囲にあるその商に最も近い整数とする。

7.26

(-8)/3

は,値

-2

をもつ。

7.2.1.2

複素数型のべき乗

複素数型を複素数型でべき乗する場合,式

x

1

**

x

2

の値は,

x

1

x

2

の主値とする。

7.2.2

文字組込み演算

文字組込み演算子

//

は,同じ種別型パラメタをもつ文字型の二つの演算対象を連結する。文字組込み演算の評

価によって文字型の演算結果を得る。

文字組込み演算子

//

の解釈を,

7.3

に示す。ここで,

x

1

は演算子の左側の演算対象を表し,

x

2

は右側の演

算対象を表す。

7.3

文字組込み演算子

//

の解釈

演算子

意味

演算子の使用法

解釈

//

連結

x

1

//

x

2

x

1

x

2

とを連結する

文字組込み演算

//

の結果は,

x

1

の値の右側に

x

2

の値を連結した文字列とし,その文字列の長さは,

x

1

及び

x

2

の長さの和とする。評価順序を指定するための括弧は,文字式の解釈に影響しない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

113

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.27

(’AB’ // ’CDE’) // ’F’

の値は,文字列

’ABCDEF’

となる。また,

’AB’ // (’CDE’ // ’F’)

の値も,文字列

’ABCDEF’

となる。

7.2.3

関係組込み演算

関係組込み演算は,関係組込み演算子

.LT.

.LE.

.GT.

.GE.

.EQ.

.NE.

<

<=

>

>=

==

及び

/=

を用

いて二つの演算対象の値を比較する。関係組込み演算子の演算対象として許される型は,

7.1.2

で規定する。

注記

7.28

7.1

に示したとおり,関係組込み演算子を用いて,数値型の式を文字型 又は 論理型の式と

比較してはならない。論理型の二つの演算対象を比較してはならない。複素数演算対象を含む比較は,

演算子が

.EQ.

.NE.

==

又は

/=

のときに限る。文字型の二つの演算対象は,それらが同じ種別型

パラメタをもつときに限り,比較できる。

関係組込み演算の評価によって基本論理型の結果を得る。

関係組込み演算子の解釈を

7.4

に示す。ここで,

x

1

は演算子の左側の演算対象を表し,

x

2

は右側の演算対象を

表す。

7.4

関係組込み演算子の解釈

演算子

意味

演算子の使用法

解釈

.LT.

より小さい

x

1

.LT.

x

2

x

1

は,

x

2

より小さい

<

より小さい

x

1

<

x

2

x

1

は,

x

2

より小さい

.LE.

以下

x

1

.LE.

x

2

x

1

は,

x

2

以下

<=

以下

x

1

<=

x

2

x

1

は,

x

2

以下

.GT.

より大きい

x

1

.GT.

x

2

x

1

は,

x

2

より大きい

>

より大きい

x

1

>

x

2

x

1

は,

x

2

より大きい

.GE.

以上

x

1

.GE.

x

2

x

1

は,

x

2

以上

>=

以上

x

1

>=

x

2

x

1

は,

x

2

以上

.EQ.

等しい

x

1

.EQ.

x

2

x

1

は,

x

2

と等しい

==

等しい

x

1

==

x

2

x

1

は,

x

2

と等しい

.NE.

等しくない

x

1

.NE.

x

2

x

1

は,

x

2

と等しくない

/=

等しくない

x

1

/=

x

2

x

1

は,

x

2

と等しくない

数値関係組込み演算は,演算対象の値が演算子の指定する関係を満足すれば,真の論理値をもつ。数値関係組込み

演算は,演算対象の値が演算子の指定する関係を満足しなければ,偽の論理値をもつ。

数値関係演算

x

1

関係演算子

x

2

において,

x

1

x

2

との型 又は 種別型パラメタが異なるときは,それらは,評価に先立って式

x

1

+

x

2

の型 及び 種

別型パラメタに変換する。

文字関係組込み演算は,演算対象の値が演算子の指定する関係を満足すれば,真の論理値をもつ。文字関係組込み

演算は,演算対象の値が演算子の指定する関係を満足しなければ,偽の論理値をもつ。

文字関係組込み演算において,演算対象は,それぞれの最初の文字から始めて,順番に文字ごとに比較する。演算

対象の長さが異なるときは,短いほうの演算対象は,長いほうの演算対象の長さまで空白を右側に補ったものとして

扱われる。

x

1

及び

x

2

の両者が長さゼロである場合,

x

1

は,

x

2

に等しいとする。

x

1

の各文字が

x

2

の対応する位置

の文字に等しい場合,

x

1

は,

x

2

に等しいとする。等しくない場合,文字が異なる最初の位置において,その位置の

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

114

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

x

1

の文字値が

x

2

の文字値よりも大小順序

(

4.4.4.3

)

で先行しているときは,文字演算対象

x

1

は,

x

2

より小さいと

する。その位置の

x

1

の文字値が

x

2

の文字値よりも大小順序で後続しているときは,文字演算対象

x

1

は,

x

2

より

大きいとする。

注記

7.29

文字の大小順序は,部分的に処理系に依存する。ただし,演算子

.EQ.

.NE.

==

及び

/=

使用した結果は,文字の大小順序に依存しない。基本文字型でない文字型に対して補う空白文字は,

処理系依存とする。

7.2.4

論理組込み演算

論理組込み演算は,論理値の計算をするのに用いる。論理演算の評価によって論理型の結果を得る。論理組込み演

算の演算対象として許される型は,

7.1.2

で規定する。

論理演算子 及び その解釈は,

7.5

に示す。ここで,

x

1

は演算子の左側の演算対象を表し,

x

2

は右側の演算対

象を表す。

7.5

論理組込み演算子の解釈

演算子

意味

演算子の使用法

解釈

.NOT.

論理否定

.NOT.

x

2

x

2

が偽ならば真

.AND.

論理積

x

1

.AND.

x

2

x

1

及び

x

2

が共に真ならば真

.OR.

論理和

x

1

.OR.

x

2

x

1

及び

/

又は

x

2

が真ならば真

.NEQV.

論理非等価

x

1

.NEQV.

x

2

x

1

又は

x

2

のいずれかが真で他方が偽ならば真

.EQV.

論理等価

x

1

.EQV.

x

2

x

1

及び

x

2

が共に真 又は 共に偽ならば真

論理組込み演算の値の関係は,

7.6

に示す。

7.6

論理組込み演算子を含む演算の値の関係

x

1

x

2

.NOT.

x

2

x

1

.AND.

x

2

x

1

.OR.

x

2

x

1

.EQV.

x

2

x

1

.NEQV.

x

2

7.3

演算子の優先順位

組込み演算 及び 拡張演算には,

7.1.1

における式の一般形から導かれる優先順位がある。優先順位は,括弧を用い

ない限り,演算対象が結合する順序を決定する。この優先順位を

7.7

に示す。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

115

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.7

演算の種類 及び その優先順位

演算の種類

演算子

優先順位

拡張

利用者定義単項演算子

最も高い

数値

**

.

数値

*

及び

/

.

数値

単項の

+

及び

-

.

数値

2

項の

+

及び

-

.

文字

//

.

関係

.LT.

.LE.

.GT.

.GE.

.EQ.

.NE.

.

<

<=

>

>=

==

及び

/=

.

論理

.NOT.

.

論理

.AND.

.

論理

.OR.

.

論理

.EQV.

及び

.NEQV.

.

拡張

利用者定義

2

項演算子

最も低い

利用者定義演算の優先順位は,その演算子による。

7.30

-A ** 2

において,べき乗演算子は,符号反転演算子よりも高い優先順位をもつ。したがって,

二つの演算対象が,べき乗演算子によって結び付いた式になり,次いでそれが符号反転演算子の演算

対象となる。この式の解釈は,

- (A ** 2)

と同じになる。

式の一般形

(

7.1.1

)

は,同種の演算子の間にも優先順位を定める。この優先順位は,括弧を用いない限り,式を解

釈するときに演算対象が結合する順序を定める。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

116

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.31

二つ以上の

+

又は

-

を含む数値段階式を解釈するとき,それぞれの演算対象(加減演算対

象)は,左から順に結合する。加減演算対象の中の乗除演算対象も左から順に結合し,他の段階式も

同様になる。ただし,乗除演算対象の式の中で,二つ以上のべき乗演算子

**

が単項段階式を結合

するときは,右から順に結合する。

2.1 + 3.4 + 4.9

2.1 * 3.4 * 4.9

2.1 / 3.4 / 4.9

2 ** 3 ** 4

’AB’ // ’CD’ // ’EF’

上の式は,それぞれ次の式と同じ解釈になる。

(2.1 + 3.4) + 4.9

(2.1 * 3.4) * 4.9

(2.1 / 3.4) / 4.9

2 ** (3 ** 4)

(’AB’ // ’CD’) // ’EF’

一般形

(

7.1.1

)

からの帰結として,数値段階式の最も左にある加減演算対象だけは,演算子

+

-

が先行してもよい。構文規則は,

A ** - B

及び

A + - B

のような二つの連続した数値演算

子を含む式を禁止している。しかし,

A ** (- B)

及び

A + (- B)

は,許される。次のような利用者

定義単項演算子の直前の

2

項演算子 又は 組込み単項演算子も,許される。

A * .INVERSE. B

- .INVERSE. (B)

一般形は,演算子

.AND.

が演算子

.OR.

よりも高い優先順位をもつことを暗黙的に意味している。

したがって,式

A .OR. B .AND. C

の解釈は,

A .OR. (B .AND. C)

と同じになる。

7.32

式は,

2

種類以上の段階の演算子を含んでもよい。

A

B

及び

C

を実数型とし,

L

を論理型とする

とき,数値演算子,関係演算子 及び 論理演算子を含んでいる論理式

L .OR. A + B >= C

の解釈は,

L .OR. ((A + B) >= C)

と同じになる。

7.33

L1

及び

L2

を論理型とし,

X

及び

Y

を実数型とする。この場合,

(1)

演算子

**

が,論理型に拡張されていて,

(2)

演算子

.STARSTAR.

が,実数型演算子

**

を複製して定義されていて,

(3)

演算子

.MINUS.

が,単項演算子

-

を複製して定義されている

とき,優先順位において,

L1 ** L2

X * Y

より高く,

X * Y

X .STARSTAR. Y

より高く,かつ

.MINUS. X

-X

より高い。

7.4

代入

代入文を実行すると,変数を確定 又は 再確定する。ポインタ代入を実行すると,ポインタを指示先と結合するか,

又は そのポインタ結合状態を空状態 若しくは 不定にする。

WHERE

文 又は

WHERE

構文を実行すると,論理型配

列式の値に従って,配列代入文における式の評価 及び 値の代入を選別する。

FORALL

文 又は

FORALL

構文を実

行すると,一組の指標変数 及び 選別式を用いて,配列要素への代入を制御する。

7.4.1

代入文

代入文の実行は,変数を確定 又は 再確定する。

7.4.1.1

一般形

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

117

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R734

代入文

is

変数

=

C715

(R734)

代入文の変数は,大きさ引継ぎの全体配列であってはならない。

7.34

代入文

A = 3.5 + X * Y

I = INT (A)

代入文は,利用者定義代入文 又は 組込み代入文のいずれかの要件を満たさなければならない。

7.4.1.2

組込み代入文

組込み代入文

(intrinsic assignment statement)

は,利用者定義代入文

(

7.4.1.4

)

ではない代入文とする。組込み代

入文では変数は多相的ではなく,次の条件を満たす。

(1)

式が配列のとき,変数もまた配列である。

(2)

変数は式と同じ次元数の割付け配列であるか,変数 及び 式の形状が適合している。

(3)

変数 及び 式の宣言時の型が,表

7.8

のとおりに適合している。

7.8

組込み代入文

変数

=

の型適合

変数の型

式の型

整数型

整数型,実数型,複素数型

実数型

整数型,実数型,複素数型

複素数型

整数型,実数型,複素数型

ISO 10646

文字型

, ASCII

文字型 又は 基本文字型

ISO 10646

文字型

, ASCII

文字型 又は 基本文字型

その他の文字型

変数と同じ種別型パラメタをもつ文字型

論理型

論理型

派生型

変数と同じ種別型パラメタの派生型。各長さ型パラメタの

値は,対応する型パラメタが無指定である割付け変数を

除き,同じとする。

数値組込み代入文

(numeric intrinsic assignment statement)

は,変数 及び 式が数値型である組込み代入文とする。

文字組込み代入文

(character intrinsic assignment statement)

は,変数 及び 式の型が文字型の組込み代入文とする。

論理組込み代入文

(logical intrinsic assignment statement)

は,変数 及び 式が論理型である組込み代入文とする。派

生型組込み代入文

(derived-type intrinsic assignment statement)

は,変数 及び 式が派生型の組込み代入文とする。

配列組込み代入文

(array intrinsic assignment statement)

は,変数が配列である組込み代入文とする。変数は,重

複部分配列

(

6.2.2.3.2

)

であってはならない。

変数がポインタのとき,指示先 及び 式の型,型パラメタ 及び 形状が適合する確定可能な指示先と結合されなけ

ればならない。

7.4.1.3

組込み代入文の解釈

組込み代入文の実行によって,右辺の式の評価,変数の中のすべての式

(

7.1.8

)

の評価,変数の型 及び 型パラメタ

への右辺の式の必要な変換(

7.9

),並びに 計算結果による変数の確定をする。代入文を実行するときは,右辺の

式 及び 変数の中のすべての式を評価してから変数の任意の部分が確定する。変数の中の式の評価は,右辺の式の評

価に影響を与えたり与えられたりしてはならない。変数が長さゼロの文字型 又は 大きさゼロの配列である場合,変

数へはどのような値も代入されない。

変数がポインタである場合,式の値は,変数の指示先に代入される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

118

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

変数が割り付けられた割付け変数の場合,式が異なる形状の配列であるか 又は 変数と式の対応する長さ型パラメ

タ値のいずれかが異なるとき,割り付けられた変数は解放される。変数が割り付けられていない割付け変数であるか

又は 割り付けられていない割付け変数になる場合,変数は式の対応する型パラメタと等しい各無指定の型パラメタ,

式の形状,及び

LBOUND(

)

の対応する要素と等しい各下限に割り付けられる。

7.35

次の宣言による代入文において,

NAME

が以前に割り付けられていない場合 又は 異なる長さで割

り付けられていた場合でも,長さは

LEN(FIRST NAME)+LEN(SURNAME)+5

となる。

CHARACTER(:),ALLOCATABLE :: NAME

NAME =

Dr.

//FIRST_NAME//

//SURNAME

しかし,次の代入文において,

NAME

は代入時に割付け済みでなければならない。代入される値は,以

前に割り付けられた

NAME

の長さによって,切り詰められるか 又は 空白が埋められる。

NAME(:) =

Dr.

//FIRST_NAME//

//SURNAME

変数 及び 式は,変数の一部を引用してもよい。

7.36

文字組込み代入文

STRING (2:5) = STRING (1:4)

において,

STRING

1

番目の文字の

2

番目の文字への代入は,

STRING(1:4)

の評価に影響しない。

もし代入前の

STRING

の値を

’ABCDEF’

とするならば,代入後の値は,

’AABCDF’

となる。

右辺の式がスカラであり,変数が配列である場合,式は,変数と同じ形状の配列で,その配列のすべての要素が式

のスカラ値と同じものとして扱われる。

変数が配列である場合,代入は,変数 及び 式の対応する配列要素について要素ごとに実行される。

7.37

A

及び

B

を同じ形状の配列とすると,配列組込み代入

A = B

は,

B

のそれぞれの要素を

A

の対応

する要素に代入する。すなわち,

B

の最初の要素を

A

の最初の要素に代入し,

B

2

番目の要素を

A

2

番目の要素に代入する。

C

1

次元の割付け配列のとき,

C = PACK(ARRAY,ARRAY>0)

は,配列要

素順序に従って

ARRAY

のすべての正の要素を

C

に詰め込む。もし,

C

が割り付けられていないか 又は

誤った大きさで割り付けられている場合,

PACK

の結果を保持できる正しい大きさで再割付けされる。

処理系は,要素ごとの代入を任意の順序で実行してよい。

7.38

次の組込み代入文の実行によって,配列

X

の要素は,逆順になる。

REAL X (10)

...

X (1:10) = X (10:1:-1)

数値組込み代入文では,変数 及び 式は,異なる数値型 又は 異なる種別型パラメタであってもよい。その場合,式

の値は,

7.9

の規則に従って,変数の型 及び 型パラメタに変換される。

7.9

数値変換 及び 代入文

変数

=

変数の型

代入される値

整数

INT (

, KIND = KIND (

変数

))

実数

REAL (

, KIND = KIND (

変数

))

複素数

CMPLX (

, KIND = KIND (

変数

))

注記

関数

INT

REAL

CMPLX

及び

KIND

は,

13.7

において規定する総称関数とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

119

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

論理組込み代入文において,変数 及び 式は,異なる種別型パラメタをもっていてもよい。その場合,式の値は,変

数の種別型パラメタに変換される。

文字組込み代入文において,変数 及び 式は,異なる文字長パラメタをもっていてもよい。その場合,変数の長さ

への式の変換は,次のいずれかによる。

(1)

変数の長さが式の長さよりも小さい場合,式の値は,変数と同じ長さになるように右側を切り詰める。

(2)

変数の長さが式の長さよりも大きい場合,式の値は,変数と同じ長さになるように右側に空白を補い拡張する。

変数と式が異なる種別型パラメタをもつとき,式中の各文字

c

ACHAR(IACHAR(c),KIND(

変数

))

によって変数の

種別型パラメタに変換される。

注記

7.39

基本文字型でない文字型に対して補う空白文字は,処理系依存とする。文字式を種別の異なる変

数に代入するとき,変数の種別で表現不可能な式中の各文字は,処理系依存の文字に置き換えられる。

派生型組込み代入では,ポインタ成分についてはポインタ代入

(

7.4.2

)

を用い,成分に一致する型束縛の利用者定

義代入をもつ型のポインタでも割付け成分でもない成分については利用者定義代入を用い,他のポインタでも割付け

成分でもない成分については組込み代入を用いて,右辺の式の各成分を変数の対応する成分に代入する。割付け成分

については,次の操作を順に適用する。

(1)

変数の成分が割り付けられているならば,解放される。

(2)

式の値の成分が割り付けられているならば,変数の対応する成分は式の値の成分と同じ実行時の型 及び 型パラ

メタが割り付けられる。成分が配列ならば,同じ上下限で割り付けられる。式の値の成分の値の,変数の対応す

る成分への代入は,成分の宣言時の型が変数の成分に一致する型束縛の利用者定義代入をもつときは利用者定義

代入を用いて,それ以外のときは成分の実行時の型によって組込み代入を用いる。

処理系は,この成分ごとの代入を任意の順序 又は 同じ効果をもつ任意の方法で実行してよい。

7.40

C

及び

D

を,ポインタ成分

P

,並びに それぞれ整数型,論理型,文字型 及び その他の派生型の

ポインタでない成分

S

T

U

及び

V

をもつ同じ派生型とするとき,組込み代入

C = D

は,

D % P

C % P

にポインタ代入し,

D % S

C % S

に,

D % T

C % T

に,

D % U

C % U

に組込み代入

を用いて代入する。その型の実体が型束縛の利用者定義代入と適合性があるときは,

D % V

C % V

に利用者定義代入を用いて代入し,それ以外のときは組込み代入を用いて代入する。

注記

7.41

式の割付け成分が割り付けられていないとき,変数の対応する成分の割付け状態は,代入文の

実行後に未割付けになる。

変数が部分実体であるとき,代入は,実体の他の部分の定義状態 及び 値に影響しない。例えば,変数が部分配列で

あるとき,代入は,その部分配列で指定されていない配列の中の要素の定義状態 及び 値に影響しない。

7.4.1.4

利用者定義代入文

利用者定義代入文

(defined assignment statement)

は,代入文とし,サブルーチン副プログラム 及び

ASSIGNMENT(=)

の指定を伴う総称引用仕様

(

4.5.1

12.3.2.1.2

)

によって定義する。利用者定義要素別処理代入文

(defined elemental

assignment statement)

は,サブルーチン副プログラムが要素別処理サブルーチン

(

12.7

)

である利用者定義代入文と

する。

利用者定義代入

x

1

=

x

2

を定義するサブルーチンは,次の条件をすべて満たさなければならない。

(1)

そのサブルーチンを定義するのに用いる

SUBROUTINE

(

12.5.2.2

)

又は

ENTRY

(

12.5.2.4

)

が,二つの

仮引数

d

1

及び

d

2

を指定する。

(2)

次のいずれかを満たす。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

120

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(a)

総称引用仕様

(

12.3.2.1

)

が,

ASSIGNMENT(=)

という総称指定をもつサブルーチンを指定する。

(b)

ASSIGNMENT(=)

の総称指定によって

x

1

及び

x

2

の宣言時の型による総称束縛

(

4.5.4

)

があり,かつ

x

1

x

2

それぞれの実行時の型に対応するサブルーチンへの束縛がある。

(3)

d

1

及び

d

2

の型が

,

それぞれ

x

1

及び

x

2

の実行時の型と適合する。

(4)

d

1

及び

d

2

に型パラメタがあるとき,それらはそれぞれ対応する

x

1

及び

x

2

の型パラメタと一致する。

(5)

次のいずれかを満たす。

(a)

x

1

及び

x

2

の次元数は,それぞれ

d

1

及び

d

2

の次元数と一致する。

(b)

そのサブルーチンが要素別処理サブルーチンであって,

x

1

x

2

が形状適合であり,代入を定義するサブ

ルーチンが他にない。

d

1

又は

d

2

が配列のとき,

x

1

及び

x

2

の形状はそれぞれ

d

1

及び

d

2

の形状と一致しなければならない。

7.4.1.5

利用者定義代入文の解釈

利用者定義代入の解釈は,それを定義するサブルーチンによって与える。

利用者定義代入が要素別処理代入であって,その代入で用いる変数が配列である場合,利用者定義代入は,対応す

る変数 及び 式の要素に対して,任意の順序で要素ごとに実行される。その式がスカラであるとき,式は,変数と同

じ形状をもつ配列であって,その配列のすべての要素が式のスカラ値と同じものとして扱われる。

注記

7.42

利用者定義代入の規則

(

12.3.2.1.2

)

,手続引用の規則

(

12.4

)

,サブルーチン引用の規則

(

12.4.3

)

及び 要素別処理サブルーチンの引数の規則

(

12.7.3

)

によって,利用者定義代入は,

x

1

及び

x

2

のすべ

ての演算を評価し終えるまで

x

1

のどの部分も確定されないのと,同じ効果をもつことが保証される。

7.4.2

ポインタ代入文

ポインタ代入によって,ポインタは,指示先に結合されるか,又は 空状態 若しくは 不定結合状態になる。ポイン

タと指示先との間の以前のどんな結合も解放される。

構造体のポインタ成分に対するポインタ代入は,派生型組込み代入文

(

7.4.1.3

)

の実行によっても発生することが

ある。

ポインタは,ポインタの割付けによって指示先と結合されることもある。

R735

ポインタ代入文

is

データポインタ実体

[

(

上下限指定並び

)

]

=>

データ指示先指定

or

データポインタ実体

[

(

上下限再配置並び

)

]

=>

データ指示先指定

or

手続ポインタ実体

=>

手続指示先

R736

データポインタ実体

is

変数名

or

スカラ変数

%

データポインタ成分名

C716

(R735)

データ指示先が無制限多相的ではないとき,データポインタ実体は,データ指示先と型が適合

(

5.1.1.2

)

していなければならず,かつ 対応する種別型パラメタは等しくなければならない。

C717

(R735)

データ指示先が無制限多相的であるとき,データポインタ実体は,無制限多相的であるか,連続

派生型であるか 又は

BIND

属性をもつ型でなければならない。

C718

(R735)

上下限指定並びが宣言されているとき,上下限指定の個数は,データポインタ実体の次元数と一

致しなければならない。

C719

(R735)

上下限再配置並びが宣言されているとき,その個数はデータポインタ実体の次元数と一致しなけ

ればならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

121

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C720

(R735)

上下限再配置並びが宣言されているとき,データ指示先の次元数は

1

でなければならない。宣言

されていなければ,データポインタ実体とデータ指示先の次元数は同じでなければならない。

C721

(R736)

変数名は,

POINTER

属性をもたなければならない。

C722

(R736)

データポインタ成分名は,データポインタであるスカラ変数の成分の名前でなければならない。

R737

上下限指定

is

下限式

:

R738

上下限再配置

is

下限式

:

上限式

R739

データ指示先

is

変数

or

C723

(R739)

変数は

TARGET

属性 又は

POINTER

属性をもたなければならず,ベクトル添字をもつ部分配

列であってはならない。

C724

(R739)

式は,結果がデータポインタである関数の引用でなければならない。

R740

手続ポインタ実体

is

手続ポインタ名

or

手続成分参照

R741

手続成分参照

is

スカラ変数

%

手続成分名

C725

(R741)

手続成分名は,スカラ変数が宣言時の型の手続ポインタ成分の名前でなければならない。

R742

手続指示先

is

or

手続名

or

手続成分参照

C726

(R742)

式は,結果が手続ポインタである関数の引用でなければならない。

C727

(R742)

手続名は,外部手続名,モジュール手続名,仮手続名,

13.6

において

印の付いていない個別

組込み関数名 又は 手続ポインタ名でなければならない。

C728

(R742)

手続指示先は,組込みでない要素別処理手続であってはならない。

7.4.2.1

データポインタ代入

データポインタ実体が多相的でなく,データ指示先は多相的で実行時の型をもち,その宣言時の型と異なる場合,

代入指示先はデータポインタ実体の型をもつデータ指示先の祖先の成分になる。それ以外の場合,代入指示先はデー

タ指示先になる。

データ指示先がポインタでない場合,データポインタ実体は,代入指示先に結合されたポインタになる。ポインタ

の場合,データポインタ実体のポインタ結合状態はデータ指示先のものになり,データ指示先が実体と結合されると

き,データポインタ実体は代入指示先に結合されたものになる。データ指示先が割付け実体ならば,割付け済みでな

ければならない。

データポインタ実体が多相的

(

5.1.1.2

)

である場合,データ指示先の実行時の型を仮定する。データポインタ実体

が連続派生型 又は

BIND

属性をもつ型であるとき,データ指示先の実行時の型はその派生型でなければならない。

データ指示先が空状態のポインタである場合,データ指示先の無指定型パラメタでない型パラメタに対応するデー

タポインタ実体の宣言時の型の無指定型パラメタでないすべての型パラメタは,対応するデータ指示先の対応する型

パラメタとして同じ値をもたなければならない。そうでない場合,データポインタ実体の宣言時の型の無指定型パラ

メタでないすべての型パラメタは,データ指示先の対応する型パラメタとして同じ値をもたなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

122

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

データポインタ実体がデータ指示先の無指定型パラメタに対応する無指定型パラメタでない型パラメタをもつ場合,

データ指示先は結合状態が不定のポインタであってはならない。

上下限再配置並びを指定する場合,データ指示先は空状態 又は 不定ポインタであってはならず,データ指示先の

大きさはデータポインタ実体の大きさより小さくてはならない。データポインタ実体の指示先の要素は,配列要素順

(

6.2.2.2

)

で,データ指示先の最初の

SIZE(

データポインタ実体

)

個の要素になる。

上下限再配置並びを指定しない場合,データポインタ実体の次元の寸法はデータ指示先の対応する次元の寸法にな

る。上下限指定並びがあるとき,下限を指定する。そうでないとき,各次元の下限は,組込み関数

LBOUND (

13.7.60

)

の対応するデータ指示先の次元に対する結果である。各次元の上限は,下限と寸法の和より

1

だけ少なくなる。

7.4.2.2

手続ポインタ代入

手続指示先がポインタでない場合,手続ポインタ実体は,手続指示先を指示する指示状態になる。ポインタである

場合,手続ポインタ実体のポインタ結合状態は手続指示先のものになり,手続指示先が手続に結合しているとき,手

続ポインタ実体は同じ手続と結合する。

手続ポインタ実体が明示的引用仕様をもつ場合,その特性は手続指示先と同じでなければならない。ただし,手続

ポインタ実体が純粋でなくても手続指示先が純粋であるか 又は 手続ポインタ実体が要素別処理でなくても手続指示

先が要素別処理組込み手続であるときは,同じでなくてもよい。

手続ポインタ実体 又は 手続指示先の特性が明示的引用仕様を必要とする場合,手続ポインタ実体と手続指示先の

両方は明示的引用仕様をもたなければならない。

手続ポインタ実体が暗黙的引用仕様をもち,明示型 又は 関数として引用される場合,手続指示先は関数でなければ

ならない。手続ポインタ実体が暗黙的引用仕様をもち,サブルーチンとして引用されるとき,手続指示先はサブルー

チンでなければならない。

手続指示先 及び 手続ポインタ実体が関数の場合,それらは同じ型でなければならず,対応する型パラメタは共に

無指定であるか 又は 同じ値をもたなければならない。

手続名が個別手続名であって,総称名であるとき,ポインタ実体と結合されるのは個別手続だけとする。

7.4.2.3

7.43

ポインタ代入文の例を,次に示す。(

P

BESSEL

の宣言は,

12.14

による。)

NEW_NODE % LEFT => CURRENT_NODE

SIMPLE_NAME => STRUCTURE % SUBSTRUCT % COMPONENT

PTR => NULL ( )

ROW => MAT2D (N, :)

WINDOW => MAT2D (I-1:I+1, J-1:J+1)

POINTER_OBJECT => POINTER_FUNCTION (ARG_1, ARG_2)

EVERY_OTHER => VECTOR (1:N:2)

WINDOW2 (0:, 0:) => MAT2D (ML:MU, NL:NU)

! P

は ポインタ手続,

BESSEL

は引用仕様が一致する手続。

P => BESSEL

!

構造体成分でも同様。

STRUCT % COMPONENT => BESSEL

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

123

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

7.44

ポインタ代入文中で上限を明示することによって

1

次元の実体の一部を高次元のビューで見る

ことができる。次の例では,行列を考える。行列は

MYDATA

中に

1

次元の実体として格納されている。

その対角線が何らかの理由で必要となるからである。この対角線は

2

次元の表現からは単一の実体と

しては得ることができない。この行列は

MYDATA

2

次元のビューとなる。

real, target :: MYDATA ( NR*NC ) !

自動割付け配列

real, pointer :: MATRIX ( :, : ) ! MYDATA

2

次元でのビュー

real, pointer :: VIEW_DIAG ( : )

MATRIX( 1:NR, 1:NC ) => MYDATA

!

データの

MATRIX

によるビュー

VIEW_DIAG => MYDATA( 1::NR+1 )

! MATRIX

の対角

行列の行,列 又は ブロックは,

MATRIX

の部分配列として参照できる。

7.4.3

配列選別代入

(WHERE)

配列選別代入は,論理配列式の値に従って,配列代入文における式の評価 及び 値の代入を選別する。

7.4.3.1

配列選別代入の一般形

配列選別代入

(masked array assignment)

は,単純

WHERE

文 又は

WHERE

構文のいずれかとする。

R743

単純

WHERE

is

WHERE (

選別式

)

WHERE

代入文

R744

WHERE

構文

is

構造

WHERE

[ WHERE

本体構文

] ...

[

選別

ELSEWHERE

[ WHERE

本体構文

] ... ] ...

[ ELSEWHERE

[ WHERE

本体構文

] ... ]

END WHERE

R745

構造

WHERE

is

[ WHERE

構文名

:

]

WHERE (

選別式

)

R746

WHERE

本体構文

is

WHERE

代入文

or

単純

WHERE

or

WHERE

構文

R747

WHERE

代入文

is

代入文

R748

選別式

is

論理式

R749

選別

ELSEWHERE

is

ELSEWHERE (

選別式

)

[ WHERE

構文名

]

R750

ELSEWHERE

is

ELSEWHERE

[ WHERE

構文名

]

R751

END WHERE

is

END WHERE

[ WHERE

構文名

]

C729

(R747) WHERE

代入文が利用者定義代入文であるとき,その代入文は要素別処理でなければならない。

C730

(R744)

構造

WHERE

文に

WHERE

構文名を指定する場合は,対応する

END WHERE

文にも同じ

WHERE

構文名を指定しなければならない。構造

WHERE

文に

WHERE

構文名を指定しない場合は,対

応する

END WHERE

文に

WHERE

構文名を指定してはならない。

ELSEWHERE

文 又は 選別

ELSE-

WHERE

文に

WHERE

構文名を指定する場合は,対応する構造

WHERE

文にも同じ

WHERE

構文名を

指定しなければならない。

C731

(R746) WHERE

本体構文の一部である文は,飛び先文であってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

124

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

WHERE

構文が単純

WHERE

文,選別

ELSEWHERE

文 又は 別の

WHERE

構文を含む場合,

WHERE

構文に

含まれる選別式は,すべて同じ形状をもたなければならない。選別式と

WHERE

代入文で確定する変数とは,同じ

形状の配列でなければならない。

7.45

配列選別代入の例を,次に示す。

WHERE (TEMP > 100.0) TEMP = TEMP - REDUCE_TEMP

WHERE (PRESSURE <= 1.0)

PRESSURE = PRESSURE + INC_PRESSURE

TEMP = TEMP - 5.0

ELSEWHERE

RAINING = .TRUE.

END WHERE

7.4.3.2

配列選別代入文の解釈

単純

WHERE

文 又は 構造

WHERE

文を実行すると, 制御配列

(control mask)

が定まる。更に,構造

WHERE

文では, 否定制御配列

(pending control mask)

も定まる。その構造

WHERE

文が

WHERE

本体構文に含まれていな

い場合,その文の選別式が評価され,制御配列が選別式の値になる。否定制御配列は,

WHERE

本体構文に含まれな

い構造

WHERE

文の実行によって,値

.NOT.

選別式

になる。選別式は,

1

回だけ評価される。

WHERE

構文中の文は,一つ一つ順番に実行される。

選別

ELSEWHERE

文を実行すると,次に示す動作が順番に行われる。

(1)

制御配列

m

c

が,否定制御配列の値になる。

(2)

否定制御配列が,値

m

c

.AND. (.NOT.

選別式

)

になる。

(3)

制御配列

m

c

が,値

m

c

.AND.

選別式

になる。

選別式は,高々

1

回評価される。

ELSEWHERE

文を実行すると,制御配列が否定制御配列の値になる。新しい否定制御配列の値は変わらない。

END WHERE

文を実行すると,制御配列 及び 否定制御配列は,対応する構造

WHERE

文の実行に先立って定

まっていた値になる。

WHERE

本体構文として書いた単純

WHERE

文の実行後,制御配列は,単純

WHERE

文の実

行に先立って定まっていた値になる。

7.46

制御配列 及び 否定制御配列の決定の例を,次に示す。

WHERE(cond1)

!

1

...

ELSEWHERE(cond2)

!

2

...

ELSEWHERE

!

3

...

ENDWHERE

1

を実行すると,制御配列は値

cond1

になり,否定制御配列は値

.NOT.cond1

になる。

次に文

2

を実行すると,制御配列は値

(.NOT.cond1).AND.cond2

になり,否定制御配列は値

(.NOT.cond1).AND.(.NOT.cond2)

になる。更に文

3

を実行すると,制御配列は値

(.NOT.cond1)

.AND.(.NOT.cond2)

になる。すなわち,選別

ELSEWHERE

文の実行を通して条件値の否定が伝え

られる。

WHERE

本体構文の一部である構造

WHERE

文を実行すると,否定制御配列は値

m

c

.AND. (.NOT.

選別式

)

になり,制御配列は値

m

c

.AND.

選別式

になる。選別式は,高々

1

回評価される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

125

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

WHERE

本体構文の一部である単純

WHERE

文を実行すると,制御配列は値

m

c

.AND.

選別式

になる。否定

制御配列は,変更されない。

WHERE

代入文の右辺の式 又は 左辺の変数 若しくは 選別式の中に要素別処理関数でない関数の引用があったと

きは,その関数は,選別式による選別制御なしに評価される。すなわち,すべての引数式は,完全に評価され,かつ

関数も完全に評価される。その関数評価の結果が配列であり,かつ その結果が他の要素別処理関数でない関数引用の

引数並びの中で引用されていないとき,制御配列の真である要素に対応する要素が選別され,右辺の式,左辺の変数

又は 選別式の評価に用いられる。

WHERE

代入文の右辺の式 又は 左辺の変数 若しくは 選別式の中に要素別処理組込み演算 又は 要素別処理関数

の引用があり,かつ それが他の要素別処理関数でない関数引用の引数並びの中に含まれていないとき,制御配列の真

である要素に対応する要素についてだけ,演算を実行し 又は 関数を評価する。

WHERE

代入文 又は 選別式に配列構成子があるとき,その配列構成子は,どんな選別制御もなしに評価され,

WHERE

代入文が実行されるか,又は 選別式が評価される。

WHERE

代入文が実行されるとき,制御配列の真の値に対応する右辺の式の値は,左辺の変数の対応する要素に代

入される。

制御配列は,単純

WHERE

文,構造

WHERE

文,

ELSEWHERE

文,選別

ELSEWHERE

文 又は

END WHERE

文の実行によって値が定まる。選別式の中のデータ要素をその後変更しても,制御配列に影響はしない。単純

WHERE

文の選別式中の関数引用の実行は,代入文中のデータ要素に影響してもよい。

7.47

配列選別代入の中の関数引用の例を,次に示す。

WHERE (D > 0.0)

X = -B + SQRT (D)

!

SQRT

は,正の要素についてだけ実行される。

R = D / SUM (SQRT (ABS (D)))

!

SUM

が変形関数であるため,

ABS

SQRT

!

すべての要素について実行される。

END WHERE

7.4.4 FORALL

FORALL

構文 及び 単純

FORALL

文は,指標値の集合 及び 省略可能な選別式によって選別を行い,代入文 及び

ポインタ代入文の実行を制御する。

7.4.4.1 FORALL

構文

FORALL

構文は,単一の

FORALL

三つ組指定並びとスカラ選別式によって,複数の代入,配列選別代入

(WHERE)

及び 入れ子になった

FORALL

構文 又は 単純

FORALL

文を制御する。

R752

FORALL

構文

is

構造

FORALL

[ FORALL

本体構文

] ...

END FORALL

R753

構造

FORALL

is

[ FORALL

構文名

:

]

FORALL

FORALL

制御

R754

FORALL

制御

is

(

FORALL

三つ組指定並び

[,

スカラ選別式

] )

R755

FORALL

三つ組指定

is

指標変数名

=

添字

:

添字

[ :

刻み幅

]

R618

添字

is

スカラ整数式

R621

刻み幅

is

スカラ整数式

R756

FORALL

本体構文

is

FORALL

代入文

or

単純

WHERE

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

126

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

WHERE

構文

or

FORALL

構文

or

単純

FORALL

R757

FORALL

代入文

is

代入文

or

ポインタ代入文

R758

END FORALL

is

END FORALL

[ FORALL

構文名

]

C732

(R758)

構造

FORALL

文に

FORALL

構文名を指定する場合は,対応する

END FORALL

文にも,同じ

FORALL

構文名を指定しなければならない。構造

FORALL

文に

FORALL

構文名を指定しない場合は,

対応する

END FORALL

文に

FORALL

構文名を指定してはならない。

C733

(R754)

スカラ選別式は,論理型のスカラでなければならない。

C734

(R754)

スカラ選別式の中で引用する手続(利用者定義演算によって引用する手続を含む。)は,純粋手

続(

12.6

)でなければならない。

C735

(R755)

指標変数名は,整数型の名前付きスカラ変数でなければならない。

C736

(R755) FORALL

三つ組指定中の添字 及び 刻み幅は,それが現れる

FORALL

三つ組指定並び中のどの

指標変数名も引用してはならない。

C737

(R756) FORALL

本体構文中の文は,

FORALL

構文の指標変数名を確定してはならない。

C738

(R756) FORALL

本体構文中で引用する手続(利用者定義演算,代入 又は 後始末によって引用する手

続を含む。)は,純粋手続でなければならない。

C739

(R756) FORALL

本体構文への飛越しは,禁止する。

7.48

FORALL

構文の例を,次に示す。

REAL :: A(10, 10), B(10, 10) = 1.0

. . .

FORALL (I = 1:10, J = 1:10, B(I, J) /= 0.0)

A(I, J) = REAL (I + J - 2)

B(I, J) = A(I, J) + B(I, J) * REAL (I * J)

END FORALL

7.49

FORALL

本体構文である代入文は,スカラ代入文,配列代入文 又は 利用者定義代入文であって

よい。確定される変数では,通常,

FORALL

三つ組指定並び中のすべての指標変数名を使用する。

FORALL (I = 1:N, J = 1:N)

A(:, I, :, J) = 1.0 / REAL(I + J - 1)

END FORALL

A

2

次元の部分配列に対して,スカラ値を代入する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

127

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.50

ポインタ代入文を含む

FORALL

構文の例を,次に示す。

TYPE ELEMENT

REAL ELEMENT_WT

CHARACTER (32), POINTER :: NAME

END TYPE ELEMENT

TYPE(ELEMENT) CHART(200)

REAL WEIGHTS (1000)

CHARACTER (32), TARGET :: NAMES (1000)

. . .

FORALL (I = 1:200, WEIGHTS (I + N - 1) > .5)

CHART(I) % ELEMENT_WT = WEIGHTS (I + N - 1)

CHART(I) % NAME => NAMES (I + N - 1)

END FORALL

WHERE

構文ではポインタ代入文を利用できないので,この

FORALL

構文の結果は,

WHERE

文では得ることができない。

FORALL

構文中の指標変数名は,その構文を有効範囲

(

16.3

)

としてもつ。その指標変数はスカラ変数であり,そ

のスカラ変数は,

FORALL

構文を含む有効域内にその名前の変数が存在すれば,その型 及び 型パラメタをもち,他

の属性をもたない。この型は,整数型でなければならない。

7.51

FORALL

構文中の指標変数の使用が,同じ名前の変数に影響しない例を,次に示す。

INTEGER :: X = -1

REAL A(5, 4)

J = 100

. . .

FORALL (X = 1:5, J = 1:4)

A (X, J) = J

END FORALL

FORALL

構文の実行後,変数

X

及び

J

は,それぞれ値

1

及び

100

をもち,

A

は次の値をもつ。


1

2

3

4

1

2

3

4

1

2

3

4

1

2

3

4

1

2

3

4


7.4.4.2 FORALL

構文の実行

FORALL

構文は,次の三つの段階で実行される。

(1)

指標変数に対する値の決定

(2)

スカラ選別式の評価

(3)

FORALL

本体構文の実行

7.4.4.2.1

指標変数名に対する値の決定

FORALL

三つ組指定並び中の添字 及び 刻み幅の式が,評価される。これらの式は,任意の順序で評価される。一

つの指標変数がとる値の集合は,次のとおりに決定される。

(1)

下限

m

1

,上限

m

2

及び 刻み幅

m

3

は,指標変数名と同じ種別型パラメタをもつ整数型となる。これらの値は,

それぞれ最初の添字の式,

2

番目の添字の式 及び 刻み幅の式を評価して定められる。このとき,必要ならば数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

128

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

値変換の規則(

7.9

)に従って指標変数名の種別型パラメタに従う値に変換される。刻み幅を書かないと,

m

3

の値は

1

となる。

m

3

の値は,

0

であってはならない。

(2)

max

を整数式

(

m

2

m

1

+

m

3

)

/m

3

の値とする。いずれかの指標変数名に対して

max

0

であるときその構文

の実行は終了し,それ以外のとき指標変数名がとる値の集合は次の式で定められる。

m

1

+ (

k

1)

×

m

3

   ここで,

k

= 1, 2, ...,

max

とする。

指標値の組合せの集合は,それぞれの三つ組指定によって定まる集合の直積(デカルト積)とする。指標変数名は,

この集合が評価されるときに確定になる。

注記

7.52

刻み幅は,正であっても負であってもよい。

FORALL

本体構文は,

max >

0

でさえあれば実

行される。次に示す

FORALL

三つ組指定の場合,

max

の値は

10

となる。

I = 10:1:-1

7.4.4.2.2

選別式

スカラ選別式があるとき,その式は指標値のそれぞれの組合せに対して評価される。スカラ選別式がないとき,真

の値をもつ式があるものとして評価される。指標変数名は,スカラ選別式中の一次子であってよい。

指標値の有効な組合せ

(active combination of index-name value)

は,すべての可能な組合せ

(

7.4.4.2.1

)

のうち,

選別式の値が真である部分集合とする。

7.53

指標変数は,選別式中に現れてもよい。

FORALL (I=1:10, J=1:10, A(I) > 0.0 .AND. B(J) < 1.0)

...

7.4.4.2.3 FORALL

本体構文の実行

FORALL

本体構文は,出現順に実行される。それぞれの構文は,指標値の有効な組合せのすべてに対して次に示

す解釈で実行される。

代入文である

FORALL

代入文を実行すると,指標値の有効な組合せごとに,右辺の式 及び 左辺の変数中のすべ

ての式が評価される。評価は,任意の順序で行われる。これらすべての評価が終わった後,右辺のそれぞれの式の値

が,対応する左辺の変数に代入される。代入は,任意の順序で行われる。

ポインタ代入文である

FORALL

代入文を実行すると,指標値の有効な組合せごとに,データ指示先 及び データ

ポインタ実体中 又は 手続指示先 及び 手続ポインタ実体中のすべての式が評価され,データポインタ実体中 又は 手

続ポインタ実体中のポインタ 及び 指示先が決定される。評価は,任意の順序で行われる。これらすべての評価が終

わった後,それぞれのデータポインタ実体 又は 手続ポインタ実体は,対応する指示先に結合される。結合は,任意

の順序で行われる。

FORALL

代入文において,利用者定義代入サブルーチンは,その文によって確定される変数を引用してはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

129

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

7.54

二つの代入文を含む

FORALL

構文の例を次に示す。配列

B

への代入には,

FORALL

構文の実行

前の配列

A

の値ではなく,直前の文で計算された配列

A

の値が使用される。

FORALL (I = 2:N-1, J = 2:N-1 )

A (I, J) = A(I,J-1) + A(I,J+1) + A(I-1,J) + A(I+1,J)

B (I, J) = 1.0 / A(I, J)

END FORALL

適切なスカラ選別式を用いて指標値の有効な組合せを制限することによって,誤り条件を発生させ

る計算を,避けることができる。

FORALL (I = 1:N, Y(I) /= 0.0)

X(I) = 1.0 / Y(I)

END FORALL

FORALL

構文中にある

WHERE

構文

(

7.4.3

)

中の文は,一つ一つ順番に実行される。単純

WHERE

文,構造

WHERE

文 又は 選別

ELSEWHERE

文が実行されるとき,それらの文の選別式は,外側の

FORALL

構文によって

決められる指標値の有効な組合せごとに評価され,外側の

WHERE

構文に対応する制御配列によって選別される。

WHERE

代入文は,指標値の有効な組合せごとに実行され,

WHERE

代入文に対する制御配列によって選別される。

7.55

単純

WHERE

文 及び 代入文を含む

FORALL

構文の例を次に示す。

INTEGER A(5,4), B(5,4)

FORALL ( I = 1:5 )

WHERE ( A(I,:) == 0 ) A(I,:) = I

B (I,:) = I / A(I,:)

END FORALL

次に示す配列を入力として実行する。

A =


0

0

0

0

1

1

1

0

2

2

0

2

1

0

2

3

0

0

0

0


結果は,次のとおりとなる。

A =


1

1

1

1

1

1

1

2

2

2

3

2

1

4

2

3

5

5

5

5


B =


1

1

1

1

2

2

2

1

1

1

1

1

4

1

2

1

1

1

1

1


ELSEWHERE

文をもつ

WHERE

構文を含む

FORALL

構文の例は,

C.4.5

で示す。

FORALL

構文中にある単純

FORALL

文 又は

FORALL

構文を実行すると,外側の

FORALL

構文の指標値の有

効な組合せごとに,

FORALL

三つ組指定並び中の添字 及び 刻み幅の式が評価される。内側の

FORALL

に対する指

標値の可能な組合せの集合は,外側の指標値の有効な組合せごとにこれらの上下限 及び 刻み幅によって定まる組合

せ(外側の指標値を含む。)の集合の和集合とする。次に,内側の

FORALL

の指標値のすべての組合せに対してスカ

ラ選別式が評価され,内側の

FORALL

の有効な組合せの集合が得られる。スカラ選別式がないとき,真の値をもつ

式があるものとして評価される。その次に,内側の

FORALL

中のそれぞれの文が,指標値の有効な組合せのすべて

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

130

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

に対して実行される。

7.56

入れ子になった

FORALL

構文を含む

FORALL

構文の例を次に示す。この例は,配列

A

の下三

角部(主対角線より下の部分)の値を配列

A

の上三角部へ代入する。

INTEGER A (3, 3)

FORALL (I = 1:N-1 )

FORALL ( J=I+1:N )

A(I,J) = A(J,I)

END FORALL

END FORALL

N = 3

とし,配列

A

を次の値として実行する。

A =


0

3

6

1

4

7

2

5

8


結果は,次のとおりとなる。

A =


0

1

2

1

4

5

2

5

8


7.4.4.3

単純

FORALL

単純

FORALL

文は,指標値の集合 及び 省略可能な選別式によって,単一の代入文 又は 単一のポインタ代入文を

制御する。

R759

単純

FORALL

is

FORALL

FORALL

制御

FORALL

代入文

単純

FORALL

文は,

FORALL

本体構文として単一の

FORALL

代入文だけを含む

FORALL

構文と等価とする。

単純

FORALL

文中の指標変数名の有効範囲は,その文自身とする

(

16.3

)

7.57

単純

FORALL

文の例を次に示す。

FORALL (I=1:N) A(I,I) = X(I)

この文では,ベクトル

X

の要素を,行列

A

の主対角線上の要素に代入する。

FORALL (I = 1:N, J = 1:N)

X(I,J) = 1.0 / REAL (I+J-1)

I

及び

J

1

から

N

までの値をとり,配列要素

X(I,J)

に値

1.0 / REAL(I+J-1)

が代入される。

FORALL (I=1:N, J=1:N, Y(I,J) /= 0 .AND. I /= J)

X(I,J) = 1.0 / Y(I,J)

この文は,配列

Y(1:N,1:N)

0

でない対角線をはずれた要素それぞれの逆数を求める。そして,

配列

X

の対応する要素にその値を代入する。

0

又は 対角線上の

Y

の要素は,関係しないし

X

の対応

する要素に代入されることもない。

7.56

中の実行結果は,次に示す単一の単純

FORALL

文でも得ることができる。

FORALL ( I = 1:N-1, J=1:N, J > I )

A(I,J) = A(J,I)

単純

FORALL

文のその他の例は,

C.4.6

で示す。

7.4.4.4 FORALL

構文 及び 単純

FORALL

文に関する制限

重複代入

(many-to-one assignment)

とは,同じ実体への二つ以上の代入,又は 同じポインタへの二つ以上の指示

先の結合とする。ここで,その指示先実体が直接に引用されるかポインタを通して間接に引用されるかは問わない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

131

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

FORALL

構文 又は 単純

FORALL

文において,単一の文中で,重複代入をしてはならない。一つの

FORALL

構文

中の異なる代入文で,同じ実体に対して代入 又は ポインタ代入するのはかまわない。

7.58

代入文の左辺に現れるそれぞれの指標変数名は,重複代入を除外するのに役立つ。しかし,重複

代入が全くないことを保証するのに十分ではない。次の例は,

INDEX(1:10)

が同じ値を含まない場合

に限って許される。

FORALL (I = 1:10)

A (INDEX (I)) = B(I)

END FORALL

FORALL

構文の有効範囲において,入れ子になった単純

FORALL

文 又は

FORALL

構文は,同じ指標変数名を

もってはならない。入れ子になった

FORALL

構文中の

FORALL

制御の式は,外側の指標変数名の値に依存しても

よい。

8

実行制御

内部にブロックを含む実行構文 及び 実行順序を変更するための実行文によって,実行順序を制御することができる。

8.1

ブロックを含む実行構文

ブロックを含む実行構文には次のものがある。

(1)

ASSOCIATE

構文

(2)

CASE

構文

(3)

DO

構文

(4)

IF

構文

(5)

SELECT TYPE

構文

DO

構文には,不整構造の形もある。

ブロック

(block)

は,ひとまとまりのものとして扱われる実行構文の並びとする。

R801

ブロック

is

[

実行部構文

] ...

実行構文によって,プログラム中のどのブロックを実行するかを制御したりブロックの実行回数を制御したりする

ことができる。ブロックは必ず,実行構文に埋め込まれ,その実行構文に固有の文によって両端を区切られる。

不整構

DO

構文中の実行構文の列は,終端を区切る文をもたないこと以外は,ブロックに関するすべての規則

(

8.1.1

)

に従わなければならない。

注記

8.1

ブロックは,実行構文を含まなくてもよい。そのようなブロックの実行は,効果をもたない。

上の実行構文には,名前を付けることができる。実行構文に名前を付ける場合,その名前は,その実行構文の最初

の文の最初の構文素として書き,かつ その実行構文の最後の構文素としても書かなければならない。

固定形式のプログラム

においては,実行構文の前の名前は,

6

番目の文字位置 より後に書かなければならない。

文は,それが構文名を含んでいない場合はその文を含む最も内側の実行構文に 属する

(belong)

といい,構文名を

含んでいる場合はその名前の実行構文に属するという。

8.2

ブロックを含む実行構文の例を次に示す。

IF (A > 0.0) THEN

B = SQRT (A)

!

これら二つの文は,

C = LOG (A)

!

ブロックを形成する。

END IF

8.1.1

ブロックに関する規則

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

132

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

8.1.1.1

ブロック中の実行構文

ブロック中に実行構文があるとき,その実行構文は,そのブロックに完全に含まれていなければならない。

8.1.1.2

ブロックにおける制御の流れ

ブロックの外部から内部への制御移行は,禁止する。ブロック内での制御移行 及び ブロックの内部から外部への

制御移行は,起こしてもよい。

サブルーチン引用 及び 関数引用(

12.4.2

及び

12.4.3

参照)が,ブロック内にあってもよい。

8.1.1.3

ブロックの実行

ブロックの実行は,そのブロック中の最初の実行構文の実行から始まる。ブロックの外部への制御移行がなければ,

ブロックの実行は,実行系列の最後の実行構文の実行で完了する。

注記

8.3

ブロックの終端での動作は,個々の実行構文 及び その実行構文中のブロックに依存するが,通

常は制御移行が起こる。

8.1.2 IF

構文

IF

構文

(IF construct)

は,それを構成するブロックのうち高々一つの実行を選択する。その選択は,一連の論理

式に基づいて行われる。

IF

(IF statement)

は,一つの論理式に基づいて,一つの文の実行を制御する(

8.1.2.4

参照)。

8.1.2.1 IF

構文の形

R802

IF

構文

is

IF THEN

 ブロック

[ ELSE IF

 ブロック

] ...

[ ELSE

 ブロック

]

END IF

R803

IF THEN

is

[ IF

構文名

:

]

IF (

スカラ論理式

) THEN

R804

ELSE IF

is

ELSE IF (

スカラ論理式

) THEN

[ IF

構文名

]

R805

ELSE

is

ELSE

[ IF

構文名

]

R806

END IF

is

END IF

[ IF

構文名

]

C801

(R802) IF

構文の

IF THEN

文に

IF

構文名を指定する場合は,対応する

END IF

文にも同じ

IF

構文名

を指定しなければならない。

IF

構文の

IF THEN

文に

IF

構文名を指定しない場合は,対応する

END IF

文に

IF

構文名を指定してはならない。

ELSE IF

文 又は

ELSE

文に

IF

構文名を指定する場合は,対応

する

IF THEN

文にも同じ

IF

構文名を指定しなければならない。

8.1.2.2 IF

構文の実行

IF

構文中の高々一つのブロックが実行される。

IF

構文中に

ELSE

文があれば,その

IF

構文中ではちょうど一つの

ブロックが実行される。スカラ論理式は,値が真となる式が見つかるか 又は

ELSE

文 若しくは

END IF

文に到達す

るまで,

IF

構文中に書いてある順に評価される。真となる式 又は

ELSE

文に到達した場合,その直後に続くブロッ

クが実行され,それによってその

IF

構文の実行は完了し,それ以後の

ELSE IF

文に含まれるスカラ論理式は評価さ

れない。どの式も真とならず,かつ

ELSE

文がない場合,

IF

構文の実行は,その

IF

構文中のどのブロックも実行せ

ずに完了する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

133

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ELSE IF

文 又は

ELSE

文を飛び先文としてはならない。

END IF

文への飛越しができるのは,その

IF

構文の内

部からだけとする。

END IF

文の実行は,効果をもたない。

8.1.2.3 IF

構文の例

IF

構文の例を次に示す。

8.4

三つの

IF

構文

IF (CVAR == ’RESET’) THEN

I = 0; J = 0; K = 0

END IF

PROOF_DONE: IF (PROP) THEN

WRITE (3, ’(’’QED’’)’)

STOP

ELSE

PROP = NEXTPROP

END IF PROOF_DONE

IF (A > 0) THEN

B = C/A

IF (B > 0) THEN

D = 1.0

END IF

ELSE IF (C > 0) THEN

B = A/C

D = -1.0

ELSE

B = ABS (MAX (A, C))

D = 0

END IF

8.1.2.4 IF

IF

文は,一つの単純実行文(

R214

参照)を制御する。

R807

IF

is

IF (

スカラ論理式

)

単純実行文

C802

(R807) IF

文中の単純実行文は,

IF

文,

END PROGRAM

文,

END FUNCTION

文 又は

END SUB-

ROUTINE

文であってはならない。

IF

文を実行すると,そのスカラ論理式が評価される。式の値が真であれば,単純実行文が実行される。式の値が偽

であれば,単純実行文は実行されず,実行が続けられる。

スカラ論理式中の関数引用の実行は,単純実行文中の要素に影響を及ぼしてもよい。

8.5

IF

文の例を次に示す。

IF (A > 0.0) A = LOG (A)

8.1.3 CASE

構文

CASE

構文

(CASE construct)

は,それを構成するブロックのうち高々一つの実行を選択する。その選択は,式の

値に基づいて行われる。

8.1.3.1 CASE

構文の形

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

134

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R808

CASE

構文

is

SELECT CASE

[ CASE

 ブロック

] ...

END SELECT

R809

SELECT CASE

is

[ CASE

構文名

:

]

SELECT CASE (

場合式

)

R810

CASE

is

CASE

場合選択子

[ CASE

構文名

]

R811

END SELECT

is

END SELECT

[ CASE

構文名

]

C803

(R808) CASE

構文の

SELECT CASE

文に

CASE

構文名を指定する場合は,対応する

END SELECT

文にも同じ

CASE

構文名を指定しなければならない。

CASE

構文の

SELECT CASE

文に

CASE

構文名

を指定しない場合は,対応する

END SELECT

文に

CASE

構文名を指定してはならない。

CASE

文に

CASE

構文名を指定する場合は,対応する

SELECT CASE

文にも同じ

CASE

構文名を指定しなければ

ならない。

R812

場合式

is

スカラ整数式

or

スカラ文字式

or

スカラ論理式

R813

場合選択子

is

(

場合値範囲並び

)

or

DEFAULT

C804

(R808) CASE

文中の高々一つの場合選択子が

DEFAULT

であってよい。

R814

場合値範囲

is

場合値

or

場合値

:

or

:

場合値

or

場合値

:

場合値

R815

場合値

is

スカラ整数初期値式

or

スカラ文字初期値式

or

スカラ論理初期値式

C805

(R808)

一つの

CASE

構文中の場合値は,すべて場合式と同じ型でなければならない。文字型について,

長さは異なってもよいが,種別型パラメタは同じでなければならない。

C806

(R808)

場合式が論理型であるときは,コロンを使った場合値範囲は使用してはならない。

C807

(R808)

一つの

CASE

構文において,場合値範囲に重なりがあってはならない。すなわち,二つ以上の

場合値範囲と一致する場合式の値が存在してはならない。

8.1.3.2 CASE

構文の実行

SELECT CASE

文を実行すると,その中の場合式が評価される。その結果の値を 場合指標

(case index)

と呼ぶ。

場合指標が場合値範囲並び中のいずれかの場合値範囲と一致したとき,その並びとの一致が起こる。場合指標の値を

c

として,一致は,次のとおりに定義する。

(1)

場合値範囲がコロンなしの単一値

v

である場合,論理型であれば式

c

.EQV.

v

が真となるときに,整数型 又は

文字型であれば式

c

==

v

が真となるときに,一致が起こる。

(2)

場合値範囲が

low

:

high

の形である場合,式

low

<=

c

.AND.

c

<=

high

が真となるときに一致が起こる。

(3)

場合値範囲が

low

:

の形である場合,式

low

<=

c

が真となるときに一致が起こる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

135

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(4)

場合値範囲が

:

high

の形である場合,式

c

<=

high

が真となるときに一致が起こる。

(5)

ほかのどの選択子とも一致せず,かつ

DEFAULT

選択子がある場合,場合指標はそれと一致する。

(6)

ほかのどの選択子とも一致せず,かつ

DEFAULT

選択子もない場合,一致は起こらない。

一致した選択子があれば,それを含む

CASE

文に続くブロックが実行される。これによって,

CASE

構文の実行は

完了する。

CASE

構文中の高々一つのブロックが実行される。

CASE

文を飛び先文としてはならない。

END SELECT

文への飛越しができるのは,その

CASE

構文の内部からだ

けとする。

8.1.3.3 CASE

構文の例

CASE

構文の例を次に示す。

8.6

整数の符号を返す関数

INTEGER FUNCTION SIGNUM (N)

SELECT CASE (N)

CASE (:-1)

SIGNUM = -1

CASE (0)

SIGNUM = 0

CASE (1:)

SIGNUM = 1

END SELECT

END

8.7

括弧の対応を検査するプログラム片

CHARACTER (80) :: LINE

...

LEVEL=0

SCAN_LINE: DO I = 1, 80

CHECK_PARENS: SELECT CASE (LINE (I:I))

CASE (’(’)

LEVEL = LEVEL + 1

CASE (’)’)

LEVEL = LEVEL - 1

IF (LEVEL < 0) THEN

PRINT *, ’UNEXPECTED RIGHT PARENTHESIS’

EXIT SCAN_LINE

END

IF

CASE DEFAULT

!

他の文字をすべて無視する。

END SELECT CHECK_PARENS

END DO SCAN_LINE

IF (LEVEL > 0) THEN

PRINT *, ’MISSING RIGHT PARENTHESIS’

END IF

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

136

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

8.8

等価な三つのプログラム片

IF (SILLY == 1) THEN

CALL THIS

ELSE

CALL THAT

END IF

SELECT CASE (SILLY == 1)

CASE (.TRUE.)

CALL THIS

CASE (.FALSE.)

CALL THAT

END SELECT

SELECT CASE (SILLY)

CASE DEFAULT

CALL THAT

CASE (1)

CALL THIS

END SELECT

8.9

一つのブロックが複数の場合に選択されるプログラム片

SELECT CASE (N)

CASE (1, 3:5, 8)

!

1

3

4

5

8

を選ぶ。

CALL SUB

CASE DEFAULT

CALL OTHER

END SELECT

8.1.4 ASSOCIATE

構文

ASSOCIATE

構文

(ASSOCIATE construct)

は,ブロックの実行中に,名前付き要素に対して式 又は 変数を結

合する。これらの名前付き構文内要素

(

16.3

)

は,結合要素

(

16.4.5

)

といい,その名前を結合名

(associate name)

いう。

8.1.4.1 ASSOCIATE

構文の形

R816

ASSOCIATE

構文

is

ASSOCIATE

ブロック

END ASSOCIATE

R817

ASSOCIATE

is

[ ASSOCIATE

構文名

:

]

ASSOCIATE (

結合並び

)

R818

結合

is

結合名

=>

選択子

R819

選択子

is

or

変数

C808

(R818)

選択子が変数でないか,又は ベクトル添字をもつ変数である場合,結合名は変数確定の文脈

(

16.5.7

)

中に現れてはならない。

C809

(R818)

結合名は,それが属する

ASSOCIATE

文中の他の結合名と同じであってはならない。

R820

END ASSOCIATE

is

END ASSOCIATE

[ ASSOCIATE

構文名

]

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

137

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C810

(R820) ASSOCIATE

構文の

ASSOCIATE

文に

ASSOCIATE

構文名を指定する場合は,対応する

END

ASSOCIATE

文にも同じ

ASSOCIATE

構文名を指定しなければならない。

ASSOCIATE

構文の

ASSO-

CIATE

文に

ASSOCIATE

構文名を指定しない場合は,対応する

END ASSOCIATE

文に

ASSOCIATE

構文名を指定してはならない。

8.1.4.2 ASSOCIATE

構文の実行

ASSOCIATE

構文を実行すると,その中の

ASSOCIATE

文が実行されてからブロックが実行される。ブロックの

実行中は,各結合名は,対応する選択子と結合した

(

16.4.1.5

)

実体を指す。結合要素は選択子に対して宣言時の型 及

び 型パラメタを引き継ぐ。選択子が多相的であるとき,かつ そのときに限り,結合要素は多相的である。

結合要素の他の属性は,

8.1.4.3

による。

END ASSOCIATE

文への飛越しができるのは,その

ASSOCIATE

構文の内部からだけとする。

8.1.4.3

結合名の属性

SELECT TYPE

構文と

ASSOCIATE

構文では,各結合要素は対応する選択子と同じ次元数をもつ。各次元の下

限は,組込み関数

LBOUND

(

13.7.60

)

を選択子の対応する次元数に適用した結果とする。各次元の上限は,その下限

と寸法の和から

1

を引いた値とする。結合要素は,選択子が変数であってその変数が

ASYNCHRONOUS

属性 又は

VOLATILE

属性をもつとき,かつ そのときに限り,同じ属性をもつ。結合要素は,選択子が変数であってその変数

TARGET

属性 又は

POINTER

属性をもつとき,かつ そのときに限り,

TARGET

属性をもつ。結合要素が多相

的であるとき,その選択子の実行時の型 及び 型パラメタ値を引き継ぐ。選択子が

OPTIONAL

属性をもつとき,そ

の選択子は実在しなければならない。

選択子(

8.1.4.1

参照)が変数確定の文脈

(

16.5.7

)

に現れることができないか,又は ベクトル添字をもつ配列であ

る場合,結合名は変数確定の文脈に現れてはならない。

8.1.4.4 ASSOCIATE

構文の例

8.10

式の結合例

ASSOCIATE ( Z => EXP(-(X**2+Y**2)) * COS(THETA) )

PRINT *, A+Z, A-Z

END ASSOCIATE

派生型変数の結合例

ASSOCIATE ( XC => AX%B(I,J)%C )

XC%DV = XC%DV + PRODUCT(XC%DV(1:N))

END ASSOCIATE

部分配列の結合例

ASSOCIATE ( ARRAY => AX%B(I,:)%C )

ARRAY(N)%EV = ARRAY(N-1)%EV

END ASSOCIATE

複数個の結合例

ASSOCIATE ( W => RESULT(I,J)%W, ZX => AX%B(I,J)%D, ZY => AY%B(I,J)%D )

W = ZX*X + ZY*Y

END ASSOCIATE

8.1.5 SELECT TYPE

構文

SELECT TYPE

構文

(SELECT TYPE construct)

は,それを構成するブロックのうち高々一つの実行を選択する。

その選択は,式の実行時の型に基づいて行われる。式への名前の結合(

16.3

及び

16.4.1.5

参照)は,

ASSOCIATE

構文と同じ方法で行われる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

138

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

8.1.5.1 SELECT TYPE

構文の形

R821

SELECT TYPE

構文

is

SELECT TYPE

[

型保持文

ブロック

] ...

END SELECT TYPE

R822

SELECT TYPE

is

[ SELECT

構文名

:

]

SELECT TYPE (

[

結合名

=>

]

選択子

)

C811

(R822)

選択子が名前付き変数でない場合,構文要素

結合名

=>

が現れなければならない。

C812

(R822)

選択子が変数でないか,又は ベクトル添字をもつ変数である場合,結合名は変数確定の文脈

(

16.5.7

)

に現れてはならない。

C813

(R822) SELECT TYPE

文中の選択子は多相的でなければならない。

R823

型保持文

is

TYPE IS (

型指定子

)

[ SELECT

構文名

]

or

CLASS IS (

派生型指定子

)

[ SELECT

構文名

]

or

CLASS DEFAULT

[ SELECT

構文名

]

C814

(R823)

型指定子 及び 派生型指定子は,各長さ型パラメタが引き継がれることを指定する。

C815

(R823)

型指定子 及び 派生型指定子は,連続派生型 又は

BIND

属性をもつ型を指定してはならない。

C816

(R823)

選択子が無制限多相的でない場合,型指定子 及び 派生型指定子はその選択子の宣言時の型の直

接拡張型を指定しなければならない。

C817

(R823)

一つの

SELECT TYPE

構文について,同一の型 及び 種別型パラメタ値を二つ以上の

TYPE IS

で始まる型保持文で指定してはならず,かつ 二つ以上の

CLASS IS

で始まる型保持文で指定してはなら

ない。

C818

(R823)

一つの

SELECT TYPE

構文について,高々一つの

CLASS DEFAULT

で始まる型保持文を指定し

てよい。

R824

END SELECT TYPE

is

END SELECT

[ SELECT

構文名

]

C819

(R821) SELECT TYPE

構文の

SELECT TYPE

文に

SELECT

構文名を指定する場合は,対応する

END SELECT TYPE

文にも同じ

SELECT

構文名を指定しなければならない。

SELECT TYPE

構文

SELECT TYPE

文に

SELECT

構文名を指定しない場合は,対応する

END SELECT TYPE

文に

SELECT

構文名を指定してはならない。型保持文に

SELECT TYPE

構文名を指定する場合は,対応す

SELECT TYPE

文にも同じ

SELECT

構文名を指定しなければならない。

SELECT TYPE

構文の結合名は,結合名が指定されている場合はそれとし,指定されていない場合は,選択子を

構成する名前とする。

8.1.5.2 SELECT TYPE

構文の実行

SELECT TYPE

構文を実行すると,選択子が変数でない場合は,選択された式が評価される。

SELECT TYPE

構文では,高々一つのブロックが実行される。そのブロックの実行中に,結合名は選択子と結合

された

(

16.4.1.5

)

実体を指す。

型保持文が

TYPE IS

で始まる場合,実行時の型 及び 型パラメタ値がその文で指定したものと同じ選択子と一致

する。

CLASS IS

で始まる場合,実行時の型がその文で指定した型の直接拡張型である選択子と一致する。その場合,

指定された種別型パラメタ値は,選択子の実行時の型の対応する型パラメタ値と同じとする。

実行されるブロックは次のとおりとする。

(1)

選択子が

TYPE IS

で始まる型保持文と一致する場合,その文の後続のブロックが実行される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

139

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

(

1

)

でなく,かつ 選択子が

CLASS IS

で始まる型保持文のうちただ一つと一致する場合,その文の後続のブロッ

クが実行される。

(3)

(

1

)

及び

(

2

)

でなく, 選択子と

CLASS IS

で始まる型保持文に一致するものが複数ある場合,そのうちの一つ

はそれ以外で指定された型すべての直接拡張型でなければならず,対応する文の後続のブロックが実行される。

(4)

上記以外で

CLASS DEFAULT

で始まる型保持文がある場合,それに後続する文が実行される。

注記

8.11

このアルゴリズムは,原始プログラムを上から見て最初に一致する型保持文を探すのではな

い。一致する型保持文が複数存在する場合,最もよく一致する文を選択する。

TYPE IS

で始まる型保持文の後続ブロック内では,結合要素

(

16.4.5

)

は,多相的

(

5.1.1.2

)

ではなく,型保持文内

で名前付けられた型をもち,かつ 選択子と同じ型パラメタ値をもつ。

CLASS IS

で始まる型保持文の後続ブロック内では,結合要素は,多相的であって,型保持文で名前付けられた宣

言時の型をもつ。その型パラメタ値は,対応する選択子の型パラメタ値とする。

CLASS DEFAULT

で始まる型保持文の後続ブロック内では,結合要素は,多相的であって,選択子と同じ宣言時の型

をもつ。その型パラメタ値は,対応する選択子の宣言時の型の型パラメタ値とする。

注記

8.12

選択子の宣言時の型が

T

の場合,

CLASS DEFAULT

と指定するのは

CLASS IS (T)

と指定す

るのと同じ効果をもつ。

結合要素の他の属性は,

8.1.4.3

による。

型保持文を飛び先文としてはならない。

END SELECT TYPE

文への飛越しができるのは,その

SELECT TYPE

構文の内部からだけとする。

8.1.5.3 SELECT TYPE

構文の例

8.13

結合名を用いる場合。

TYPE POINT

REAL :: X,Y

END TYPE POINT

TYPE, EXTENDS(POINT) :: POINT_3D

REAL :: Z

END TYPE POINT_3D

TYPE, EXTENDS(POINT) :: COLOR_POINT

INTEGER :: COLOR

END TYPE COLOR_POINT

TYPE(POINT), TARGET :: P

TYPE(POINT_3D), TARGET :: P3

TYPE(COLOR_POINT), TAEGET :: C

CLASS(POINT), POINTER :: P_OR_C

P_OR_C => C

SELECT TYPE ( A => P_OR_C )

CLASS IS ( POINT )

!

ここでは

CLASS ( POINT ) :: A

になっている。

PRINT *, A%X, A%Y

!

このブロックが実行される。

TYPE IS ( POINT_3D )

!

ここでは

TYPE ( POINT_3D ) :: A

になっている。

PRINT *, A%X, A%Y, A%Z

END SELECT

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

140

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

8.14

結合名を省略する例。

8.13

の宣言をそのまま用いる。

P_OR_C => P3

SELECT TYPE ( P_OR_C )

CLASS IS ( POINT )

!

ここでは

CLASS ( POINT ) :: P_OR_C

になっている。

PRINT *, P_OR_C%X, P_OR_C%Y

TYPE IS ( POINT_3D )

!

ここでは

TYPE ( POINT_3D ) :: P_OR_C

になっている。

PRINT *, P_OR_C%X, P_OR_C%Y, P_OR_C%Z

!

このブロックが実行される。

END SELECT

8.1.6 DO

構文

DO

構文

(DO construct)

は,実行構文の列の繰返し実行を指定する。このような繰返し列を ループ

(loop)

と呼ぶ。

EXIT

文 及び

CYCLE

文によって,ループの実行を変更できる。

ループの反復回数は,

DO

構文の実行開始時に決めることもできるし,決めないでおくこと(無限

DO

又は

DO

WHILE

)もできる。どの場合でも,

DO

構文中の任意の場所で

EXIT

(

8.1.6.4.4

)

を実行して,ループを直ちに終

了させることができる。

CYCLE

(

8.1.6.4.3

)

を実行して,ループのある回の反復を飛び越すこともできる。

8.1.6.1 DO

構文の形

DO

構文の形は,整構造

又は 不整構造

とする。

R825

DO

構文

is

整構造

DO

構文

or

不整構造

DO

構文

8.1.6.1.1

整構造

DO

構文の形

R826

整構造

DO

構文

is

DO

DO

ブロック

整構造

DO

端末文

R827

DO

is

文番号

DO

or

単純

DO

R828

文番号

DO

is

[ DO

構文名

:

]

DO

文番号

[ DO

制御

]

R829

単純

DO

is

[ DO

構文名

:

]

DO

[ DO

制御

]

R830

DO

制御

is

[

,

] DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

or

[

,

]

WHILE (

スカラ論理式

)

R831

DO

変数

is

スカラ整変数

C820

(R831) DO

変数は,整数型の名前付きスカラ変数でなければならない。

R832

DO

ブロック

is

ブロック

R833

整構造

DO

端末文

is

END DO

or

CONTINUE

R834

END DO

is

END DO

[ DO

構文名

]

C821

(R826)

整構造

DO

構文の

DO

文に

DO

構文名を指定する場合,対応する整構造

DO

端末文は,同じ

DO

構文名を指定した

END DO

文でなければならない。整構造

DO

構文の

DO

文に

DO

構文名を指定しな

い場合は,対応する整構造

DO

端末文に

DO

構文名を指定してはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

141

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C822

(R826) DO

文が単純

DO

文である場合,対応する整構造

DO

端末文は,

END DO

文でなければなら

ない。

C823

(R826) DO

文が文番号

DO

文である場合は,対応する整構造

DO

端末文にその同じ文番号を付けなけれ

ばならない。

8.1.6.1.2

不整構造

DO

構文の形

R835

不整構造

DO

構文

is

実行端末

DO

構文

or

外郭共有

DO

構文

R836

実行端末

DO

構文

is

文番号

DO

DO

本体

実行

DO

端末文

R837

DO

本体

is

[

実行部構文

] ...

R838

実行

DO

端末文

is

単純実行文

C824

(R838)

実行

DO

端末文は,

CONTINUE

文,

GO TO

文,

RETURN

文,

STOP

文,

EXIT

文,

CYCLE

文,

END FUNCTION

文,

END

SUBROUTINE

文,

END PROGRAM

文 又は 算術

IF

文であってはならない。

C825

(R835)

実行

DO

端末文には文番号を付けなければならず,対応する文番号

DO

文はその同じ文番号を参照しなければならない。

R839

外郭共有

DO

構文

is

文番号

DO

DO

本体

共有端末

DO

構文

R840

共有端末

DO

構文

is

外郭共有

DO

構文

or

内郭共有

DO

構文

R841

内郭共有

DO

構文

is

文番号

DO

DO

本体

共有

DO

端末文

R842

共有

DO

端末文

is

単純実行文

C826

(R842)

共有

DO

端末文は,

GO TO

文,

RETURN

文,

STOP

文,

EXIT

文,

CYCLE

文,

END FUNCTION

文,

END SUBROUTINE

文,

END PROGRAM

文 又は 算術

IF

文であってはならない。

C827

(R840)

共有

DO

端末文には文番号を付けなければならず,その文を含むすべての内部共有

DO

構文 及び 外郭共有

DO

構文のすべての文番号

DO

文は,その同じ文番号を参照しなければならない。

不整構造

DO

構文の

DO

本体の後の実行

DO

端末文,共有

DO

端末文 又は 共有端末

DO

構文を,その不整構造

DO

構文の

DO

端末

(DO termination)

呼ぶ。

一つの有効域内で,同じ文番号を参照している

DO

文をもつすべての

DO

構文は不整構造

DO

構文とし,それらの

DO

構文はその文番号の文を 共有する

(share)

という。

8.1.6.2 DO

構文の範囲

整構造

DO

構文の 範囲

(range)

は,その

DO

ブロックとする。

DO

ブロックは,ブロックの規則

(

8.1.1

)

を満足し

なければならない。特に,そのブロックの外部から内部への制御移行は,禁止する。整構造

DO

構文の整構造

DO

末文への飛越しができるのは,その

DO

構文の範囲内からだけとする。

不整構造

DO

構文の 範囲

(range)

は,

DO

本体 及び その後の

DO

端末とする。この範囲の終端は他の実行構文とは違って特定の文(例えば,

END IF

文)に

よって区切られてはいないが,この範囲はブロックの規則

(

8.1.1

)

を満足する。この範囲の外部から

DO

本体の内部 又は

DO

端末への制御移行は,禁止する。特

に,共有

DO

端末文への飛越しができるのは,対応する内郭共有

DO

構文の範囲内からだけとする。

8.1.6.3 DO

構文の状態

DO

構文は,活動状態

(active)

又は 休止状態

(inactive)

のいずれかの状態にある。

DO

文を実行するまでは休止状

態とし,

DO

文を実行すると活動状態になる。

一度活動状態になった

DO

構文は,それが終了

(

8.1.6.4.4

)

した時だけ休止状態になる。

8.1.6.4 DO

構文の実行

DO

構文は,ループ(すなわち,繰返し実行される実行構文の列)を指定する。

DO

構文の実行には,ループの開

始,ループ範囲の実行 及び ループの終了の

3

段階がある。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

142

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

8.1.6.4.1

ループの開始

DO

文を実行すると,その

DO

構文が活動状態になる。

DO

制御が

[

,

] DO

変数

=

スカラ整数式

1

,

スカラ整数式

2

[

,

スカラ整数式

3

]

の形である場合,次の処理が順に行われる。

(1)

スカラ数値式

1

,スカラ数値式

2

及び スカラ数値式

3

を評価して,それぞれ始値

m

1

,限界値

m

2

及び 増分値

m

3

が定められる。これらの値は,

DO

変数と同じ種別型パラメタをもつ整数型となる。このとき,必要ならば

数値変換の規則(

7.9

)に従って式の値が

DO

変数の種別型パラメタに従う値に変換される。スカラ整数式

3

を書かないと,

m

3

の値は

1

となる。

m

3

の値は,

0

であってはならない。

(2)

DO

変数が,始値

m

1

の値で確定になる。

(3)

繰返し数

(iteration count)

は,次の式の値として定められる。ただし,その値が負であるときは,繰返し数は

0

とする。

(

m

2

m

1

+

m

3

)

/m

3

注記

8.15

次の場合には,繰返し数は

0

となる。

m

1

> m

2

かつ

m

3

>

0

又は

m

1

< m

2

かつ

m

3

<

0

DO

制御を省略した場合,繰返し数は計算されず,ゼロにまで減らすのが不可能なほど大きな正の数が繰返し数と

なったかのように扱われる。

DO

制御が

[

,

]

WHILE(

スカラ論理式

)

の形である場合,

DO

制御を省略して次の文を

DO

ブロックの先頭に挿入した場合と同じ効果をもつ。

IF (.NOT. (

スカラ論理式

)) EXIT

DO

文の実行が完了すると,実行周期が開始する。

8.1.6.4.2

実行周期

DO

構文の 実行周期

(execution cycle)

は,次の処理からなる。この実行周期がループの終了まで順に繰り返される。

(1)

繰返し数があるときは,それが調べられる。その値が

0

であれば,ループは終了し,

DO

構文は休止状態になる。

DO

制御が

“[

,

]

WHILE(

スカラ論理式

)

の形であるときは,スカラ論理式が評価される。式の値が偽であれば,

ループは終了し,

DO

構文は休止状態になる。

これらの結果,一つの共有

DO

端末文を共有するすべての

DO

構文が休止状態になった場

合,それらすべての

DO

構文の実行は完了する。その共有

DO

端末文を共有する幾つかの

DO

構文が活動状態にある場合,それらのうち一番最近に実行され

DO

文をもつ

DO

構文の実行周期の処理

(

3

)

から実行が続けられる。

(2)

繰返し数が

0

でなければ,ループ範囲が実行される。

(3)

繰返し数があれば,それが

1

だけ減らされる。

DO

変数があれば,それが増分値

m

3

だけ増やされる。

処理

(

3

)

DO

変数の増加を除いて,

DO

構文が活動状態にある間は,

DO

変数を再確定しても不定にしてもなら

ない。

8.1.6.4.3 CYCLE

ループ範囲内で

CYCLE

文を実行することによって,その実行周期の処理

(

2

)

の残りを飛び越すことができる。

R843

CYCLE

is

CYCLE

[ DO

構文名

]

C828

(R843) CYCLE

文に

DO

構文名を指定する場合,その

CYCLE

文は,その名前の

DO

構文の範囲内に

なければならない。

DO

構文名を指定しない場合,その

CYCLE

文は,少なくとも一つの

DO

構文の範

囲内になければならない。

一つの

CYCLE

文は,ある一つの

DO

構文に属する。

CYCLE

文に

DO

構文名を指定した場合,その

CYCLE

は,その名前の

DO

構文に属する。

DO

構文名を指定しなかった場合,その

CYCLE

文は,それを含む

DO

構文のう

ち最も内側の

DO

構文に属する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

143

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

CYCLE

文を実行すると,それが属する

DO

構文の現在の実行周期の処理

(

3

)

に直ちに進む。

その

DO

構文が不整構造

DO

構文である場合,実行

DO

端末文 又は 共有

DO

端末文は実行されない。

整構造

DO

構文において,整構造

DO

端末文への制御移行は,その

DO

構文に属する

CYCLE

文の実行と同じ効

果をもつ。

不整構造

DO

構文において,実行

DO

端末文 又は 共有

DO

端末文に制御を移行すると,その文が実行される。その結果として制御移行が起こらな

ければ,次にその

DO

構文の現在の実行周期の処理

(

3

)

が実行される。

8.1.6.4.4

ループの終了

EXIT

文の使用は,ループの終了の方法の一つとする。

R844

EXIT

is

EXIT

[ DO

構文名

]

C829

(R844) EXIT

文に

DO

構文名を指定する場合,その

EXIT

文は,その名前の

DO

構文の範囲内になけ

ればならない。

DO

構文名を指定しない場合,その

EXIT

文は,少なくとも一つの

DO

構文の範囲内に

なければならない。

一つの

EXIT

文は,ある一つの

DO

構文に属する。

EXIT

文に

DO

構文名を指定した場合,その

EXIT

文は,その

名前の

DO

構文に属する。

DO

構文名を指定しなかった場合,その

EXIT

文は,それを含む

DO

構文のうち最も内側

DO

構文に属する。

次のいずれかの時点で,ループは終了し,

DO

構文は休止状態になる。

(1)

実行周期の処理

(

1

)

の判定時に,繰返し数が

0

となったか 又は スカラ論理式が偽となった。

(2)

その

DO

構文に属する

EXIT

文を実行した。

(3)

その

DO

構文の範囲内にあるが,それより外側の

DO

構文に属している

EXIT

文 又は

CYCLE

文を実行した。

(4)

その

DO

構文の範囲内の文から,その整構造

DO

端末文でもなく同じ

DO

構文の範囲内の文でもない文に制御

移行した。

(5)

その

DO

構文の範囲内で

RETURN

文を実行した。

(6)

プログラム中のどこかで

STOP

文を実行したか 又は 他の理由でプログラムが終了した。

DO

構文が休止状態になったとき,その

DO

構文の

DO

変数があれば,それは最後に確定された値を保持する。

8.1.6.5 DO

構文の例

DO

構文の例を次に示す。

8.16

次のプログラム片は,二つの配列のテンソル積を計算する。

DO I = 1, M

DO

J = 1, N

C (I, J) = SUM (A (I, J, :) * B (:, I, J))

END DO

END DO

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

144

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

8.17

次のプログラム片は,

WHILE

DO

制御に用いた

DO

構文を含む。ループはファイル終了 又は

入出力誤りになるまで実行を続け,

DO

文がループの終了点となる。

X

に負の値を読み込むと,ルー

プ範囲の大部分を飛び越して,次の

READ

文を実行する。

READ (IUN, ’(1X, G14.7)’, IOSTAT = IOS) X

DO WHILE (IOS == 0)

IF (X >= 0.) THEN

CALL SUBA (X)

CALL SUBB (X)

...

CALL SUBZ (X)

ENDIF

READ (IUN, ’(1X, G14.7)’, IOSTAT = IOS) X

END DO

8.18

次のプログラム片は,

8.17

と同じ振る舞いをするが,

READ

文を

DO

構文の範囲内に移して

READ

文を一つだけにしたものである。

CYCLE

文は,

IF

構文による余分な入れ子を避けるために

使用している。

DO

! "DO WHILE + 1/2"

ループ

READ (IUN, ’(1X, G14.7)’, IOSTAT = IOS) X

IF (IOS /= 0) EXIT

IF (X < 0.) CYCLE

CALL SUBA (X)

CALL SUBB (X)

...

CALL SUBZ (X)

END DO

注記

8.19

DO

構文のその他の例は,

C.5.3

で示す。

8.2

飛越し

飛越し

(branching)

は,通常の実行順序を変更するときに使用する。飛越しは,ある有効域内の文から同じ有効域

内の文番号付きの飛び先文への制御移行を引き起こす。飛越しは,

GO TO

,計算形

GO TO

文,算術

IF

文,選択戻り指定子をも

CALL

及び

END

指定子 又は

ERR

指定子をもつ入出力文によって起こる。手続引用と制御構文も制御移行を引き

起こすが,この場合は飛越しとは呼ばない。飛び先文

(branch target statement)

は,単純実行文,

ASSOCIATE

文,

END ASSOCIATE

文,

IF THEN

文,

END IF

文,

SELECT CASE

文,

END SELECT

文,

SELECT TYPE

文,

END SELECT TYPE

文,

DO

文,

END DO

文,構造

FORALL

,実行

DO

端末文,共有

DO

端末文

又は 構造

WHERE

とする。

8.2.1 GO TO

R845

GO TO

is

GO TO

文番号

C830

(R845)

文番号は,その

GO TO

文と同じ有効域内にある飛び先文の文番号でなければならない。

GO TO

文を実行すると,制御移行が起こり,その文番号をもつ飛び先文が次に実行される。

8.2.2

計算形

GO TO

R846

計算形

GO TO

is

GO TO (

文番号並び

)

[

,

]

スカラ整数式

C831

(R846)

文番号並び中の文番号は,その計算形

GO TO

文と同じ有効域内にある飛び先文の文番号でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

145

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

8.20

一つの文番号並び中に,同じ文番号を

2

回以上書いてもよい。

計算形

GO TO

文を実行すると,そのスカラ整数式が評価される。この値を

i

とし,文番号並び中の文番号の個数を

n

とする。

1

i

n

である場合には,制御

移行が起こり,文番号並び中の

i

番目にある文番号をもつ文が次に実行される。

i

1

より小さい場合 及び

n

より大きい場合には,実行系列は,

CONTINUE

文が

実行されたかのように続けられる。

8.2.3

算術

IF

R847

算術

IF

is

IF (

スカラ数値式

)

文番号

,

文番号

,

文番号

C832

(R847)

各文番号は,その算術

IF

文と同じ有効域内にある飛び先文の文番号でなければならない。

C833

(R847)

スカラ数値式は,複素数型であってはならない。

注記

8.21

一つの算術

IF

文中に,同じ文番号を

2

回以上書いてもよい。

算術

IF

文を実行すると,数値式が評価され,続いて制御移行が起こる。数値式の値が負である場合,ゼロである場合 及び 正である場合に,それぞれ

1

番目,

2

目 及び

3

番目の文番号によって識別された飛び先文が次に実行される。

8.3 CONTINUE

CONTINUE

文の実行は,効果をもたない。

R848

CONTINUE

is

CONTINUE

8.4 STOP

R849

STOP

is

STOP

[

終了符号

]

R850

終了符号

is

スカラ文字定数

or

数字

[

数字

[

数字

[

数字

[

数字

] ] ] ]

C834

(R850)

スカラ文字定数は,基本文字型でなければならない。

STOP

文を実行すると,そのプログラムの実行が正常終了

(

2.3.4

)

する。終了符号の指定があれば,実行終了時

にその終了符号が処理系依存のやり方で提示される。終了符号中の先行ゼロは,意味をもたない。例外(箇条

14

が発生した場合は,処理系はその例外の種類を示す警告を発しなければならない。この警告は,組込みモジュール

ISO FORTRAN ENV

内の名前付き定数

ERROR UNIT

(

13.8.2.2

)

が示す装置に対してでなければならない。

9

入出力文

入力文

(input statement)

は,外部媒体から内部記憶へ,又は 内部ファイルから内部記憶へデータを転送する手段

を与える。この処理を 読込み

(reading)

という。出力文

(output statement)

は,内部記憶から外部媒体へ,又は 内

部記憶から内部ファイルへデータを転送する手段を与える。この処理を 書出し

(writing)

という。入出力文のうちの

あるものは,データに対して行われるべき編集を指定する。

データを転送する文のほかに,外部媒体を操作したり,又は 外部媒体の接続に関する特性を問い合わせたり記述し

たりする補助入出力文がある。

入出力文は,

OPEN

文,

CLOSE

文,

READ

文,

WRITE

文,

PRINT

文,

BACKSPACE

文,

ENDFILE

文,

REWIND

文,

FLUSH

文,

WAIT

文 及び

INQUIRE

文とする。

READ

文を データ転送入力文

(data transfer input statement)

という。

WRITE

文 及び

PRINT

文を データ転

送出力文

(data transfer output statement)

という。

OPEN

文 及び

CLOSE

文を ファイル接続文

(file connection

statement)

という。

INQUIRE

文を ファイル問合せ文

(file inquiry statement)

という。

BACKSPACE

文,

ENDFILE

文 及び

REWIND

文を ファイル位置付け文

(file positioning statement)

という。

ファイルは,ファイル記憶単位

(

9.2.4

)

又は 記録からなる列とする。記録は,ファイルにもう一段階の構造を与え

ている。記録で構成されたファイルを 記録ファイル

(record file)

という。記憶単位で構成されたファイルを 流れファ

イル

(stream file)

という。処理系によっては,ファイルを記録ファイル 及び 流れファイルの両方として見ることが

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

146

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

できる。この場合,流れファイルとして扱うときのファイル記憶単位と記録ファイルとして扱うときの記録との関係

は,処理系依存とする。

ファイルは,外部ファイル

(

9.2

)

又は 内部ファイル

(

9.3

)

とする。

9.1

記録

記録

(record)

は,通常,値の列 又は 文字の列とする。

端末装置での

1

行は,一つの記録となる。

一つの記録は,必ずしも一つの物理的な要素に対応するものではない。記録は,次の

3

種類とする。

(1)

書式付き記録

(2)

書式なし記録

(3)

ファイル終了記録

注記

9.1

Fortran

でいう

記録

は,通常

論理記録

と呼ばれているものを指す。

Fortran

には

物理記

の概念はない。

9.1.1

書式付き記録

書式付き記録

(formatted record)

は,処理系で表現可能な文字の列からなる。しかし,処理系は,書式付き記録に

おいて,幾つかの制御文字

(

3.1

)

の使用を禁止してもよい。書式付き記録の長さは,文字数で測り,記録を書いたと

き,主に記録中の文字の個数によって定まる。それはまた,処理系 及び 外部媒体に依存することもある。長さは,ゼ

ロであってもよい。書式付き記録は,書式付き入出力文によってだけ読んだり書いたりできる。

書式付き記録は,

Fortran

以外の手段で作ってもよい。

9.1.2

書式なし記録

書式なし記録

(unformatted record)

は,処理系の定める形をもつ値の列とし,任意の型のデータを含んでもよいし,

データを含まなくてもよい。書式なし記録の長さは,ファイル記憶単位

(

9.2.4

)

で測り,それを書いたときに用いた

出力項目並び

(

9.5.2

)

に依存するとともに処理系 及び 外部媒体にも依存する。長さは,ゼロであってもよい。書式

なし記録は,書式なし入出力文によってだけ読んだり書いたりできる。

9.1.3

ファイル終了記録

ENDFILE

文を実行すると,ファイル終了記録

(endfile record)

が明示的に書かれる。このファイルは,順番探査と

して接続されていなければならない。順番探査として接続されているファイルを最後に参照したデータ転送文がデー

タ転送出力文であって,その文を実行してから,そのファイルを参照するファイル位置付け文を実行することなしに

次のいずれかの文の実行があると,ファイル終了記録が暗黙的に書かれる。

(1)

REWIND

文 又は

BACKSPACE

文が,そのファイルに接続された装置を参照する。

(2)

その装置が,

CLOSE

文によって明示的に閉じられるか,誤り条件によらないプログラムの終了によって暗黙的

に閉じられるか,又は 同じ装置に対する他の

OPEN

文によって暗黙的に閉じられる。

ファイル終了記録は,一つのファイルの最後の記録としてだけ現れうる。ファイル終了記録は,長さに関する性質

をもたない。

注記

9.2

ファイル終了記録は,物理的な実体である必要はない。処理系は,

ENDFILE

文が実行されたと

きのファイル位置を保存するために,記録の個数 又は その他の情報を用いてもよい。そして,

READ

文の操作中にその位置に到達したときに,適当な動作を行う。

BACKSPACE

文もまた,ファイル終

了記録というものが存在しているかのように動作する(

9.7.1

参照)。これは,ファイル終了記録が

どのように実現されているかにはよらない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

147

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.2

外部ファイル

外部ファイル

(external file)

は,プログラムの外部の媒体中に存在するファイルとする。

任意の時点において,一つのファイルについて,処理系依存の 許容探査法集合

(set of allowed access methods)

許容記録形集合

(set of allowed forms)

,許容操作集合

(set of allowed actions)

及び 許容記録長集合

(set of allowed

record lengths)

がある。

9.3

プリンタに対する処理系依存の許容操作集合は,書き出す操作を含むが,読み込む操作を含まない

であろう。

一つのファイルは,一つの名前をもつことができる。名前をもつファイルを 名前付きファイル

(named file)

という。

名前付きファイルの名前は,文字列の値で表現する。用いることができる名前の集合は,処理系依存とする。

装置に接続された外部ファイルは,位置

(position)

(ファイル位置ともいう。)に関する性質

(

9.2.3

)

をもつ。

注記

9.4

外部ファイルについての補足説明は,

C.6.1

を参照。

9.2.1

ファイルの存在

任意の時点において,プログラムに対して 存在する

(exist)

,処理系依存の外部ファイルの集合がある。ファイル

は,処理系が知っていても,特定の時点においてプログラムに対して存在しないようにすることができる。

9.5

安全性のために,あるファイルをある実行可能プログラムに対して存在しないようにすることがで

きる。新たに作成されたファイルは,存在しても記録を含まないことがある。

ファイルの生成

(create a file)

とは,以前には存在しなかったファイルを存在するようにすることを意味する。フ

ァイルの消去

(delete a file)

とは,そのファイルの存在を終了させることを意味する。

すべての入出力文は,存在するファイルを参照できる。

INQUIRE

文,

OPEN

文,

CLOSE

文,

WRITE

文,

PRINT

文,

REWIND

文,

FLUSH

文 及び

ENDFILE

文は,存在しないファイルを参照できる。

WRITE

文,

PRINT

文 又

ENDFILE

文 が事前接続されていて存在しないファイルを参照すると,ファイルが生成される。

9.2.2

ファイル探査

外部ファイル中のデータを探査する方法は,順番探査,直接探査 及び 流れ探査の三つとする。処理系は,あるファ

イルに対して二つ以上の探査法を用い,他のファイルに対して一つの探査法だけを用いるようにしてもよい。

9.6

処理系は,磁気テープ上のファイルに対しては,順番探査だけに限るとしてもよい。

許容探査法集合は,ファイル 及び 処理系に依存する。

ファイルの探査法は,ファイルが装置に接続

(

9.4.3

)

される時,又は 事前接続

(

9.4.4

)

されたファイルが生成され

る時に決められる。

9.2.2.1

順番探査

順番探査

(sequential access)

は,外部記録ファイルの記録を順番に探査する方法とする。

順番探査として接続されている場合,外部ファイルは,次の性質をもつ。

(1)

ファイルに対して直接探査が許されていない場合,記録の順序は,その記録が書かれた順序とする。ファイルに

対して直接探査も許されている場合,記録の順序は,直接探査に対して指定された記録番号の順序と同じとする。

この場合,順番探査によって探査される最初の記録は,直接探査における記録番号が

1

である記録とする。順番

探査によって探査される第

2

番目の記録は,直接探査における記録番号が

2

である記録とし,以下同様とする。

ファイルが生成されてから一度も書かれたことのない記録は,読んではならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

148

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

一つのファイルの記録は,すべて書式付き記録であるか 又は すべて書式なし記録であるかのいずれかとする。

ただし,ファイルの最後の記録は,ファイル終了記録であってもよい。直前のファイルの参照が,データ転送出

力文 又は ファイル位置付け文でない限り,ファイルの最後の記録が存在するとき,その記録は,ファイル終了

記録でなければならない。

(3)

このファイルの記録を順番探査入出力文以外によって読んだり書いたりしてはならない。

9.2.2.2

直接探査

直接探査

(direct access)

は,外部記録ファイルの記録を任意の順序で探査する方法とする。

直接探査として接続されている場合,外部ファイルは,次の性質をもつ。

(1)

ファイル中の各記録は,記録番号

(record number)

という正の整数によって一意に識別される。記録の記録番号

は,その記録が書かれた時に指定される。記録の記録番号は,いったん定まると,変えることはできない。記録

の順序は,それらの記録番号の順序とする。

注記

9.7

記録は,消去できないが,書き直すことはできる。

(2)

一つのファイルの記録は,すべて書式付き記録であるか 又は すべて書式なし記録であるかのいずれかとする。

ファイルに対して順番探査も許されている場合,ファイルが直接探査として接続されている間は,ファイル終了

記録が存在しても,ファイルの部分とはみなされない。ファイルに対して順番探査が許されていない場合は,ファ

イルは,ファイル終了記録を含んではならない。

(3)

記録を読んだり書いたりすることは,直接探査入出力文によってだけ行える。

(4)

一つのファイルの記録は,すべて同じ長さをもつ。

(5)

記録は,その記録番号の順序で読んだり書いたりする必要はない。ファイルが装置に接続されている間は,どの

記録でもファイルに書くことができる。

記録

1

及び 記録

2

が書かれていないときでも,記録

3

を書くことが許される。

ファイルが生成されてから書かれた記録であれば,ファイルが装置に接続されていてその接続に対して

READ

文が許されている限り,どの記録でも読むことができる。

(6)

このファイルの記録を,並び書式

(

10.9

)

,変数群書式

(

10.10

)

又は 停留入出力文

(

9.2.3.1

)

を用いて読んだり

書いたりしてはならない。

9.2.2.3

流れ探査

流れ探査

(stream access)

は,外部流れファイルのファイル記憶単位

(

9.2.4

)

を探査する方法とする。

流れ探査として接続されている外部ファイルの性質は,接続が書式なしであるか書式付きであるかに依存する。

書式なし流れ探査として接続されている場合,外部ファイルは,次の性質をもつ。

(1)

ファイル中のファイル記憶単位を読んだり書いたりすることは,流れ探査入出力文によってだけ行える。

(2)

ファイル中の各ファイル記憶単位は,位置という正の整数によって一意に識別される。ファイル中の最初のファ

イル記憶単位の位置は,1とする。それ以降のファイル記憶単位の位置は,それに先行するファイル記憶単位の

位置より1ずつ大きい。

(3)

ファイルの位置付けができる場合,ファイル記憶単位は,その位置の順序で読んだり書いたりする必要はない。

位置

1

及び 位置

2

のファイル記憶単位が書かれていないときでも,位置

3

のファイル記憶単位を書く

ことが許される。

ファイルが生成されてから書かれたファイル記憶単位であれば,ファイルが装置に接続されている間で,その

接続に対して

READ

文が許されている限り,どのファイル記憶単位でも読むことができる。

書式付き流れ探査として接続されている場合,外部ファイルは,次の性質をもつ。

(1)

ファイル中のファイル記憶単位の内容は,記録マーカであってもよい。記録マーカは,流れ構造に加えて,ファ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

149

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

イルに記録構造を与える。ファイルの終わりには,記録マーカがあってもなくてもよい。ファイルの終わりに記

録マーカがない場合,最後の記録は不完全となる。

(2)

これらの記録に対して最大の長さ

(

9.4.5.12

)

は適用されない。

(3)

記録マーカのない空の記録を書くことは,何も効果をもたない。

注記

9.8

記録の構造がファイル自身の中に格納された記録マーカによって決まるので,ファイルの終

わりの不完全な記録は必然的に空ではない。

(4)

ファイル中のファイル記憶単位を読んだり書いたりすることは,書式付き流れ探査入出力文によってだけ行える。

(5)

ファイル中の各ファイル記憶単位は,位置という正の整数によって一意に識別される。ファイル中の最初のファ

イル記憶単位の位置は,1とする。これ以降のファイル記憶単位の位置の関係は,処理系依存とし,すべての正

の整数が実際の位置と対応する必要はない。

(6)

ファイルの位置付けができる場合,そのファイル位置を,前もって

INQUIRE

文の

POS

指定子によって識別さ

れた位置に設定することができる。

注記

9.9

ファイル中に書いた文字数と文字位置が対応しない場合がある。これは,記録マーカとして

復帰,行送りなどの並びをファイルに書いている処理系があるからである。流れ探査として接続

したファイルの中で位置を知る方法は,

INQUIRE

文の

POS

指定子

(

9.9.1.21

)

による。

(7)

処理系は,一部の制御文字

(

3.1

)

が書式付き流れファイルに現れることを禁止してもよい。

9.2.3

ファイル位置

ある種の入出力文の実行は,外部ファイルの位置に影響を与える。ある条件の下では,ファイル位置は,不定とな

りうる。

ファイルの 始点

(initial point)

は,最初の記録 又は ファイル記憶単位の直前の位置とする。ファイルの 終点

(terminal

point)

は,最後の記録 又は ファイル記憶単位の直後の位置とする。ファイルに記録 又は ファイル記憶単位が存在し

ないとき,始点と終点は,同じ位置とする。

記録ファイルが一つの記録内に位置付けられているとき,その記録を 現在記録

(current record)

という。一つの記

録内に位置付けられていないとき,現在記録はない。

n

をファイル中の記録の個数とする。

1

< i

n

であって,かつ ファイルが第

i

番目の記録内に位置付けられてい

るか,又は 第

i

1

番目の記録と第

i

番目の記録との間に位置付けられているとき,第

i

1

番目の記録を 直前記録

(preceding record)

という。

n

1

であって,かつ ファイルが終点に位置付けられているとき,直前記録は,第

n

目の記録であり,最後の記録である。

n

= 0

であるか,ファイルが始点に位置付けられているか,又は 最初の記録内

に位置付けられているとき,直前記録はない。

1

i < n

であって,かつ ファイルが第

i

番目の記録内に位置付けられているか,又は 第

i

番目の記録と第

i

+ 1

番目の記録との間に位置付けられているとき,第

i

+ 1

番目の記録を 直後記録

(next record)

という。

n

1

であっ

て,かつ ファイルが始点に位置付けられているとき,最初の記録を直後記録とする。

n

= 0

であるか,ファイルが終

点に位置付けられているか,又は 第

n

番目(最後)の記録内に位置付けられているとき,直後記録はない。

流れ探査として接続されているファイルでは,ファイル位置は,二つのファイル記憶単位の間,ファイルの始点,

ファイルの終点 又は 不定とする。

9.2.3.1

前進入出力 及び 停留入出力

前進入出力文

(advancing input/output statement)

は,誤り条件が発生しない限り,最後に入出力した記録の後ろ

を記録ファイルのファイル位置とする。

停留入出力文

(nonadvancing input/output statement)

は,現在記録 又は 後続の記録

(

10.7.2)

の中の文字位置を記

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

150

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

録ファイルのファイル位置とすることができる。記録の一部分を参照する停留入出力文を組み合わせることによって,

一連の入出力文で同じ記録を読んだり書いたりできる。可変長記録を入力し,その長さを知ることもできる。停留出

力文がファイルを現在記録に位置付けたまま,さらなる出力文を実行せずにファイルを閉じるか 又は

BACKSPACE

文,

ENDFILE

文 若しくは

REWIND

文をそのファイルに対して実行した場合,その停留出力文が対応する前進出力

文であったのと同じ結果となる。

9.2.3.2

データ転送直前のファイル位置

データ転送直前のファイルの位置付けは,順番探査法,直接探査法 又は 流れ探査法によって異なる。

順番探査での入力において,現在記録があればファイル位置は変化しない。そうでなければ,ファイルは,直後記

録の先頭に位置付けられ,この記録が現在記録となる。直後記録が存在しない場合,又は 現在記録があり,そのファ

イルに対する最後のデータ転送文が出力であった場合,入力を実行してはならない。

ファイルがファイル終了記録を含む場合,そのファイルは,データ転送の直前にファイル終了記録の後ろに位置付

けられていてはならない。ただし,ファイルを位置付けるために,

REWIND

文 又は

BACKSPACE

文を使用するこ

とはできる。

順番探査での出力において,現在記録があれば,ファイル位置は変化せず,現在の記録は最後の記録となる。現在

記録がなければ,直後記録として新しい記録が作られ,これがファイルの最後の記録 かつ 現在記録となり,この記

録の先頭に位置付けられる。

直接探査において,ファイルは,

REC

指定子によって指定された記録の先頭に位置付けられる。この記録が現在記

録となる。

流れ探査において,ファイルは,

POS

指定子によって指定されたファイル記憶単位の直前に位置付けられる。

POS

指定子がない場合,ファイル位置は変わらない。

子データ転送文におけるファイル位置付けは,

9.5.3.7

による。

9.2.3.3

データ転送直後のファイル位置

誤り条件

(

9.10

)

が発生したとき,ファイル位置は,不定となる。誤り条件が発生せず,ファイル終了記録を読んだ

結果としてファイル終了条件

(

9.10

)

が発生したとき,そのファイルは,ファイル終了記録の後ろに位置付けられる。

書式なし流れ探査において,誤り条件が発生しなければ,ファイル位置は変化しない。書式なし流れ探査での出力

において,ファイル位置がそれまでのファイルの終点を越えた場合,そのファイル位置がファイルの終点となる。

注記

9.10

POS

指定子と空の出力並びを指定した書式なし流れ探査出力は,実際にデータを書くことなく,

ファイルの終点を拡張する効果をもちうる。

書式付き流れ探査での出力において,誤り条件が発生しなければ,ファイルの終点は,その文でデータを転送した

最も大きな位置となる。

注記

9.11

出力が

T

形編集記述子 又は

TL

形編集記述子

(

10.7.1.1

)

を含む場合,最も大きな位置が現在

の位置であるとは限らない。

書式付き流れ探査での入力において,ファイル終了条件が発生すると,ファイル位置は変化しない。

停留入力において,誤り条件 及び ファイル終了条件が発生しないで,記録終了条件

(

9.10

)

が発生した場合,その

ファイルは,現在読まれている記録の後ろに位置付けられる。停留入力文において,誤り条件,ファイル終了条件 及

び 記録終了条件が発生しない場合,そのファイル位置は,変化しない。停留出力において,誤り条件が発生しない場

合,ファイル位置は,変化しない。

その他のすべての場合,ファイルは,読まれたり書かれたりした最後の記録の後ろに位置付けられ,その記録は,

直前記録となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

151

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.2.4

ファイル記憶単位

ファイル記憶単位は,流れファイル 又は 書式なし記録ファイルにおける記憶場所の基本的な単位とする。ファイ

ル記憶単位は,流れ探査における位置の単位,書式なしファイルにおける記録長の単位 及び すべての外部ファイル

におけるファイルの大きさの単位とする。

流れファイル 又は 書式なし記録ファイルのすべての値は,整数個のファイル記憶単位を占める。流れファイル 又は

記録ファイルが書式なしであれば,その個数は,同じ型 及び 型パラメタのすべてのスカラ値に対して同じでなけれ

ばならない。その型 及び 型パラメタの項目のために必要なファイル記憶単位の個数は,

INQUIRE

文の

IOLENGTH

指定子

(

9.9.3

)

で知ることができる。

書式なし流れ探査として接続したファイルにおいて,処理系は,任意の型の値を任意の正の整数のファイル位置に

格納することを妨げるような,位置そろえについての制約を設けてはならない。

ファイル記憶単位のビット数は,組込みモジュール

ISO FORTRAN ENV

で定義されている定数

FILE STORAGE SIZE

(

13.8.2.3

)

で与えられる。ファイル記憶単位は,オクテット(

8

ビット)であることが望ましい。

注記

9.12

すべてのデータ値が整数個のファイル記憶単位を占めるという要求は,ファイル記憶単位より

も小さいデータ項目には空白補充が必要であることを意味している。無駄な領域ができないためには,

ファイル記憶単位は小さいことが望ましい。理想的には,空白補充が全く必要とならないようなファ

イル記憶単位を選択するのがよい。大きさが

1

ビットのファイル記憶単位は,この目的を満たしてい

るが,位置そろえの要求から現実的ではない。

位置そろえの制約の禁止は,処理系がファイル記憶単位よりも大きいデータ位置そろえを要求する

ことを禁止している。

ファイル記憶単位としてオクテットを推奨するのは,多くの応用プログラムでの要求に適応するく

らい小さくて,データ位置そろえの要求によって重大な効率問題を引き起こすほどには小さくないと

いう妥協の結果である。

9.3

内部ファイル

内部ファイルは,内部記憶から内部記憶へデータを転送したり変換したりする手段を与える。

内部ファイルは,次の性質をもつ記録ファイルとする。

(1)

ファイルは,基本文字型,

ASCII

文字型 又は

ISO 10646

文字型の変数とする。ただし,ベクトル添字をもった

部分配列であってはならない。

(2)

内部ファイルの一つの記録は,一つのスカラ文字変数とする。

(3)

ファイルがスカラ文字変数である場合,そのファイルは,その変数と同じ長さの,ただ一つの記録からなる。ファ

イルが文字型配列である場合,文字型配列要素の列として扱われる。各配列要素が,そのファイルの一つの記録と

なる。ファイルの中の記録の順序は,配列中の配列要素順序

(

6.2.2.2

)

,又は 部分配列中の配列要素順序

(

6.2.2.3

)

と同じとする。ファイルのすべての記録は同じ長さとし,その配列中の配列要素と同じ長さをもつ。

(4)

内部ファイルの記録は,その記録を書くことによって確定となる。記録に書いた文字数がその記録の長さより小

さい場合,その記録の残りの部分を,空白で補う。書く文字数は,記録の長さを超えてはならない。

(5)

記録が確定となっているときに限り,その記録を読むことができる。

(6)

内部ファイルの記録は,出力文以外の方法によって確定(又は 不定)となりうる。

文字変数は,文字代入文によって確定となりうる。

(7)

内部ファイルは,子データ転送文

(

9.5.3.7

)

の場合を除いて,データ転送に先立って,常に最初の記録の先頭に

位置付けられる。これが現在記録となる。

(8)

接続モード

(

9.4.1

)

の初期値は,対応する指定子を指定していない最初の

OPEN

文で仮定される値となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

152

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(9)

記録を読んだり書いたりすることは,変数群書式を除く順番探査書式付き入出力文によってだけ行える。

(10)

内部ファイルをファイル接続文,ファイル位置付け文 又は ファイル問合せ文に装置として指定してはならない。

9.4

ファイルの接続

装置識別子で指定される 装置

(unit)

は,ファイルを参照するための手段を与える。

R901

装置識別子

is

ファイル装置番号

or

*

or

内部ファイル変数

R902

ファイル装置番号

is

スカラ整数式

R903

内部ファイル変数

is

文字変数

C901

(R903)

文字変数は,ベクトル添字をもった部分配列であってはならない。

C902

(R903)

文字変数は,基本文字型,

ASCII

文字型 又は

ISO 10646

文字型でなければならない。

装置は,外部装置 又は 内部装置とする。外部装置

(external unit)

は,外部ファイルを参照するために使用し,

*

又は ファイル装置番号によって指定する。このときファイル装置番号の値は,負でない値か 又は モジュール

ISO FORTRAN ENV

(

13.8.2

)

の名前付き定数

INPUT UNIT

OUTPUT UNIT

若しくは

ERROR UNIT

の一つと等しい値と

する。内部装置

(internal unit)

は,内部ファイルを参照するために使用し,内部ファイル変数又は ファイル装置番号

によって指定する。このとき,ファイル装置番号の値は,活動状態の派生型入出力手続

(

9.5.3.7

)

の装置引数に等し

くなければならない。ファイル装置番号の値は,正しい装置を識別しなければならない。

スカラ整数式のある値で識別される外部装置は,プログラム内のすべてのプログラム単位で同じとする。

9.13

次の両方のプログラム単位内で使用されている

6

という値は,同じ外部装置を識別する。

SUBROUTINE A

READ (6) X

...

SUBROUTINE B

N = 6

REWIND N

*

は,書式付き順番探査として事前接続された処理系依存の外部装置を識別する

(

9.5.3.2

)

。これらの装置は,組

込みモジュール

ISO FORTRAN ENV

(

13.8.2

)

の名前付き定数

INPUT UNIT

及び

OUTPUT UNIT

で定義した装置番号に

よっても識別される。

この規格では,誤りを通知するために処理系依存の外部装置を識別する。この装置は,書式付き順番探査出力とし

て事前接続していなければならない。処理系は,これを

*

で識別される出力装置と同じと定義してもよい。この装

置は,組込みモジュール

ISO FORTRAN ENV

(

13.8.2

)

の名前付き定数

ERROR UNIT

で定義した装置番号によっても識

別される。

9.4.1

接続モード

書式付き入出力への接続では,空白解釈モード

(

10.7.6

)

,囲み記号モード(

10.9.2

及び

10.10.2.1

参照),符号

モード

(

10.7.4

)

,小数点編集モード

(

10.7.8

)

,入出力丸めモード

(

10.6.1.2.6

)

,空白補充モード

(

9.5.3.4.2

)

及び け

た移動数

(

10.7.5

)

のように,いろいろな変更可能なモードがある。書式なし入出力への接続では,変更可能なモード

はない。

接続モードの値は,接続の開始時に確立する。接続を

OPEN

文で開始する場合,その値は,明示的 又は 暗黙的に

OPEN

文に指定されている。接続を

OPEN

文以外で開始する場合,つまりファイルが内部ファイル 又は 事前接続さ

れたファイルである場合,確立する値は,対応する指定子を指定していない最初の

OPEN

文で仮定された値とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

153

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

けた移動数を

OPEN

文で明示的に指定することはできない。暗黙的に指定される値は,ゼロとする。

外部ファイルとの接続モードは,事後に接続を変更する

OPEN

文で変更できる。

接続モードは,データ転送文で指定した対応する指定子 又は 編集記述子によって一時的に変更できる。指定子は,

そのデータ転送文の実行開始時から有効となる。編集記述子は,書式制御がそこに達したときに有効となる。データ

転送文の実行が終了すると,各モードの値は,そのデータ転送文の実行直前に有効であった値に戻る。

9.4.2

装置の存在

任意の時点において,プログラムに対して 存在する

(exist)

,処理系依存の外部装置の集合がある。

すべての入出力文は,存在する装置を参照できる。

CLOSE

文,

INQUIRE

文 及び

WAIT

文は,存在しない装置を

参照できる。

9.4.3

ファイルと装置との接続

外部装置は,接続されている

(connected)

又は 接続されていないという性質をもつ。接続されているとき,外部装

置は,外部ファイルを参照できる。外部装置は,事前接続 又は

OPEN

文の実行によって接続される。この接続の性

質は,対称とする。すなわち,ファイルが装置に接続されているときに限り,その装置もファイルに接続されている。

OPEN

文,

CLOSE

文,

INQUIRE

文 及び

WAIT

文以外のすべての入出力文は,ファイルを使用し,ファイルに

効果を与えるには,ファイルに接続されている装置を参照しなければならない。

ファイルは,接続されている場合でも,存在しなくてもよい

(

9.2.1

)

9.14

事前接続されているが,まだ書かれていない外部ファイル。

一つの装置を同時に二つ以上のファイルに接続してはならず,一つのファイルを同時に二つ以上の装置に接続して

はならない。ただし,外部装置の状態を変更したり,装置を別のファイルに接続したりすることはできる。

この規格は,言語

C

との相互利用の方法について規定する。

C

のストリームについては,言語

C

の国際規格の

7.19.2

で規定されている。

C

のストリームに接続したファイルに対して装置を接続することができるかどうかは,処理系依

存とする。処理系が

C

のストリームに接続したファイルに対して装置を接続することを可能にしている場合,その

ファイルへの入出力操作を行った結果は,処理系依存とする。装置

INPUT UNIT

OUTPUT UNIT

及び

ERROR UNIT

接続したファイルが,

C

であらかじめ定義されたテキストストリームである標準入力,標準出力 及び 標準エラーに

対応するかどうかは,処理系依存とする。

Fortran

で定義した手続と

Fortran

以外の手段で定義した手続とが同じ外

部ファイルに対して入出力操作を行った結果は,処理系依存とする。

Fortran

で定義した手続と

Fortran

以外の手段

で定義した手続とが異なる外部ファイルに対して入出力操作を行う場合,干渉することはない。

CLOSE

文の実行によって外部装置の接続を解除した後で,その装置を,同じプログラム中で同じファイル 又は 別

のファイルに再び接続してもよい。

CLOSE

文の実行によって外部ファイルの接続を解除した後で,そのファイルを,

同じプログラム中で同じ装置 又は 別の装置に再び接続してもよい。

注記

9.15

接続を解除されたファイルを参照する手段は,

OPEN

文 又は

INQUIRE

文の中の名前による

しかない。したがって,いったん接続を解除された名前なしファイルを再び接続する手段はない。

内部装置は,その装置を識別する変数によって定められた内部ファイルと,常に接続されている。

注記

9.16

ファイル接続の性質についての補足説明は,

C.6.5

を参照。

9.4.4

事前接続

事前接続

(preconnection)

とは,プログラムの実行の始めに装置がファイルに接続されていて,前もって

OPEN

を実行しなくても,入出力文で装置を参照できることをいう。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

154

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.4.5 OPEN

OPEN

(OPEN statement)

は,外部ファイルと指定された装置との間の接続を初期化したり修正したりする。

OPEN

文は,存在するファイルを装置に接続するか,事前接続されているファイルを生成するか,ファイルを生成し

それを装置に接続するか,又は ファイルと装置との間の接続の指定子を変更するのに用いる。

外部装置は,プログラム中のどのプログラム単位内の

OPEN

文の実行によっても接続することができる。一度接

続されると,プログラム中のどのプログラム単位からでも参照できる。

存在するファイルと装置が接続されている場合,その装置に対して

OPEN

文を実行してもよい。その

OPEN

文に

FILE

指定子が指定されていない場合,装置に接続されるファイルは,装置に既に接続されているファイルと同一と

する。

装置に接続されるファイルが存在しないが,それが装置に事前接続されているファイルと同一である場合,

OPEN

文で指定された性質が,その接続の性質の一部となる。

装置に接続されるファイルが,その装置に接続されているファイルと同一でない場合,

OPEN

文の実行の直前に,

その装置に対して

STATUS

指定子のない

CLOSE

文を実行したのと等価とする。

装置に接続されるファイルが,その装置に接続されているファイルと同一である場合,変更可能なモード(

9.4.1

照)の指定子だけは,現在有効になっている値と異なる値であってよい。そのような

OPEN

文に

POSITION

指定子を

書く場合,指定する値はファイルの現在の位置と異なる位置であってはならない。そのような

OPEN

文に

STATUS

定子を書く場合,値は

OLD

を指定しなければならない。そのような

OPEN

文を実行すると,

BLANK

指定子,

DELIM

指定子 又は

PAD

指定子が新しい値となる。そのほかの指定されない指定子 及び ファイル位置は,影響を受けない。

以前に実行された任意の

OPEN

文の

ERR

指定子,

IOSTAT

指定子 及び

IOMSG

指定子は,現在の

OPEN

文の実行

に影響を与えない。

装置に接続されるファイルがその装置に接続されているファイルと同一である場合,

STATUS

指定子を書くときは

常に

OLD

でよい。このとき,

OPEN

文の実行前にファイルの状態が

SCRATCH

であれば,ファイルはまだ

SCRATCH

状態をもっているとみなされ,装置が閉じられる時にファイルは削除される。

ファイルがある装置と接続されている場合,そのファイルを異なる装置に接続する

OPEN

文を実行してはならない。

R904

OPEN

is

OPEN (

接続指定子並び

)

R905

接続指定子

is

[

UNIT =

]

ファイル装置番号

or

ACCESS =

スカラ基本文字式

or

ACTION =

スカラ基本文字式

or

ASYNCHRONOUS =

スカラ基本文字式

or

BLANK =

スカラ基本文字式

or

DECIMAL =

スカラ基本文字式

or

DELIM =

スカラ基本文字式

or

ENCODING =

スカラ基本文字式

or

ERR =

文番号

or

FILE =

ファイル名記述式

or

FORM =

スカラ基本文字式

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

or

PAD =

スカラ基本文字式

or

POSITION =

スカラ基本文字式

or

RECL =

スカラ整数式

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

155

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

ROUND =

スカラ基本文字式

or

SIGN =

スカラ基本文字式

or

STATUS =

スカラ基本文字式

R906

ファイル名記述式

is

スカラ基本文字式

R907

入出力メッセージ変数

is

スカラ基本文字変数

C903

(R905)

指定子は,接続指定子並びに

2

回以上指定してはならない。

C904

(R905)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,接続指定子並びの最初の項目でなければならない。

C905

(R905) ERR

指定子に指定する文番号は,その

OPEN

文と同じ有効域内の飛び先文の文番号でなければ

ならない。

STATUS

指定子に,

NEW

又は

REPLACE

を指定した場合,

FILE

指定子も書かなければならない。

STATUS

指定子

SCRATCH

を指定した場合,

FILE

指定子を書いてはならない。

STATUS

指定子に

OLD

を指定した場合,装置が現

在接続されていて かつ 接続先のファイルが存在するとき以外は,

FILE

指定子も書かなければならない。

スカラ基本文字式のとりうる値は決まっている。これらの値は,各指定子ごとに規定されている。スカラ基本文字

式の値内の後ろに続く空白(後続空白)は,無視される。英大文字と英小文字とは,値として区別されない。幾つか

の指定子は,暗黙の値をもつ。

IOSTAT

指定子,

ERR

指定子 及び

IOMSG

指定子は,

9.10

で規定する。

9.17

OPEN

文の例を次に示す。

OPEN (10, FILE = ’employee.names’, ACTION = ’READ’, PAD = ’YES’)

注記

9.18

OPEN

文についての補足説明は,

C.6.4

を参照。

9.4.5.1 OPEN

文の

ACCESS

指定子

スカラ基本文字式の値は,

SEQUENTIAL

DIRECT

又は

STREAM

でなければならない。

ACCESS

指定子は,ファイル

の接続がそれぞれ順番探査 , 直接探査 又は 流れ探査であることを指定する。この指定子を省略すると,

SEQUENTIAL

が想定される。ファイルが存在する場合,指定する探査法は,そのファイルに対する許容探査法集合中のいずれかで

なければならない。新しいファイルに対し,処理系は,指定された探査法を含む許容探査法集合をもつファイルを生

成する。

9.4.5.2 OPEN

文の

ACTION

指定子

スカラ基本文字式の値は,

READ

WRITE

又は

READWRITE

でなければならない。

READ

は,

WRITE

, PRINT

又は

ENDFILE

文が,この接続を参照してはならないことを指定する。

WRITE

は,

READ

文がこの接続を参照して

はならないことを指定する。

READWRITE

は,任意の入出力文がこの接続を参照できることを指定する。この指定子を

省略すると,処理系依存の値が想定される。

READWRITE

がそのファイルに対する許容操作集合に含まれているとき,

READ

WRITE

もそのファイルに対する許容操作集合に含まれていなければならない。存在するファイルに対して,そ

の操作は,そのファイルに対する許容操作集合に含まれていなければならない。新しいファイルに対して,処理系は,

その操作を含む許容操作集合をもつファイルを生成する。

9.4.5.3 OPEN

文の

ASYNCHRONOUS

指定子

スカラ基本文字式の値は,

YES

又は

NO

でなければならない。

YES

を指定した場合,その装置に非同期の入出力が

行える。

NO

を指定した場合,その装置に非同期の入出力は行えない。この指定子を省略すると,

NO

が想定される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

156

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.4.5.4 OPEN

文の

BLANK

指定子

スカラ基本文字式の値は,

NULL

又は

ZERO

でなければならない。

BLANK

指定子は,書式付き入出力として接続さ

れるファイルに対してだけ指定できる。この指定子は,この接続での入力における空白解釈モード

(

10.7.6

9.5.1.5

)

の現在の値を指定する。このモードは,出力に対しては影響がない。このモードは,変更可能なモード

(

9.4.1

)

とす

る。接続を開始する

OPEN

文でこの指定子を省略すると,

NULL

が想定される。

9.4.5.5 OPEN

文の

DECIMAL

指定子

スカラ基本文字式の値は,

COMMA

又は

POINT

でなければならない。

DECIMAL

指定子は,書式付き入出力として

接続されるファイルに対してだけ指定できる。この指定子は,この接続での小数編集モード

(

10.7.8

9.5.1.6

)

の現

在の値を指定する。このモードは,変更可能なモード

(

9.4.1

)

とする。接続を開始する

OPEN

文でこの指定子を省略

すると,

POINT

が想定される。

9.4.5.6 OPEN

文の

DELIM

指定子

スカラ基本文字式の値は,

APOSTROPHE

QUOTE

又は

NONE

でなければならない。

DELIM

指定子は,書式付き入出

力として接続されるファイルに対してだけ指定できる。この指定子は,この接続での並び出力

(

10.9.2

)

及び 変数群

出力

(

10.10.2.1

)

に対する囲み記号モード

(

9.5.1.7

)

の現在の値を指定する。このモードは,入力に対しては影響が

ない。このモードは,変更可能なモード

(

9.4.1

)

とする。接続を開始する

OPEN

文でこの指定子を省略すると,

NONE

が想定される。

9.4.5.7 OPEN

文の

ENCODING

指定子

スカラ基本文字式の値は,

UTF-8

又は

DEFAULT

でなければならない。

ENCODING

指定子は,書式付き入出力とし

て接続されるファイルに対してだけ指定できる。

UTF-8

を指定すると,ファイルの符号化方式は,

JIS X 0221-1

: 2001

で規定されている

UTF-8

となる。このようなファイルを

Unicode

ファイルといい,その中のすべての文字は

ISO 10646

文字型とする。処理系が

ISO 10646

文字型を扱えない場合は,

UTF-8

を指定してはならない。

DEFAULT

を指定すると,

ファイルの符号化方式は,処理系依存となる。この指定子を省略すると,

DEFAULT

が想定される。

9.4.5.8 OPEN

文の

FILE

指定子

FILE

指定子の値は,指定した装置に接続するファイルの名前とする。後続空白は,無視される。ファイル名記述

式は,処理系で許される名前でなければならない。この指定子を省略し,装置がファイルと接続されていない場合,

STATUS

指定子には,

SCRATCH

を指定しなければならない。この場合,処理系依存のファイルを接続する。英大文字,

英小文字の解釈は,処理系依存とする。

9.4.5.9 OPEN

文の

FORM

指定子

スカラ基本文字式の値は,

FORMATTED

又は

UNFORMATTED

でなければならない。

FORM

指定子は,ファイルをそれ

ぞれ書式付き入出力文 又は 書式なし入出力文として接続することを指定する。この指定子を省略すると,ファイルが

直接探査 又は 流れ探査として接続されるならば

UNFORMATTED

,順番探査として接続されるならば

FORMATTED

が想定

される。存在するファイルに対して指定する記録形は,そのファイルに対する許容記録形集合内のいずれかでなけれ

ばならない。新しいファイルに対し,処理系は,指定された記録形を含む許容記録形集合をもつファイルを生成する。

9.4.5.10 OPEN

文の

PAD

指定子

スカラ基本文字式の値は,

YES

又は

NO

でなければならない。

PAD

指定子は,書式付き入出力として接続される

ファイルに対してだけ指定できる。この指定子は,この接続での入力に対する空白補充モード

(

9.5.3.4.2

9.5.1.9

)

の現在の値を指定する。このモードは,出力に対しては影響がない。このモードは,変更可能なモード

(

9.4.1

)

とす

る。接続を開始する

OPEN

文でこの指定子を省略すると,

YES

が想定される。

注記

9.19

非基本文字型に対して補われる空白文字は,処理系依存とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

157

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.4.5.11 OPEN

文の

POSITION

指定子

スカラ基本文字式の値は,

ASIS

REWIND

又は

APPEND

でなければならない。ファイルの接続は,順番探査 又は 流

れ探査でなければならない。新しいファイルの場合,その始点に位置付けられる。

REWIND

を指定すると,存在する

ファイルの始点に位置付けられる。存在するファイルにファイル終了記録が存在する場合に

APPEND

を指定すると,

ファイル終了記録が直後記録となるように位置付けられる。存在するファイルにファイル終了記録が存在しない場合

APPEND

を指定すると,終点に位置付けられる。ファイルが存在し,既に接続されている場合に

ASIS

を指定する

と,位置は変わらない。ファイルが存在していても接続されていない場合,

ASIS

の位置付けは無視される。この指定

子を省略すると,

ASIS

が想定される。

9.4.5.12 OPEN

文の

RECL

指定子

RECL

指定子の値は,正の値でなければならない。この指定子は,直接探査として接続されるファイルの場合,そ

の記録の長さを指定し,順番探査として接続されるファイルの場合,その記録の最大の長さを指定する。ファイルが

流れ探査として接続される場合,この指定子を書いてはならない。この指定子は,ファイルが直接探査として接続さ

れる場合,必ず書かなければならない。ファイルが順番探査として接続され,この指定子を省略した場合,記録の長

さは,処理系依存とする。ファイルが書式付き入出力として接続される場合,長さは,基本文字型の文字だけを含む

記録全部に対する文字の個数とする。記録が基本文字型以外の文字を含む場合,適切な

RECL

指定子の値は,処理

系依存とする。ファイルが書式なし入出力として接続される場合,長さは,ファイル記憶単位で測られる。存在する

ファイルに対する

RECL

指定子の値は,そのファイルに対する許容記録長集合に含まれていなければならない。新し

いファイルに対して,処理系は,指定された値を含む許容記録長集合をもつファイルを生成する。

9.4.5.13 OPEN

文の

ROUND

指定子

スカラ基本文字式の値は,

UP

DOWN

ZERO

NEAREST

COMPATIBLE

又は

PROCESSOR DEFINED

のいずれかでなけ

ればならない。

ROUND

指定子は,書式付き入出力として接続されるファイルに対してだけ指定できる。この指定子

は,この接続に対する入出力丸めモード

(

10.6.1.2.6

9.5.1.12

)

の現在の値を指定する。このモードは,変更可能な

モード

(

9.4.1

)

とする。接続を開始する

OPEN

文でこの指定子を省略すると,入出力モードは処理系依存となる。た

だし,上で述べたモードのいずれかでなければならない。

注記

9.20

処理系は,暗黙のモードとしてどの入出力丸めモードを選択してもよい。そのモードは,

UP

DOWN

ZERO

NEAREST

又は

COMPATIBLE

に対応してもよいし,全く別の入出力丸めモードであって

もよい。

9.4.5.14 OPEN

文の

SIGN

指定子

スカラ基本文字式の値は,

PLUS

SUPPRESS

又は

PROCESSOR DEFINED

のいずれかでなければならない。

SIGN

定子は,書式付き入出力として接続されるファイルに対してだけ指定できる。この指定子は,接続に対する符号モー

(

10.7.4

9.5.1.13

)

の現在の値を指定する。このモードは,変更可能なモード

(

9.4.1

)

とする。接続を開始する

OPEN

文でこの指定子を省略すると,

PROCESSOR DEFINED

が想定される。

9.4.5.15 OPEN

文の

STATUS

指定子

スカラ基本文字式の値は,

OLD

NEW

SCRATCH

REPLACE

又は

UNKNOWN

でなければならない。

OLD

を指定した場

合,ファイルは,存在しなければならない。

NEW

を指定した場合,ファイルは,存在していてはならない。

NEW

を指定した

OPEN

文の実行が成功すると,ファイルが生成され,状態が

OLD

に変更される。

REPLACE

を指定

し,ファイルがまだ存在しない場合,ファイルが生成され,状態が

OLD

に変更される。

REPLACE

を指定し,かつ ファ

イルが存在する場合,そのファイルは削除され,新しいファイルが同じ名前で生成され,状態が

OLD

に変更される。

SCRATCH

を指定した場合,ファイルが生成され,プログラムで使えるように装置と接続されるが,同じ装置を参照す

CLOSE

文の実行,又は プログラムの終了によって削除される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

158

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

9.21

SCRATCH

は,名前付きファイルには指定できない。

UNKNOWN

を指定した場合,状態は,処理系依存とする。この指定子を省略すると,

UNKNOWN

が想定される。

9.4.6 CLOSE

CLOSE

(CLOSE statement)

は,外部ファイルと装置との接続を終了させるのに用いる。

装置に対する

CLOSE

文の実行は,プログラム中のどのプログラム単位で行ってもよく,その装置に対して

OPEN

文を実行したプログラム単位と同一である必要はない。

CLOSE

文の実行は,指定した装置に対して実行中の非同期データ転送があると,待機操作を行う。

存在しない装置 又は ファイルと接続されていない装置を指定した

CLOSE

文の実行は,ファイルに影響を与えない。

CLOSE

文の実行によって装置の接続を解除した後で,その装置を,同じプログラム中で同じファイル 又は 別の

ファイルに再び接続してもよい。

CLOSE

文の実行によって名前付きファイルの接続を解除した後で,そのファイル

が存在する間,そのファイルを,同じプログラム中で同じ装置 又は 別の装置に再び接続してもよい。

プログラムの実行が正常に終了するとき,接続されているすべての装置は,閉じられる。それぞれの装置は,

KEEP

の状態で閉じられる。ただし,実行が終了する直前のファイル状態が

SCRATCH

であるときには,

DELETE

の状態で閉

じられる。

注記

9.22

この効果は,接続されているそれぞれの状態に対し,

STATUS

指定子のない

CLOSE

文を実行

したのと同じとする。

R908

CLOSE

is

CLOSE (

解除指定子並び

)

R909

解除指定子

is

[

UNIT =

]

ファイル装置番号

or

IOSTAT =

スカラ整変数

or

IOMSG =

入出力メッセージ変数

or

ERR =

文番号

or

STATUS =

スカラ基本文字式

C906

(R909)

指定子は,解除指定子並びに

2

回以上指定してはならない。

C907

(R909)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,解除指定子並びの最初の項目でなければならない。

C908

(R909) ERR

指定子に指定する文番号は,その

CLOSE

文と同じ有効域内の飛び先文の文番号でなけれ

ばならない。

スカラ基本文字式のとりうる値は決まっている。スカラ基本文字式の値内の後続空白は,無視される。大文字と小

文字とは,値として区別されない。

IOSTAT

指定子,

ERR

指定子 及び

IOMSG

指定子は,

9.10

で規定する。

9.23

CLOSE

文の例を次に示す。

CLOSE (10, STATUS = ’KEEP’)

注記

9.24

CLOSE

文についての補足説明は,

C.6.6

を参照。

9.4.6.1 CLOSE

文の

STATUS

指定子

スカラ基本文字式の値は,

KEEP

又は

DELETE

でなければならない。

STATUS

指定子は,指定された装置に接続し

ているファイルの後処理を決定する。

KEEP

は,

CLOSE

文の実行直前の状態が

SCRATCH

であるファイルに指定して

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

159

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

はならない。存在するファイルに対して

KEEP

を指定すると,そのファイルは,

CLOSE

文の実行後も存在する。存在

しないファイルに対して

KEEP

を指定すると,そのファイルは,

CLOSE

文の実行後も存在しない。

DELETE

を指定す

ると,

CLOSE

文の実行後は,ファイルが存在しなくなる。この指定子を省略すると,

KEEP

が想定される。ただし,

CLOSE

文の実行直前のファイル状態が

SCRATCH

の場合は,

DELETE

となる。

9.5

データ転送文

READ

(READ statement)

は,データ転送入力文とする。

WRITE

(WRITE statement)

及び

PRINT

(PRINT statement)

は,データ転送出力文とする。

R910

READ

is

READ (

データ転送指定子並び

)

[

入力項目並び

]

or

READ

書式識別子

[

,

入力項目並び

]

R911

WRITE

is

WRITE (

データ転送指定子並び

)

[

出力項目並び

]

R912

PRINT

is

PRINT

書式識別子

[

,

出力項目並び

]

9.25

データ転送文の例を次に示す。

READ (6, *) SIZE

READ 10, A, B

WRITE (6, 10) A, S, J

PRINT 10, A, S, J

10 FORMAT (2E16.3, I5)

9.5.1

制御情報並び

制御情報並び

(control information list)

は,データ転送指定子並びとする。制御情報並びは,データの転送を制御

する。

R913

データ転送指定子

is

[

UNIT =

]

装置識別子

or

[

FMT =

]

書式識別子

or

[

NML =

]

変数群名

or

ADVANCE =

スカラ基本文字式

or

ASYNCHRONOUS =

スカラ文字初期値式

or

BLANK =

スカラ基本文字式

or

DECIMAL =

スカラ基本文字式

or

DELIM =

スカラ基本文字式

or

END =

文番号

or

EOR =

文番号

or

ERR =

文番号

or

ID =

スカラ整変数

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

or

PAD =

スカラ基本文字式

or

POS =

スカラ整数式

or

REC =

スカラ整数式

or

ROUND =

スカラ基本文字式

or

SIGN =

スカラ基本文字式

or

SIZE =

スカラ整変数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

160

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C909

(R913)

指定子は,データ転送指定子並びに

2

回以上指定してはならない。

C910

(R913)

装置識別子は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,装置

識別子は,データ転送指定子並びの最初の項目でなければならない。

C911

(R913) DELIM

指定子 及び

SIGN

指定子は,

READ

文に指定してはならない。

C912

(R913) BLANK

指定子,

PAD

指定子,

END

指定子,

EOR

指定子 及び

SIZE

指定子は,

WRITE

文に

指定してはならない。

C913

(R913) ERR

指定子,

EOR

指定子 及び

END

指定子の文番号は,このデータ転送文と同じ有効域内の

飛び先文の文番号でなければならない。

C914

(R913)

変数群名は,変数群の名前でなければならない。

C915

(R913)

変数群名は,入力項目並び 又は 出力項目並びがデータ転送文に指定されている場合,指定して

はならない。

C916

(R913)

データ転送指定子並びに,

FMT

指定子と

NML

指定子を共に指定することはできない。

C917

(R913)

先行する

FMT=

を省略して書式識別子を指定する場合,書式識別子は,データ転送指定子並びの

2

番目の項目でなければならず,そのとき最初の項目は,装置識別子でなければならない。

C918

(R913)

先行する

NML=

を省略して変数群名を指定する場合,変数群名は,データ転送指定子並びの

2

目の項目でなければならず,そのとき最初の項目は,装置識別子でなければならない。

C919

(R913)

装置識別子がファイル装置番号でない場合,データ転送指定子並びに

REC

指定子 及び

POS

定子を指定することはできない。

C920

(R913) REC

指定子を指定する場合,

END

指定子 及び 変数群名を指定してはならず,書式仕様に星印

を指定してはならない。

C921

(R913) ADVANCE

指定子は,制御情報並びに装置識別子として内部ファイル変数を含まず,明示的な

書式仕様

(

10.1

)

をもつ,書式付き順番探査 又は 流れ探査入出力文にだけ指定できる。

C922

(R913) EOR

指定子を指定する場合,

ADVANCE

指定子も指定しなければならない。

C923

(R913) SIZE

指定子を指定する場合,

ADVANCE

指定子も指定しなければならない。

C924

(R913) ASYNCHRONOUS

指定子のスカラ文字初期値式は,基本文字型でなければならず,値が

YES

又は

NO

でなければならない。

C925

(R913)

装置識別子がファイル装置番号でない場合,

ASYNCHRONOUS

指定子に

YES

を指定してはな

らない。

C926

(R913) ID

指定子を指定する場合,

YES

を指定した

ASYNCHRONOUS

指定子もなければならない。

C927

(R913) POS

指定子を指定する場合,データ転送指定子並びに

REC

指定子を指定してはならない。

C928

(R913) DECIMAL

指定子,

BLANK

指定子,

PAD

指定子,

SIGN

指定子 又は

ROUND

指定子を指定

する場合,書式識別子 又は 変数群名も指定しなければならない。

C929

(R913) DELIM

指定子を指定する場合,星印である書式識別子 又は 変数群名も指定しなければなら

ない。

SIZE

指定子は,

ADVANCE

指定子の値が

NO

である

READ

文にだけ指定できる。

EOR

指定子は,

ADVANCE

指定子の値が

NO

である

READ

文にだけ指定できる。

データ転送文が書式識別子 又は 変数群名を含んでいる場合,その文を 書式付き入出力文

(formatted input/output

statement)

という。そうでない場合,書式なし入出力文

(unformatted input/output statement)

という。

ADVANCE

指定子,

ASYNCHRONOUS

指定子,

DECIMAL

指定子,

BLANK

指定子,

DELIM

指定子,

PAD

定子,

SIGN

指定子 及び

ROUND

指定子がとりうる文字値は決まっている。スカラ基本文字式の値内の後続空白は,

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

161

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

無視される。英大文字と英小文字とは,値として区別されない。

IOSTAT

指定子,

ERR

指定子,

EOR

指定子,

END

指定子 及び

IOMSG

指定子は,

9.10

で規定する。

9.26

READ

文の例を次に示す。

READ (IOSTAT = IOS, UNIT = 6, FMT = ’(10F8.2)’) A, B

9.5.1.1

データ転送文の

FMT

指定子

FMT

指定子には,書式仕様 又は 書式付き入出力文のための並び書式を指定する。

R914

書式識別子

is

基本文字式

or

文番号

or

*

C930

(R914)

文番号は,この

FMT

指定子を含む有効域内の

FORMAT

文の文番号でなければならない。

基本文字式の値は,有効な書式仕様

(

10.1.1

10.1.2

)

でなければならない。

注記

9.27

基本文字式は,文字定数でもよい。

基本文字式が配列の場合,すべての配列要素を配列要素順序に従って連結したものとして処理される。

書式識別子として

*

をもつ入出力文を,並び入出力文

(list-directed input/output statement)

という。

9.28

書式識別子が文字式である例を次に示す。ここで,

CHAR FMT

は,基本文字変数とする。

READ (6, FMT = "(" // CHAR_FMT // ")" ) X, Y, Z

9.5.1.2

データ転送文の

NML

指定子

NML

指定子には,変数群名

(

5.4

)

を指定する。この変数群名は,転送を行うデータ実体の集団を識別する。

変数群名を指定した入出力文を,変数群入出力文

(namelist input/output statement)

という。

9.5.1.3

データ転送文の

ADVANCE

指定子

スカラ基本文字式の値は,

YES

又は

NO

でなければならない。

ADVANCE

指定子は,その子入出力文でない入出力

文が前進入出力を行うかどうかを指定する。

YES

を指定すると,前進入出力が行われる。

NO

を指定すると,停留入出

力が行われる

(

9.2.3.1

)

。指定が可能な子入出力文でない入出力文でこの指定を省略すると,

YES

が想定される。書式

付きの子入出力文は停留入出力文であり,

ADVANCE

指定子は無視される。

9.5.1.4

データ転送文の

ASYNCHRONOUS

指定子

ASYNCHRONOUS

指定子は,その入出力文が同期か非同期かを指定する。

YES

を指定したとき,その文 及び 入

出力操作は非同期とする。

NO

を指定するか 又は この指定子を省略したとき,その文 及び 入出力操作は同期とする。

非同期入出力は,

OPEN

文の

ASYNCHRONOUS

指定子に

YES

を指定して開いた外部ファイルに対してだけ許さ

れる。

注記

9.29

ASYNCHRONOUS

指定子に

YES

を指定して開いたファイルに対しては,同期入出力 及び 非

同期入出力の両方ができる。その他のファイル,すなわち

ASYNCHRONOUS

指定子に

NO

を指定し

て開いたファイル,

ASYNCHRONOUS

指定子を省略して開いたファイル,

OPEN

文なしで参照す

る事前接続したファイル 及び 内部ファイルに対しては,同期入出力だけができる。

データ転送文の

ASYNCHRONOUS

指定子の値は,コンパイラの最適化に影響するために翻訳時

に既知である必要があるので,初期値式とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

162

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

処理系は,非同期データ転送の操作を非同期に行うことができるが,それを要求されているわけではない。外部ファ

イルに対して非同期データ転送文で読み書きされた記録 及び ファイル記憶単位は,データ転送文が同期であった場

合と同じ順序で読み書きされ取り扱われる。

非同期データ転送文で変数を次のいずれかに指定した場合,そのデータ参照の実体には,そのデータ転送文の有効

域内で暗黙的に

ASYNCHRONOUS

属性が与えられる。この属性は,明示的な宣言で確定することができる。

(1)

入出力項目並び

(2)

変数群要素

(3)

SIZE

指定子

非同期入出力文を実行すると,項目の並び 又は

NML

指定子に指定した記憶単位の組,及び

SIZE

指定子に指定し

た記憶単位が,そのデータ転送操作に対して未了である入出力記憶列で確定となる。

注記

9.30

未了である入出力記憶列は,記憶単位の連続した組である必要はない。

未了入出力記憶列の作用子

(affector)

は,いずれかの部分が未了である入出力記憶列の記憶単位と結合している変

数とする。

9.5.1.5

データ転送文の

BLANK

指定子

スカラ基本文字式の値は,

NULL

又は

ZERO

でなければならない。

BLANK

指定子は,その接続の空白解釈モード

(

10.7.6

9.4.5.4

)

を一時的に変更する

(

9.4.1

)

。この指定子を省略すると,モードは変更されない。

9.5.1.6

データ転送文の

DECIMAL

指定子

スカラ基本文字式の値は,

COMMA

又は

POINT

でなければならない。

DECIMAL

指定子は,その接続の小数編集モー

(

10.7.8

9.4.5.5

)

を一時的に変更する

(

9.4.1

)

。この指定子を省略すると,モードは変更されない。

9.5.1.7

データ転送文の

DELIM

指定子

スカラ基本文字式の値は,

APOSTROPHE

QUOTE

又は

NONE

でなければならない。

DELIM

指定子は,その接続の囲

み記号モード

(

10.9.2

10.10.2.1

9.4.5.6

)

を一時的に変更する

(

9.4.1

)

。この指定子を省略すると,モードは変更

されない。

9.5.1.8

データ転送文の

ID

指定子

ID

指定子のある非同期データ転送文の実行が成功すると,

ID

指定子に指定した変数は,処理系依存の値で確定と

なる。この値は,データ転送操作の識別子として参照される。後続する

WAIT

文 又は

INQUIRE

文で,特定のデー

タ転送操作を識別するために使用することができる。

ID

指定子のあるデータ転送文の実行中に誤りが発生すると,

ID

指定子に指定した変数は不定となる。

ID

指定子を子データ転送文に指定することはできない。

9.5.1.9

データ転送文の

PAD

指定子

スカラ基本文字式の値は,

YES

又は

NO

でなければならない。

PAD

指定子は,その接続の空白補充モード

(

9.5.3.4.2

9.4.5.10

)

を一時的に変更する

(

9.4.1

)

。この指定子を省略すると,モードは変更されない。

9.5.1.10

データ転送文の

POS

指定子

POS

指定子は,ファイル記憶単位の中のファイル位置を指定する。この指定子は,流れ探査として接続した装置を

指定している場合だけ,データ転送文に指定することができる。この指定子を,子データ転送文に指定することはで

きない。

処理系は,ランダムな位置付けに必要な機能をもたない特定のファイルについて,

POS

指定子の使用を制限するこ

とができる。処理系はまた,ファイルが該当する位置付けに必要な機能をもたない場合,現在のファイル位置よりも

前のファイル位置に位置付けることを禁止することができる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

163

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

9.31

装置 又は データストリームに接続したファイルは,位置付け可能にはならない。

ファイルが書式付き流れ探査として接続している場合,

POS

指定子で指定したファイル位置は,ファイルの始まり

である

1

又は そのファイルへの

INQUIRE

文の

POS

指定子で事前に戻された値に等しくなければならない。

9.5.1.11

データ転送文の

REC

指定子

REC

指定子は,読んだり書いたりする記録の番号を指定する。この指定子は,直接探査として接続されている装

置を指定した入出力文にだけ指定でき,子データ転送文には指定できない。制御情報並びが

REC

指定子を含んでい

る場合,その文を 直接探査入出力文

(direct access input/output statement)

という。親が直接探査データ転送文のと

き,子データ転送文は,直接探査データ転送文とする。これら以外のデータ転送文を,順番探査入出力文

(sequential

access input/output statement)

又は 流れ探査入出力文

(stream access input/output statement)

という。

9.5.1.12

データ転送文の

ROUND

指定子

スカラ基本文字式の値は,

9.4.5.13

で規定した値の一つでなければならない。

ROUND

指定子は,その接続の入

出力丸めモード

(

10.6.1.2.6

9.4.5.13

)

を一時的に変更する

(

9.4.1

)

。この指定子を省略すると,モードは変更され

ない。

9.5.1.13

データ転送文の

SIGN

指定子

スカラ基本文字式の値は,

PLUS

SUPPRESS

又は

PROCESSOR DEFINED

でなければならない。

SIGN

指定子は,そ

の接続の符号モード

(

10.7.4

9.4.5.14

)

を一時的に変更する

(

9.4.1

)

。この指定子を省略すると,モードは変更され

ない。

9.5.1.14 SIZE

指定子

同期停留入力文が終了したとき,

SIZE

指定子で指定した変数の値は,その入力文の実行中に,データ編集記述子

によって転送された文字数で確定となる。処理系が補った空白(

9.5.3.4.2

参照)は,文字数として数えない。

非同期停留入力では,

SIZE

指定子で指定した記憶単位は,対応する待機操作が実行されたときに転送された文字

数で確定となる。

9.5.2

データ転送入出力項目並び

入出力項目並びは,そのデータ転送入出力文で値が転送されるデータ要素を指定する。

R915

入力項目

is

変数

or

入出力

DO

形反復

R916

出力項目

is

or

入出力

DO

形反復

R917

入出力

DO

形反復

is

(

入出力

DO

形項目並び

,

入出力

DO

制御

)

R918

入出力

DO

形項目

is

入力項目

or

出力項目

R919

入出力

DO

制御

is

DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

C931

(R915)

入力項目の変数は,大きさ引継ぎの全体配列であってはならない。

C932

(R915)

入力項目の変数は,手続ポインタであってはならない。

C933

(R919) DO

変数は,整数型の名前付きスカラ変数でなければならない。

C934

(R918)

入力項目並びにおける入出力

DO

形項目は,入力項目でなければならない。出力項目並びにおけ

る入出力

DO

形項目は,出力項目でなければならない。

C935

(R916)

出力項目の式の値は,手続ポインタであってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

164

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

入力項目は,その入力項目を含む入出力

DO

形反復内の

DO

変数 又は その

DO

変数と結合された実体であっては

ならない。

注記

9.32

定数,演算子 若しくは 関数引用を含む式 又は 括弧に囲まれた式は,出力項目に指定すること

はできるが,入力項目に指定することはできない。

入力項目がポインタの場合,ポインタは,確定可能な指示先に結合されていなければならず,データは,ファイル

から結合された指示先に転送される。出力項目がポインタの場合,ポインタは,指示先に結合されていなければなら

ず,データは,指示先からファイルに転送される。

注記

9.33

データ転送は,通常,ファイルと内部記憶場所との間での値の移動を引き起こす。このとき,ポ

インタは,読込みも書出しもできない。すなわち,ポインタは,

(入力での)値を受け取れる指示先 又

は(出力での)値を引き渡せる指示先と結合しているときを除いて,入出力項目並びの項目として現

れてはならない。

入力項目 又は 出力項目が割付け可能な場合,割り付けられていなければならない。

並び項目は,利用者定義の派生型入出力手続

(

9.5.3.7

)

で処理される場合を除いて,多相的であってはならない。

ほかの入出力

DO

形反復を含む入出力

DO

形反復の

DO

変数は,含まれるほうの入出力

DO

形反復の

DO

変数に

現れたり結合されたりしていてはならない。

次に示す入出力並び項目を展開するかどうかについての規則は,その規則がそれ以上適用できなくなるまで,展開

した各並び項目に対して繰り返し適用される。

入出力項目として配列を指定した場合,配列要素順序

(

6.2.2.2

)

の順序で,すべての配列要素が指定されたかのよ

うに扱われる。ただし,入力では,その配列のどの要素も,その入力項目中の式の値に影響を及ぼしてはならず,一

つの入力項目について高々

1

回しか指定してはならない。

9.34

配列の入力

INTEGER A (100), J (100)

...

READ *, A (A)

!

禁止。

READ *, A (LBOUND (A, 1) : UBOUND (A, 1))

!

許される。

READ *, A (J)

!

配列

J

の要素の中に同じ値を

!

もつものがなければ,許される。

A(1) = 1; A(10) = 10

READ *, A (A (1)

A (10))

!

禁止。

書式なし入出力文の派生型の並び項目が利用者定義の派生型入出力手続

(

9.5.3.7

)

で処理されず,その並び項目の

部分実体が利用者定義の派生型入出力手続で処理される場合,その並び項目は,実体のすべての成分が並びに成分順

(

4.5.3.5

)

で指定されているものとして扱われる。これらの成分は,その入出力文と同じ有効域内で参照可能とす

るが,ポインタ 又は 割付け成分であってはならない。

書式なし入出力文の有効な入出力項目並びに派生型を指定した場合,その並び項目 又は 部分実体が利用者定義の

派生型入出力手続

(

9.5.3.7

)

で処理されない限り,処理系依存の形をした一つの値として扱われる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

165

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

9.35

書式なし入出力文中の入出力項目並びに派生型実体を指定することは,その成分の並びを指定

することに等しいとは限らない。

派生型の入出力項目を伴う書式なし入出力は,

(配列のような)集合的な入出力項目がその成分を展

開した並びに等しいという規則に対する,ただ一つの例外になる。この例外によって,処理系は,大

幅な自由度をもって効率を上げ,又は 派生型実体についての処理系依存の値の列と,

Fortran

以外の

手段で使用する複合実体の値の列とを一致させることができる。しかし,書式付き入出力のすべての

入出力項目,及び 書式なし入出力の派生型以外の入出力項目は,通常の規則に従う。

書式付き入出力文の派生型の並び項目が利用者定義の派生型入出力手続で処理されない場合,その並び項目は,実

体のすべての成分が並びに成分順序で指定されているものとして扱われる。これらの成分は,その入出力文と同じ有

効域内で参照可能とするが,ポインタ 又は 割付け成分であってはならない。

派生型の並び項目がその個々の成分の並びとして扱われない場合,その並び項目が利用者定義の派生型入出力手続

で処理されない限り,その並び項目の最終的成分は,

POINTER

属性 又は

ALLOCATABLE

属性をもっていてはな

らない。

データ転送文の並び項目をこの箇条にある配列 及び 派生型の並び項目についての規則に従って展開した結果のス

カラ実体を, 有効項目

(effective item)

という。大きさゼロの配列 及び 繰返し数ゼロの入出力

DO

形反復は,有効並

び項目とならない。長さゼロのスカラ文字項目は,有効並び項目となる。

注記

9.36

書式付き入出力文で,編集記述子は,有効並び項目と結合し,それは常にスカラとする。

9.5.2

の規則は,文中の実並び項目に対応する有効並び項目の組を決定する。これらの規則は,すべての有

効並び項目がスカラ項目になるまで繰り返し適用することができる。

入出力

DO

形反復における,ループの初期化 及び 実行は,

DO

構文

(

8.1.6.4

)

と同じとする。

入出力文に基本文字型の内部ファイルを指定した場合,入出力項目並びは,基本文字型でない文字型を含んではな

らない。入出力文に

ISO 10646

文字型の内部ファイルを指定した場合,入出力並びは,

ISO 10646

文字型 又は

ASCII

文字型以外の基本文字型でない文字型の項目を含んではならない。入出力文に

ASCII

文字型の内部ファイルを指定し

た場合,入出力並びは,

ASCII

文字型以外の文字型の項目を含んではならない。

9.37

DO

形反復の例を次に示す。

WRITE (LP, FMT = ’(10F8.2)’) (LOG (A (I)), I = 1, N + 9, K), G

9.5.3

データ転送入出力文の実行

存在しないファイルに対し

WRITE

文 又は

PRINT

文を実行すると,誤り条件が発生しない限り,ファイルが生成

される。

一つの同期データ転送入出力文の実行の効果は,次の処理を,記述した順序どおりに実行したのと同じとする。

(1)

データ転送の方向を決める。

(2)

装置を識別する。

(3)

その装置におけるすべての未了の入出力操作に対して,待機操作を行う。待機操作中に誤り条件,ファイル終了

条件 又は 記録終了条件が発生した場合は,現在のデータ転送文について

(4)

(8)

の処理を省略する。

(4)

書式が指定されていれば,書式を定める。

(5)

文が子データ転送文

(

9.5.3.7

)

でなければ,次の処理を行う。

(a)

データ転送直前のファイルの位置付け

(

9.2.3.2

)

を行う。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

166

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(b)

書式付きデータ転送について,位置付け左限界

(

10.7.1.1

)

を設定する。

(6)

ファイルと,入出力項目並び 又は 変数群に指定されたデータ要素との間でデータを転送する。

(7)

誤り条件,ファイル終了条件 又は 記録終了条件が発生したか調べる。

(8)

文が子データ転送文

(

9.5.3.7

)

でなければ,データ転送直後のファイルの位置付け

(

9.2.3.3

)

を行う。

(9)

SIZE

指定子が指定されていれば,その指定子に指定されている変数を確定にする。

(10)

誤り条件,ファイル終了条件 又は 記録終了条件が発生した場合,

9.10

で規定する処理を行う。発生しない場

合,

IOSTAT

指定子に指定されている変数を値ゼロで確定にする。

一つの非同期データ転送入出力文の実行の効果は,次の処理を,記述した順序どおりに実行したのと同じとする。

(1)

データ転送の方向を決める。

(2)

装置を識別する。

(3)

書式が指定されていれば,書式を定める。

(4)

データ転送直前のファイルの位置付け

(

9.2.3.2

)

を行い,書式付きデータ転送について,位置付け左限界

(

10.7.1.1

)

を設定する。

(5)

入出力並びで識別される記憶単位の組を定める。

READ

文において,入力変数が入出力並び中の入出力

DO

御のスカラ整数式,添字,部分列範囲 若しくは 刻み幅として使用されているか 又は 他の方法で参照されてい

る場合,それはファイル中のデータの一部 又は すべてを読み込むことを要求する。

(6)

ファイルと,入出力項目並び 又は 変数群に指定されたデータ要素との間で非同期のデータ転送を開始する。非

同期のデータ転送は,このデータ転送文の実行中 又は 対応する待機操作中に完了してもよく,誤り条件,ファ

イル終了条件 又は 記録終了条件を発生してもよい。

(7)

誤り条件,ファイル終了条件 又は 記録終了条件が発生したか調べる。これらの条件は,このデータ転送文の実

行中 又は 対応する待機操作中に発生することがあるが,両方で発生することはない。また,事前に未了であっ

ID

指定子のないデータ転送処理に対応する待機操作中に発生したこれらの条件のいずれも,このデータ転送

文の実行中に発生することがある。

(8)

データ転送が完了したものとしてファイルの位置付け

(

9.2.3.3

)

を行う。

(9)

SIZE

指定子が指定されていれば,その指定子に指定されている変数を確定にする。

(10)

誤り条件,ファイル終了条件 又は 記録終了条件が発生した場合,

9.10

で規定する処理を行う。発生しない場

IOSTAT

指定子に指定されている変数を値ゼロで確定にする。

非同期データ転送文において,データの転送は,その文の実行中,対応する待機操作中 又は その間のいずれかの

時に実施されればよい。対応する待機操作が完了するまで,データ転送操作は未了であるとする。

非同期出力において,未了の入出力記憶域列の作用子

(

9.5.1.4

)

は,再確定したり,不定としたり 又は ポインタ結

合状態を変更したりしてはならない。

非同期入力において,未了の入出力記憶域列の作用子は,再確定したり,不定としたり,

VALUE

属性をもつ仮引

数と結合したり 又は ポインタ結合状態を変更したりしてはならない。

非同期データ転送処理中の誤り条件,ファイル終了条件 及び 記録終了条件は,データ転送文 又は 対応する待機

操作のいずれの実行中に発生してもよい。始めのデータ転送文に

ID

指定子を指定していない場合,各条件は,同じ

装置に対する後続のデータ転送 又は 待機操作の実行中に発生してもよい。各条件が既に実行した非同期データ転送

文に対して発生すると,その装置への未了なデータ転送操作すべてに対して,待機操作が実行される。各条件が後続

の文で発生すると,その文に指定した

IOSTAT

指定子,

IOMSG

指定子,

ERR

指定子,

END

指定子 及び

EOR

指定

子で指示した動作が実行される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

167

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

9.38

ID

指定子のない非同期データ転送文におけるファイル終了条件 及び 誤り条件は,処理系が後

続のデータ転送文の実行中に報告してもよいので,利用者は,どの入出力文が条件の原因であるかを

特定することができないことがある。どの

READ

文がファイル終了条件の原因であるかを確実に把

握するためには,その装置に対するすべての非同期

READ

文に

ID

指定子を書かなければならない。

9.5.3.1

データ転送の方向

READ

文を実行すると,ファイルから入力項目並びで指定されたデータ要素に,又は 変数群入力であればファイル

自身の中に指定されているデータ要素に,値が転送される。

WRITE

文 又は

PRINT

文を実行すると,出力項目並び

及び 書式仕様で指定されたデータ要素から,又は 変数群出力であれば変数群名で指定されたデータ要素から,ファ

イルに値が転送される。

9.5.3.2

装置の識別

入出力制御情報並びをもつデータ転送入出力文は,外部装置 又は 内部ファイルを識別する装置識別子を含む。入

出力制御情報並びをもたない

READ

文は,処理系依存の特定の装置を指定する。この装置は,入出力制御情報並び

をもつ

READ

文中の,

UNIT

指定子の

*

で識別された装置と同じとする。

PRINT

文は,別の処理系依存の装置を

指定する。この装置は,

WRITE

文の

UNIT

指定子の

*

で識別された装置と同じとする。このようにして,それぞ

れのデータ転送入出力文は,外部装置 又は 内部ファイルを識別する。

データ転送入出力文で識別された装置は,その文の実行が始まる時に,ファイルに接続されていなければならない。

注記

9.39

ファイルは,事前接続されていてもよい。

9.5.3.3

書式の決定

入出力制御情報並び中に書式識別子として

*

を書くと,並び書式が定まる。変数群名を指定すると,変数群書式

が定まる。書式識別子も変数群名も指定しないと,書式なしデータ転送が定まる。これ以外の場合,

FMT

指定子で

識別される書式仕様が定まる。

内部ファイルを出力に指定したとき,書式仕様として,そのファイル自体 又は そのファイルと結合されたものを

指定してはならない。

9.5.3.4

データ転送

データは,記録と,入出力項目並び 又は 変数群によって指定されたデータ要素との間を転送される。変数群書式

データ転送文を除いたすべてのデータ転送入出力文において,入出力項目は,入出力項目並びの順に処理される。変

数群入力文の入力項目は,入力記録中に指定してある順に処理される。変数群出力文の出力項目は,変数群要素並び

に指定してあるデータ実体(変数)の順に処理される。有効項目は,入出力項目から

9.5.2

で規定したとおりに派生

する。

入出力項目が指定するデータ要素を特定するのに必要な値は,その項目のすべての処理の始めに決定される。

すべてのデータ転送入出力文において,すべての値は,入出力項目によって指定された要素へ,又は 入出力項目に

よって指定された要素から,その項目の後に続く入出力項目の処理に移る前に転送される。

9.40

次の

READ

文で装置を識別するのは古い

N

の値であるが,

X

の添字は新しい

N

の値とする。

READ (N) N, X (N)

入力記録中の変数群要素の

名前

=

に続くすべての値

(

10.10

)

は,その入力記録中でその実体の後に続く実体の処

理に先立って,変数群要素並び中の対応する実体に転送される。変数群書式データ転送入力文において,入力記録の

中に一つの実体が

2

回以上指定されていると,最後に指定された値が,その実体の値として使用される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

168

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

入力項目 又は それと結合しているデータ要素は,定まった書式仕様のいかなる部分も含んではならない。

入出力項目がポインタの場合,データは,ファイルとポインタに結合された指示先との間で転送される。

内部ファイルを指定したとき,入出力項目は,そのファイル中にあってはならず,かつ そのファイルに結合されて

いてはならない。

注記

9.41

ファイルは,データ実体とする。

DO

形反復の範囲を構成する項目の処理の始めに,

DO

変数が確定となり,繰返し数が定まる。

出力において,転送される値をもつすべてのデータ要素は,確定となっていなければならない。

9.5.3.4.1

書式なしデータ転送

書式なしデータ転送では,データは,変換されずに,現在記録と入出力項目並びによって指定されるデータ要素と

の間を転送される。ちょうど一つの記録が読まれるか 又は 書かれる。

組込み型 又は 派生型の実体を,書式なしデータ転送文で転送できる。

現在のファイル位置の直後のファイル記憶単位から始めて,ファイル中の値を連続したファイル記憶単位の列に格

納する。

値の転送が終わると,現在のファイル位置は,その値の最後のファイル記憶単位の直後を指すように移動する。

順番探査 又は 直接探査として接続したファイルからの入力において入力項目並びが要求するファイル記憶単位の

個数は,その記録中のファイル記憶単位の個数以下でなければならない。

入力において,転送するファイル記憶単位が入力項目並びの言語要素と同じ型 及び 型パラメタの値を含まない場

合,結果としてその言語要素の値がどうなるかは,次の場合を除いて処理系依存とする。

(1)

一つの複素数並び要素は,ファイル中の二つの同じ種別の実数型の値に対応することができる。その逆でもよい。

(2)

長さ

n

の基本文字型の並び要素は,ファイル中の

n

個の基本文字に対応することができる。このとき,ファイル

の記憶単位に書き込んだときの要素の長さパラメタとは無関係とする。ファイルが流れ入力として接続されてい

る場合,文字は書式付き流れ出力で書かれたものであってもよい。

書式なし直接探査として接続されているファイルへの出力において,出力項目並びは,記録中に入りうるより多い

値を指定してはならない。ファイルが直接探査として接続されており,かつ 出力項目並びによって指定される値が記

録を満たさない場合,記録の残りの部分は,不定となる。

ファイルが書式なし順番探査として接続されている場合,出力項目並びから転送される値を保持するのに十分な長

さの一つの記録が作成される。その長さは,そのファイルのもつ許容記録長集合の範囲内とし,もし

OPEN

文で接

続されたのならば,

RECL

指定子に指定された値を超えてはならない。

ファイルが書式付き入出力として接続されている場合,書式なしデータ転送をしてはならない。

装置には,外部装置を指定しなければならない。

9.5.3.4.2

書式付きデータ転送

書式付きデータ転送では,データは,ファイルと入出力項目並び 又は 変数群で指定された項目との間を編集を伴っ

て転送される。箇条

10

に規定されているとおりに,書式制御が開始され,編集が行われる。

現在記録 及び 場合によっては引き続く記録が,読まれたり書かれたりする。

書式付きデータ転送文によって,ファイルから組込み型 若しくは 派生型の実体へ,又は その実体からファイルへ,

値が転送される。派生型の実体の場合,派生型の並び項目を利用者定義の派生型入出力手続

(

9.5.3.7

)

で操作するの

でなければ,転送は,ファイルから組込み型の値の形で,その構造化された実体を構成する組込み型の末端成分へ,

又は その末端成分からファイルへ行われる。

ファイルが書式付き入出力として接続されていない場合,書式付きデータ転送をしてはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

169

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

空白補充モードの値が

NO

であるファイルからの前進入力において,入力項目並びと書式仕様は,記録に含まれる

より多くの文字数を要求してはならない。

空白補充モードの値が

YES

であるファイルからの前進入力 及び 内部ファイルからの入力において,入力項目並び

と書式仕様が記録に含まれるより多くの文字数を要求すると,処理系は,空白を補う。

空白補充モードの値が

NO

であるファイルからの停留入力において,入力項目並びと書式仕様が記録に含まれるよ

り多くの文字数を要求し,記録が完全

(

9.2.2.3

)

なときは,記録終了条件

(

9.10

)

が発生する。記録が不完全なときは,

記録終了条件の代わりにファイル終了条件が発生する。

空白補充モードの値が

YES

であるファイルからの停留入力において,有効な入力項目並びと書式仕様が記録に含ま

れるより多くの文字数を要求すると,処理系が空白を補う。記録が不完全なときはファイル終了条件が発生し,それ

以外のときは記録終了条件が発生する。

ファイルが直接探査として接続されている場合,記録番号は,後に続く記録を読んだり書いたりするごとに,

1

つ増加する。

出力において,ファイルが直接探査として接続されている場合 及び 内部ファイルの場合,出力項目並びと書式仕

様によって指定される文字が記録を満たさないと,その記録を満たすために空白が付け加えられる。

出力において,出力項目並びと書式仕様は,

OPEN

文の

RECL

指定子による指定 又は 内部ファイルの記録長より

多い文字を記録に指定してはならない。

9.5.3.5

並び書式

並び書式が定まると,

10.9

に規定されている編集が行われる。

9.5.3.6

変数群書式

変数群書式が定まると,

10.10

に規定されている編集が行われる。

変数群の中のすべての割付け可能な変数群要素は割り付けられていなければならず,ポインタである変数群要素は

指示先と結合していなければならない。変数群要素が多相的であるか,割付け可能な最終成分をもつか 又は ポイン

タである最終成分をもつとき,その実体は利用者定義の派生型入出力手続

(

9.5.3.7

)

で処理しなければならない。

9.5.3.7

利用者定義の派生型入出力

利用者定義の派生型入出力手続によって,プログラムは,データ転送入出力文中の派生型の実体 及び 値に対して

9.5.2

で規定した暗黙的な操作を上書きすることができる。

利用者定義の派生型入出力手続は,派生型入出力総称指定

(

12.3.2.1

)

によって参照可能な手続とする。個別の利用

者定義の派生型入出力手続が,

9.5.3.7.3

で規定した方法で選択される。

9.5.3.7.1

利用者定義の派生型入出力データ転送の実行

9.5.3.7.3

の規定に従って派生型入出力手続が選択されると,その有効域内で実行されるデータ転送入出力文に対

して,処理系は,選択された利用者定義の派生型入出力手続を呼び出さなければならない。利用者定義の派生型入出

力手続は,派生型の並び項目についての実際のデータ転送処理を制御する。

派生型並び項目をもち,利用者定義の派生型入出力手続を呼び出すデータ転送文を, 親データ転送文

(parent data

transfer statement)

という。親データ転送文の処理中に実行され,利用者定義の派生型入出力手続に渡された装置を

指定したデータ転送文を, 子データ転送文

(child data transfer statement)

という。

注記

9.42

利用者定義の派生型入出力手続は,一般的に,現在の記録 又は 現在のファイル位置から値を

読んだり書いたりする子データ転送文を含んでいる。利用者定義の派生型入出力手続を実行すること

は,書式仕様での同様の置換えとともに,親データ転送文の並び項目を子データ転送文の並び項目で

置き換えるのと同じ効果をもつ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

170

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

9.43

READ

文,

WRITE

文 又は

PRINT

文の特定の実行は,親データ転送文であることも子データ

転送文であることもできる。利用者定義の派生型入出力手続は,対応する引用仕様が参照可能である

派生型の並び項目を指定した子データ転送文を実行することによって,それ自体 又は 他の利用者定

義の派生型入出力手続を間接的に呼び出すことができる。利用者定義の派生型入出力手続がこの方法

でそれ自体を間接的に呼び出す場合,それは

RECURSIVE

と宣言しなければならない。

子データ転送文は,子データ転送文でないデータ転送文とは異なり,次のとおりに処理される。

子データ転送文の実行は,データ転送の前にファイルの位置付けを行わない。

子入出力文に指定した

ADVANCE

指定子は,無視する。

書式なし子データ転送文は,データ転送の完了後にファイルの位置付けを行わない。

9.5.3.7.2

利用者定義の派生型入出力手続

特定の派生型 及び 特定の種別型パラメタ値の組について,利用者定義の派生型入出力手続には四つの可能な特性

の組があり,書式付き入力,書式付き出力,書式なし入力 及び 書式なし出力のそれぞれに対応する。利用者は,四

つすべての手続を用意する必要はない。手続は,派生型入出力総称指定

(R1208)

とともに,引用仕様宣言

(

12.3.2.1

)

又は 総称束縛

(

4.5.4

)

によって派生型入出力で使用することを指定する。

派生型入出力の利用者定義手続の特性を指定する四つの引用仕様では,次の構文規則が適用される。

R920

派生型変数型指定

is

TYPE (

派生型指定子

)

or

CLASS (

派生型指定子

)

C936

(R920)

派生型指定子が拡張可能型のときキーワード

CLASS

を指定しなければならず,それ以外のとき

キーワード

TYPE

を指定しなければならない。

C937

(R920)

派生型指定子の長さ型パラメタは,引き継がれなければならない。

派生型入出力総称指定が

READ(FORMATTED)

であるとき,その特性は,次の引用仕様で指定したものと同じでなけ

ればならない。

SUBROUTINE my_read_routine_formatted

&

(dtv,

&

unit,

&

iotype, v_list,

&

iostat, iomsg)

!

派生型の値/変数

派生型変数型指定

, INTENT(INOUT) :: dtv

INTEGER, INTENT(IN) :: unit ! unit number

!

編集記述子の文字列

CHARACTER (LEN=*), INTENT(IN) :: iotype

INTEGER, INTENT(IN) :: v_list(:)

INTEGER, INTENT(OUT) :: iostat

CHARACTER (LEN=*), INTENT(INOUT) :: iomsg

END

派生型入出力総称指定が

READ(UNFORMATTED)

であるとき,その特性は,次の引用仕様で指定したものと同じでな

ければならない。

SUBROUTINE my_read_routine_unformatted

&

(dtv,

&

unit,

&

iostat, iomsg)

!

派生型の値/変数

派生型変数型指定

, INTENT(INOUT) :: dtv

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

171

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

INTEGER, INTENT(IN) :: unit

INTEGER, INTENT(OUT) :: iostat

CHARACTER (LEN=*), INTENT(INOUT) :: iomsg

END

派生型入出力総称指定が

WRITE(FORMATTED)

であるとき,その特性は,次の引用仕様で指定したものと同じでなけ

ればならない。

SUBROUTINE my_write_routine_formatted

&

(dtv,

&

unit,

&

iotype, v_list,

&

iostat, iomsg)

!

派生型の値/変数

派生型変数型指定

, INTENT(IN) :: dtv

INTEGER, INTENT(IN) :: unit

!

編集記述子の文字列

CHARACTER (LEN=*), INTENT(IN) :: iotype

INTEGER, INTENT(IN) :: v_list(:)

INTEGER, INTENT(OUT) :: iostat

CHARACTER (LEN=*), INTENT(INOUT) :: iomsg

END

派生型入出力総称指定が

WRITE(UNFORMATTED)

であるとき,その特性は,次の引用仕様で指定したものと同じでな

ければならない。

SUBROUTINE my_write_routine_unformatted

&

(dtv,

&

unit,

&

iostat, iomsg)

!

派生型の値/変数

派生型変数型指定

, INTENT(IN) :: dtv

INTEGER, INTENT(IN) :: unit

INTEGER, INTENT(OUT) :: iostat

CHARACTER (LEN=*), INTENT(INOUT) :: iomsg

END

実際の個別の手続名(上での手続名

my ... routine ...

)は,重要ではない。この規格の記述において,これら

の引用仕様の仮引数は,上の名前で参照されるが,名前は任意とする。

利用者定義の派生型入出力手続が呼び出されるとき,処理系は,次に定める値をもつ引数

unit

を渡さなければな

らない。

親データ転送文にファイル装置番号の指定がある場合,引数

unit

の値は,そのファイル装置番号の値でなければ

ならない。

親データ転送文が装置番号として星印を指定した

WRITE

文 又は

PRINT

文の場合,引数

unit

の値は,組込みモ

ジュール

ISO FORTRAN ENV

(

13.8.2

)

の名前付き定数

OUTPUT UNIT

と同じ値でなければならない。

親データ転送文が装置番号として星印を指定した

READ

文 又は データ転送指定子並びのない

READ

文の場合,

引数

unit

の値は,組込みモジュール

ISO FORTRAN ENV

(

13.8.2

)

の名前付き定数

INPUT UNIT

と同じ値でなけ

ればならない。

これら以外の場合,親データ転送文は内部ファイルを参照するものでなければならず,引数

unit

の値は処理系依

存の負の値でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

172

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

9.44

親データ転送文に内部ファイルを指定すると引数

unit

の値は負になるので,利用者定義の派生

型入出力手続の中で,引数

unit

の値が負でないかどうか 又は 組込みモジュール

ISO FORTRAN ENV

(

13.8.2

)

の名前付き定数

INPUT UNIT

OUTPUT UNIT

若しくは

ERROR UNIT

の一つと同じかどうかを

調べずに

INQUIRE

文を実行してはならない。

書式付きデータ転送の場合,処理系は,次の値をもつ引数

iotype

を渡さなければならない。

親データ転送文に並び書式の指定があるとき,

LISTDIRECTED

親データ転送文に変数群書式の指定があるとき,

NAMELIST

親データ転送文に書式仕様の指定があり,並び項目に対応する編集記述子が

DT

形編集記述子であるとき,

DT

編集記述子の文字定数表現を連結した値。

親データ転送文が

READ

文の場合,仮引数

dtv

は,有効並び項目がこの手続引用

(

2.5.6

)

の実引数であるかのよ

うに,利用者定義の派生型入力手続を呼び出すこととなる有効並び項目と引数結合する。

親データ転送文が

WRITE

文 又は

PRINT

文の場合,処理系は,有効並び項目の値を仮引数

dtv

に与えなければ

ならない。

親データ転送文に編集記述子の値指定並びがある場合,処理系は,値指定並びと同じ順序で同じ個数の要素である

ようにして,その値を仮引数

v list

に与えなければならない。編集記述子に値指定並びがないか,データ転送文に

並び書式 又は 変数群書式を指定している場合,処理系は,

v list

を大きさゼロの配列にしなければならない。

注記

9.45

利用者の手続は,引数

v list

の一つの要素を欄幅と解釈することができるが,そうでなけれ

ばならないわけではない。そうであった場合,幅が小さかったときには出力欄を

*

で埋めるのが適

切である。

引数

iostat

は,誤り条件,記録終了条件 又は ファイル終了条件

(

9.10

)

が発生したことを報告するために使用

する。誤り条件が発生した場合,利用者定義の派生型入出力手続は,引数

iostat

に正の値を代入しなければならな

い。ファイル終了条件が発生した場合,利用者定義の派生型入力手続は,引数

iostat

に名前付き定数

IOSTAT END

(

13.8.2.5

)

の値を代入しなければならない。記録終了条件が発生した場合,利用者定義の派生型入力手続は,

iostat

に名前付き定数

IOSTAT EOR

(

13.8.2.6

)

の値を代入しなければならない。これら以外の場合,利用者定義の派生型入

出力手続は,

iostat

に値ゼロを代入しなければならない。

利用者定義の派生型入出力手続が引数

iostat

にゼロでない値を返す場合,手続は,引数

iomsg

に説明の通知を返

さなければならない。これ以外の場合,手続は,引数

iomsg

の値を変えてはならない。

注記

9.46

利用者定義の派生型入出力手続で定義した引数

iostat

及び 引数

iomsg

の値を,すべての親

データ転送文に渡す必要はない。

利用者定義の派生型入出力手続から戻るときに,その手続の引数

iostat

の値がゼロ以外であって,

9.10

の規定に

よって処理系がプログラムの実行を終了させる場合,処理系は,引数

iomsg

の値を処理系依存の方法で使用可能にし

なければならない。

READ

文が活動状態にあるとき,入出力文は,仮引数

unit

で指定した装置以外の外部装置から読んだり,いず

れかの外部装置に書いたりしてはならない。

WRITE

文 又は 親

PRINT

文が活動状態にあるとき,入出力文は,仮引数

unit

で指定した装置以外の外部装

置に書いたり,いずれかの外部装置から読んだりしてはならない。

親データ転送文が活動状態にあるとき,内部ファイルを指定したデータ転送文は実行できる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

173

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

親データ転送文が活動状態にあるとき,

OPEN

文,

CLOSE

文,

BACKSPACE

文,

ENDFILE

文 及び

REWIND

文を実行してはならない。

それ自体も派生型である派生型の要素を扱うために,利用者定義の派生型入出力手続が

DT

形編集記述子を含む書

式仕様を使用することができる。並び入出力文 又は 変数群入出力文である子データ転送文は,派生型の並び項目を

含むことができる。

子データ転送文はデータ転送の前にファイルを位置付けしないので,子データ転送文は,親データ転送文で直前に

処理した有効並び項目 又は 記録位置付け編集記述子によってファイルが位置付けられた場所からデータ転送を開始

する。記録の始めでは,これにはよらない。

子データ転送文で

unit

に対して使用する

TL

形編集記述子や

TR

形編集記述子のような記録位置付け編集記述子

は,記録位置を,利用者定義の派生型入出力手続が呼び出されたときの記録位置よりも前に位置付けてはならない。

注記

9.47

利用者定義の派生型入出力手続は,

BLANK

指定子,

PAD

指定子,

ROUND

指定子,

DECIMAL

指定子 及び

DELIM

指定子の設定を知るために,外部装置に対して

INQUIRE

文を使用することが

できる。

INQUIRE

文は,

9.9

で規定する値を与える。

親データ転送文も子データ転送文も,非同期であってはならない。

引数

dtv

を経由する場合を除いて,利用者定義の派生型入出力手続 及び そこから呼び出した手続は,活動状態に

ある親データ転送文の入出力並び項目,対応する書式 又は 指定子が参照する記憶場所を,確定にしたり不定にする

原因となってはならない。

注記

9.48

子データ転送文の入出力制御情報並びに,

ID

指定子,

POS

指定子 又は

REC

指定子を指定し

てはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

174

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.49

派生型書式付き出力の簡単な例を示す。派生型の変数

chairman

は二つの要素をもつ。その型 及

び 結合している書式付き出力手続は,どこで必要とされても参照できるように,モジュールで定義さ

れている。また,

iotype

の値が実際に

DT

であるかどうかを調べ,

iostat

及び

iomsg

をそれぞれ

設定することもできる。

MODULE p

TYPE :: person

CHARACTER (LEN=20) :: name

INTEGER :: age

CONTAINS

GENERIC :: WRITE(FORMATTED) => pwf

END TYPE person

CONTAINS

SUBROUTINE pwf (dtv,unit,iotype,vlist,iostat,iomsg)

!

引数の宣言

CLASS(person), INTENT(IN) :: dtv

INTEGER, INTENT(IN) :: unit

CHARACTER (LEN=*), INTENT(IN) :: iotype

INTEGER, INTENT(IN) :: vlist(:)

INTEGER, INTENT(OUT) :: iostat

CHARACTER (LEN=*), INTENT(INOUT) :: iomsg

!

局所変数

CHARACTER (LEN=9) :: pfmt

!

vlist(1)

及び

(2)

は,派生型の変数の二つの要素の欄幅として使用する。

!

最初に,出力に使用するための書式仕様を設定する。

WRITE(pfmt,’(A,I2,A,I2,A)’ ) ’(A’, vlist(1), ’,I’, vlist(2), ’)’

!

ここは,通常の出力文。

WRITE(unit, FMT=pfmt, IOSTAT=iostat) dtv%name, dtv%age

END SUBROUTINE pwf

END MODULE p

PROGRAM

USE p

INTEGER id, members

TYPE (person) :: chairman

...

WRITE(6, FMT="(I2, DT (15,6), I5)" ) id, chairman, members

!

この文は,それぞれの長さが

2

15

6

及び

5

である四つの欄をもつ

!

記録を書く。

END PROGRAM

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

175

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.50

この例で派生型の変数

node

は,各要素に一つの値をもつ連結リストを構成する。副プログラム

pwf

を用いて,各行に一つずつ要素の値を書く。

MODULE p

TYPE node

INTEGER :: value = 0

TYPE (NODE), POINTER :: next_node => NULL ( )

CONTAINS

GENERIC :: WRITE(FORMATTED) => pwf

END TYPE node

CONTAINS

RECURSIVE SUBROUTINE pwf (dtv,unit,iotype,vlist,iostat,iomsg)

!

一連の値を,別々の行に一つずつ書式指定子

I9

で書く。

CLASS(node), INTENT(IN) :: dtv

INTEGER, INTENT(IN) :: unit

CHARACTER (LEN=*), INTENT(IN) :: iotype

INTEGER, INTENT(IN) :: vlist(:)

INTEGER, INTENT(OUT) :: iostat

CHARACTER (LEN=*), INTENT(INOUT) :: iomsg

WRITE(unit,’(i9 /)’, IOSTAT = iostat) dtv%value

IF(iostat/=0) RETURN

IF(ASSOCIATED(dtv%next_node)) &

&

WRITE(unit,’(dt)’, IOSTAT=iostat) dtv%next_node

END SUBROUTINE pwf

END MODULE p

9.5.3.7.3

派生型入出力手続参照の解決

有効項目の利用者定義の派生型入出力についての適切な総称引用仕様は,

9.5.3.7

で規定したようにデータ転送の

方向(読む 又は 書く) 及び 形式(書式付き 又は 書式なし)に適切な派生型入出力総称指定をもち,

12.4.1.2

で規

定した引数結合の規則に従って引数

dtv

が有効項目と整合性がある特定の引用仕様をもつ。

データ転送中に派生型である有効項目

(

9.5.2

)

に出会うと,次の条件が共に真であれば,利用者定義の派生型入出

力を行う。

(1)

入出力の環境は,利用者定義の派生型入出力を許すものである。それは,次のいずれかの場合とする。

(a)

転送は,並び入出力,変数群入出力 又は 書式なし入出力で開始した。

(b)

入出力文に対して書式仕様が指定され,有効項目に対応する編集記述子が

DT

形編集記述子である。

(2)

適切な利用者定義の派生型入出力手続が使用可能である。それは,次のいずれかの場合とする。

(a)

有効項目の宣言した型が,適切な総称型束縛手続をもっている。

(b)

適切な総称引用仕様が参照可能である。

(

2a

)

が真であれば,参照される手続は,明示的に型束縛手続の参照

(

12.4

)

として決定される。つまり,適切な特定

の引用仕様との束縛が有効項目を宣言した型の中に見つかり,有効項目の動的な型の中の対応する束縛が選択される。

(

2a

)

が偽で

(

2b

)

が真の場合,引用仕様宣言の中の適切な特定の引用仕様によって識別される手続への参照となる。

これは,存在しない仮手続への参照 又は 空状態の手続ポインタへの参照であってはならない。

9.5.4

データ転送文の終了

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

176

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

データ転送入出力文は,次のいずれかの条件が発生したときに終了する。

(1)

書式制御がデータ編集記述子に進み,それに対応する項目が入力項目並び 又は 出力項目並びにないとき。

(2)

書式なしデータ転送 又は 並びデータ転送が,入力項目並び 又は 出力項目並びを使い尽くしたとき。

(3)

変数群出力が変数群要素並びを使い尽くしたとき。

(4)

誤り条件が発生したとき。

(5)

ファイル終了条件が発生したとき。

(6)

並び入力 又は 変数群入力において,読まれた記録中に,値区切り子

(

10.9

,

10.10

)

として斜線

(

/

)

が現れたとき。

(7)

停留入出力文において,記録終了条件が発生したとき

(

9.10

)

9.6

未了データ転送の待機

誤り条件,記録終了条件 及び ファイル終了条件が発生しない非同期データ転送文を実行すると,未了データ転送操

作を開始する。同じ装置 又は 複数の装置について,同時に複数の未了データ転送操作が存在してもよい。未了デー

タ転送操作は,対応する待機操作を行うまで未了のままとする。待機操作は,

WAIT

文,

INQUIRE

文,

CLOSE

又は ファイル位置付け文によって行われる。

9.6.1 WAIT

WAIT

文は,指定した未了の非同期データ転送操作に対して待機操作を行う。

注記

9.51

CLOSE

文,

INQUIRE

文 及び ファイル位置付け文も,待機操作を行うことができる。

R921

WAIT

is

WAIT (

待機指定子並び

)

R922

待機指定子

is

[ UNIT = ]

ファイル装置番号

or

END =

文番号

or

EOR =

文番号

or

ERR =

文番号

or

ID =

スカラ整数式

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

C938

(R922)

各指定子は,待機指定子並びに

2

回以上指定してはならない。

C939

(R922)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,待機指定子並びの最初の項目でなければならない。

C940

(R922) ERR

指定子,

EOR

指定子 又は

END

指定子に指定する文番号は,その

WAIT

文と同じ有効域

内の飛び先文の文番号でなければならない。

IOSTAT

指定子,

ERR

指定子,

EOR

指定子,

END

指定子 及び

IOMSG

指定子は,

9.10

で規定する。

ID

指定子に指定した式の値は,指定した装置における未了データ転送操作の識別子でなければならない。

ID

指定

子を指定した場合,指定したデータ転送操作に対する待機操作を行う。

ID

指定子を省略した場合,指定した装置にお

けるすべての未了データ転送操作に対する待機操作を行う。

存在しないか,ファイルと接続していないか 又は 非同期入出力として開いていない装置を指定した

WAIT

文を実

行してもよく,その

WAIT

文は

ID

指定子を省略したものとみなされる。このような

WAIT

文は,誤り条件 又は ファ

イル終了条件とはならない。

注記

9.52

未了データ転送操作が停留入力でない場合,

EOR

指定子は無効とする。未了データ転送操作が

READ

でない場合,

END

指定子は無効とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

177

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.6.2

待機操作

待機操作

(wait operation)

は,未了データ転送操作の処理を完了する。一つの文が複数の待機操作を行うことがで

きるにもかかわらず,各待機操作は,一つのデータ転送操作だけを完了する。

実際のデータ転送が完了していない場合,待機操作はまずその完了を待つ。データ転送操作が入力操作で誤りなく

完了した場合,入出力記憶列は,

9.5.1.14

及び

9.5.3.4

の規定による値で確定となる。

誤り条件,ファイル終了条件 又は 記録終了条件が発生した場合,待機操作を行う文の

IOSTAT

指定子,

IOMSG

指定子,

ERR

指定子,

END

指定子 及び

EOR

指定子に指定した適切な動作が起こる。

ある装置に対する待機操作中に誤り条件 又は ファイル終了条件が発生した場合,処理系は,その装置に対するす

べての未了データ転送操作についての待機操作を行う。

注記

9.53

誤り条件,ファイル終了条件 及び 記録終了条件は,非同期入出力を開始するデータ転送文,同

じ装置に対する後続の非同期データ転送文 又は 待機操作のいずれの最中にも発生することがある。

これらの条件がデータ転送文の最中に発生すると,その文の

IOSTAT

指定子,

ERR

指定子,

END

定子 又は

EOR

指定子に従った動作が起動される。これらの条件が待機操作の最中に発生すると,そ

の動作は,待機操作を行った文の指定子に従う。

待機操作が完了すると,データ転送操作 及び その入出力記憶列は,もはや未了ではなくなる。

9.7

ファイル位置付け文

R923

BACKSPACE

is

BACKSPACE

ファイル装置番号

or

BACKSPACE (

位置付け指定子並び

)

R924

ENDFILE

is

ENDFILE

ファイル装置番号

or

ENDFILE (

位置付け指定子並び

)

R925

REWIND

is

REWIND

ファイル装置番号

or

REWIND (

位置付け指定子並び

)

直接探査として接続されているファイルを,

BACKSPACE

文,

ENDFILE

文 又は

REWIND

文で参照してはなら

ない。書式なし流れ探査として接続されているファイルを,

BACKSPACE

文で参照してはならない。

ACTION

指定

子の値が

READ

であるファイルを,

ENDFILE

文で参照してはならない。

R926

位置付け指定子

is

[

UNIT =

]

ファイル装置番号

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

or

ERR =

文番号

C941

(R926)

各指定子は,位置付け指定子並びに

2

回以上指定してはならない。

C942

(R926)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,位置付け指定子並びの最初の項目でなければならない。

C943

(R926) ERR

指定子の文番号は,その位置付け文と同じ有効域内の飛び先文の文番号でなければなら

ない。

IOSTAT

指定子,

ERR

指定子 及び

IOMSG

指定子は,

9.10

で規定する。

ファイル位置付け文の実行は,指定した装置における未了の非同期データ転送操作のすべてに対して,待機操作を

行う。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

178

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.7.1 BACKSPACE

BACKSPACE

文を実行すると,指定された装置に接続しているファイルは,そのファイルに現在記録が存在する

とき,現在記録の前に位置付けられる。そのファイルに現在記録が存在しないとき,直前記録の前に位置付けられる。

ファイル位置がファイルの始点にある場合,ファイル位置は変わらない。

注記

9.54

直前記録がファイル終了記録のとき,ファイルは,ファイル終了記録の前に位置付けられる。

BACKSPACE

文が暗黙的にファイル終了記録を書いた場合には,ファイルは,ファイル終了記録の直前記録の前

に位置付けられる。

接続されているが存在しないファイルに対して,

BACKSPACE

文を実行してはならない。

並び書式 又は 変数群書式を使って書かれた記録を越える

BACKSPACE

文を実行してはならない。

9.55

BACKSPACE

文の例を,次に示す。

BACKSPACE (10, IOSTAT = N)

9.7.2 ENDFILE

順番探査として接続されているファイルに

ENDFILE

文を実行すると,そのファイルの直後記録として,ファイル

終了記録が書かれる。そして,ファイルは,そのファイルの最後の記録となるファイル終了記録の後ろに位置付けら

れる。ファイルが直接探査としても接続可能である場合,ファイル終了記録より前の記録だけが,書かれているとみ

なされる。したがって,ファイルが直接探査として接続されている間は,それらの記録だけを読むことができる。

順番探査として接続されているファイルに

ENDFILE

文を実行した後でデータ転送入出力文 又は

ENDFILE

文を

実行するには,まず

BACKSPACE

文 又は

REWIND

文を使ってファイルを再位置付けしなければならない。

流れ探査として接続されているファイルに

ENDFILE

文を実行すると,ファイルの終点は現在のファイル位置にな

る。現在の位置より前のファイル記憶単位だけが,既に書かれたものとみなされ,以後はこれらのファイル記憶単位

だけを読むことができる。以後の流れ出力文で,このファイルに更にデータを書くことができる。

接続されていて存在しないファイルに対して

ENDFILE

文を実行するとファイルが生成される。そのファイルが順

番探査として接続されているとき,ファイルを生成してからファイル終了記録を書く。

9.56

ENDFILE

文の例を,次に示す。

ENDFILE K

9.7.3 REWIND

REWIND

文を実行すると,指定されたファイルは,その始点に位置付けられる。

注記

9.57

ファイルが既に始点に位置付けられているとき,この文の実行は,そのファイルの位置決めに

対して何も効果を及ぼさない。

接続されていて存在しないファイルに対して,

REWIND

文を実行してもよいが,いずれのファイルに対しても何

も効果がない。

9.58

REWIND

文の例を次に示す。

REWIND 10

9.8 FLUSH

FLUSH

(FLUSH statement)

の形式は次のとおりとする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

179

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R927

FLUSH

is

FLUSH

ファイル装置番号

or

FLUSH (

一掃指定子並び

)

R928

一掃指定子

is

[

UNIT =

]

ファイル装置番号

or

IOSTAT =

スカラ整変数

or

IOMSG =

入出力メッセージ変数

or

ERR =

文番号

C944

(R928)

各指定子は,一掃指定子並びに

2

回以上指定してはならない。

C945

(R928)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,一掃指定子並びの最初の項目でなければならない。

C946

(R928) ERR

指定子に指定する文番号は,その

FLUSH

文と同じ有効域内の飛び先文の文番号でなけれ

ばならない。

IOSTAT

指定子,

IOMSG

指定子 及び

ERR

指定子は,

9.10

で規定する。

IOSTAT

指定子に指定した変数は,誤

りが発生したときは処理系依存の正の値で,処理系依存の一掃操作が成功したときはゼロで,指定した装置が一掃操

作に対応していないときは処理系依存の負の値で確定とならなければならない。

FLUSH

文を実行すると,データが他の処理から参照可能であるように外部ファイルに書かれるか,

Fortran

以外に

よって外部ファイルに置かれたデータが

READ

文で参照可能であるようにする。その動作は,処理系に依存する。

接続されているが存在していないファイルに対して

FLUSH

文を実行してもよいが,いずれのファイルに対しても

何も効果がない。

FLUSH

文は,ファイル位置については効果がない。

注記

9.59

この規格ではファイル記憶場所の機構については規定しないので,一掃操作の実際の意味につ

いて厳密に定義しない。その趣旨は,一掃操作によって,ファイルに書いたすべてのデータが他の処

理 又は 装置に対して参照可能となったり,後続の入力処理でプログラムから参照可能となるように

他の処理 又は 装置によって直近のデータがファイルに加えられたりすることである。このことは一

般に

入出力バッファの一掃操作

と呼ばれている。

9.60

FLUSH

文の例を,次に示す。

FLUSH (10, IOSTAT = N)

9.9

ファイル問合せ

INQUIRE

文は,特定の名前付きファイルの性質 又は 特定の装置の接続の性質について問い合わせるのに用いる。

INQUIRE

文には,三つの形式がある。すなわち,

FILE

指定子を使用する ファイル

INQUIRE

(inquire by file)

UNIT

指定子を使用する 装置

INQUIRE

(inquire by unit)

,及び

IOLENGTH

指定子だけを使用する 出力並び

IN

QUIRE

(inquire by output list)

とする。指定子に対する値の代入は,代入文の規則に従う。

INQUIRE

文は,ファイルが装置に接続される以前,接続されている間 及び 接続された以後のいずれの時点で実

行してもよい。

INQUIRE

文で代入されるすべての値は,その文が実行された時点の値とする。

R929

INQUIRE

is

INQUIRE (

問合せ指定子並び

)

or

INQUIRE ( IOLENGTH =

スカラ整変数

)

出力項目並び

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

180

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.61

INQUIRE

文の例を,次に示す。

INQUIRE (IOLENGTH = IOL) A (1:N)

INQUIRE (UNIT = JOAN, OPENED = LOG_01, NAMED = LOG_02, &

&

FORM = CHAR_VAR, IOSTAT = IOS)

9.9.1

問合せ指定子

INQUIRE

文の三つの形のうち,ファイル

INQUIRE

文 及び 装置

INQUIRE

文では,制約に従って次の指定子が

使用できる。

R930

問合せ指定子

is

[

UNIT =

]

ファイル装置番号

or

FILE =

ファイル名記述式

or

ACCESS =

スカラ基本文字変数

or

ACTION =

スカラ基本文字変数

or

ASYNCHRONOUS =

スカラ基本文字変数

or

BLANK =

スカラ基本文字変数

or

DECIMAL =

スカラ基本文字変数

or

DELIM =

スカラ基本文字変数

or

DIRECT =

スカラ基本文字変数

or

ENCODING =

スカラ基本文字変数

or

ERR =

文番号

or

EXIST =

スカラ基本論理変数

or

FORM =

スカラ基本文字変数

or

FORMATTED =

スカラ基本文字変数

or

ID =

スカラ整数式

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

or

NAME =

スカラ基本文字変数

or

NAMED =

スカラ基本論理変数

or

NEXTREC =

スカラ整変数

or

NUMBER =

スカラ整変数

or

OPENED =

スカラ基本論理変数

or

PAD =

スカラ基本文字変数

or

PENDING =

スカラ基本論理変数

or

POS =

スカラ整変数

or

POSITION =

スカラ基本文字変数

or

READ =

スカラ基本文字変数

or

READWRITE =

スカラ基本文字変数

or

RECL =

スカラ整変数

or

ROUND =

スカラ基本文字変数

or

SEQUENTIAL =

スカラ基本文字変数

or

SIGN =

スカラ基本文字変数

or

SIZE =

スカラ整変数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

181

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

STREAM =

スカラ基本文字変数

or

UNFORMATTED =

スカラ基本文字変数

or

WRITE =

スカラ基本文字変数

C947

(R930)

各指定子は,問合せ指定子並びに

2

回以上指定してはならない。

C948

(R930)

問合せ指定子は,

FILE

指定子 又は

UNIT

指定子のいずれかを含まなければならない。

C949

(R930)

装置

INQUIRE

文で省略可能な文字列

UNIT=

UNIT

指定子から省略する場合,ファイル装置

番号は,問合せ指定子並びの最初の項目でなければならない。

C950

(R930) ID

指定子を指定する場合,

PENDING

指定子も指定しなければならない。

ファイル装置番号の値は,負ではないか 又は 組込みモジュール

ISO FORTRAN ENV

(

13.8.2

)

の名前付き定数

INPUT UNIT

OUTPUT UNIT

若しくは

ERROR UNIT

の一つと同じでなければならない。

指定子の結果の値が文字型であるとき,

NAME

指定子以外の結果の値は,大文字とする。

INQUIRE

文の実行中に誤り条件が発生すると,問合せ指定子の変数は,

IOSTAT

指定子 及び

IOMSG

指定子の変

数を除き不定となる。

IOSTAT

指定子,

ERR

指定子 及び

IOMSG

指定子は,

9.10

で規定する。

9.9.1.1 INQUIRE

文の

FILE

指定子

FILE

指定子のファイル名記述式の値は,問い合わせるファイルの名前を指定する。名前付きファイルは,存在す

る必要もないし,装置と接続されている必要もない。ファイル名記述式の値は,ファイル名として処理系で許される

形のものでなければならない。文字列内の後続空白は,無視される。大文字と小文字の区別の扱いは,処理系依存と

する。

9.9.1.2 INQUIRE

文の

ACCESS

指定子

ACCESS

指定子のスカラ基本文字変数には,そのファイルが順番探査として接続されている場合,

SEQUENTIAL

が代

入される。直接探査として接続されている場合,

DIRECT

が代入される。流れ探査として接続されている場合,

STREAM

が代入される。接続されていない場合,

UNDEFINED

が代入される。

9.9.1.3 INQUIRE

文の

ACTION

指定子

ACTION

指定子のスカラ基本文字変数には,そのファイルが入力専用として接続されている場合,

READ

が代入さ

れる。出力専用として接続されている場合,

WRITE

が代入される。入力と出力の両方が可能であるとして接続されて

いる場合,

READWRITE

が代入される。接続されていない場合,

UNDEFINED

が代入される。

9.9.1.4 INQUIRE

文の

ASYNCHRONOUS

指定子

ASYNCHRONOUS

指定子のスカラ基本文字変数には,ファイルが接続されていてその装置で非同期入出力が許さ

れている場合,

YES

が代入される。ファイルが接続されていてその装置で非同期入出力が許されていない場合,

NO

代入される。ファイルが接続されていない場合,スカラ基本文字変数には,

UNDEFINED

が代入される。

9.9.1.5 INQUIRE

文の

BLANK

指定子

BLANK

指定子のスカラ基本文字変数には,書式付き入出力としての接続で有効な空白解釈モードに対応して,

ZERO

又は

NULL

が代入される。接続されていない場合 及び 書式付き入出力以外で接続されている場合,スカラ基本文字

変数には,

UNDEFINED

が代入される。

9.9.1.6 INQUIRE

文の

DECIMAL

指定子

DECIMAL

指定子のスカラ基本文字変数には,書式付き入出力としての接続で有効な小数編集モードに対応して,

COMMA

又は

POINT

が代入される。接続されていない場合 及び 書式付き入出力以外で接続されている場合,スカラ基

本文字変数には,

UNDEFINED

が代入される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

182

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

9.9.1.7 INQUIRE

文の

DELIM

指定子

DELIM

指定子のスカラ基本文字変数には,書式付き入出力としての接続で有効な囲み記号モードに対応して,

APOSTROPHE

QUOTE

又は

NONE

が代入される。接続されていない場合 及び 書式付き入出力以外で接続されている場

合,

UNDEFINED

が代入される。

9.9.1.8 INQUIRE

文の

DIRECT

指定子

DIRECT

指定子のスカラ基本文字変数には,そのファイルの許容探査法集合が

DIRECT

を含む場合,

YES

が代入さ

れる。含まない場合,

NO

が代入される。処理系が決定できない場合,

UNKNOWN

が代入される。

9.9.1.9 INQUIRE

文の

ENCODING

指定子

ENCODING

指定子のスカラ基本文字変数には,書式付き入出力で接続したファイルの符号化方式が

UTF-8

であ

る場合,

UTF-8

が代入される。ファイルが書式なし入出力で接続されている場合,

UNDEFINED

が代入される。接続さ

れていない場合,ファイルの符号化方式が

UTF-8

であると処理系が判断できるならば,

UTF-8

が代入される。ファイ

ルの符号化方式を処理系が判断できない場合,

UNKNOWN

が代入される。

注記

9.62

処理系が他の特定の符号化方式(例えば,

UTF-16BE

)を提供している場合,

UTF-8

UNDEFINED

又は

UNKNOWN

のいずれでもない値が代入される。

9.9.1.10 INQUIRE

文の

EXIST

指定子

ファイル

INQUIRE

文を実行すると,指定された名前のファイルが存在する場合,

EXIST

指定子のスカラ基本論

理変数に,真の値が代入される。そうでない場合,偽の値が代入される。装置

INQUIRE

文を実行すると,指定した

装置が存在する場合,真の値が代入される。そうでない場合,偽の値が代入される。

9.9.1.11 INQUIRE

文の

FORM

指定子

FORM

指定子のスカラ基本文字変数には,そのファイルが書式付き入出力として接続されている場合,

FORMATTED

が代入される。書式なし入出力として接続されている場合,

UNFORMATTED

が代入される。接続されていない場合,

UNDEFINED

が代入される。

9.9.1.12 INQUIRE

文の

FORMATTED

指定子

FORMATTED

指定子のスカラ基本文字変数には,そのファイルの許容記録形集合が

FORMATTED

を含む場合,

YES

が代入される。含まない場合,

NO

が代入される。処理系が決定できない場合,

UNKNOWN

が代入される。

9.9.1.13 INQUIRE

文の

ID

指定子

ID

指定子の式の値は,指定した装置で未了となっているデータ転送操作を識別するものでなければならない。この

指定子は,

PENDING

指定子

(

9.9.1.20

)

と相互に作用する。

9.9.1.14 INQUIRE

文の

NAME

指定子

NAME

指定子のスカラ基本文字変数には,そのファイルが名前をもつ場合,ファイルの名前の値が代入される。そ

うでない場合,不定となる。

注記

9.63

この指定子をファイル

INQUIRE

文に指定した場合,その値は,

FILE

指定子で与えられたも

のと同じであるとは限らない。しかし,その値は,

OPEN

文の

FILE

指定子のファイル名記述式の値

として利用できるものでなければならない。

処理系は,利用者識別番号,装置名,ディレクトリ 又は 他の適切な情報によって修飾されたファ

イル名を返してもよい。

この変数に代入される値の英大文字と英小文字の区別の扱いは,処理系依存とする。

9.9.1.15 INQUIRE

文の

NAMED

指定子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

183

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

NAMED

指定子のスカラ基本論理変数には,そのファイルが名前をもつ場合,真の値が代入される。そうでない場

合,偽の値が代入される。

9.9.1.16 INQUIRE

文の

NEXTREC

指定子

NEXTREC

指定子のスカラ整変数には,直接探査として接続されているファイルにおいて,直前に読まれた 又は

書かれた記録番号を

n

として,

n

+1

の値が代入される。ファイルが接続されていて,かつ 接続されて以後読み書き

された記録がない場合,スカラ整変数には,

1

が代入される。ファイルが直接探査として接続されているのでない場

合 及び ファイル位置がそれ以前の誤り条件のために不定の場合,スカラ整変数は,不定となる。指定した装置に未

了のデータ転送操作がある場合,すべての未了のデータ転送が完了したと仮定して算出した値が代入される。

9.9.1.17 INQUIRE

文の

NUMBER

指定子

NUMBER

指定子のスカラ整変数には,そのファイルが接続されている装置の外部装置識別子の値が代入される。

そのファイルに接続されている装置が存在しない場合,

1

が代入される。

9.9.1.18 INQUIRE

文の

OPENED

指定子

ファイル

INQUIRE

文を実行すると,指定したファイルが装置に接続されている場合,

OPENED

指定子のスカラ

基本論理変数に,真の値が代入される。そうでない場合,偽の値が代入される。装置

INQUIRE

文を実行すると,指

定した装置がファイルに接続されている場合,真の値が代入される。そうでない場合,偽の値が代入される。

9.9.1.19 INQUIRE

文の

PAD

指定子

PAD

指定子のスカラ基本文字変数には,書式付き入出力としての接続で有効な空白補充モードに対応して,

YES

NO

が代入される。接続されていない場合 及び 書式付き入出力以外で接続されている場合,スカラ基本文字変数に

は,

UNDEFINED

が代入される。

9.9.1.20 INQUIRE

文の

PENDING

指定子

PENDING

指定子は,事前に未了であった非同期データ転送が完了したかどうかを判断するために使用する。デー

タ転送操作は,

INQUIRE

文の実行開始時に未了であるとき,事前に未了であるという。

ID

指定子があり,そこで指定したデータ転送操作が完了している場合,

PENDING

指定子の変数には偽の値が代

入され,

INQUIRE

文は,指定したデータ転送に対して待機操作を実行する。

ID

指定子がなく,その装置における事前に未了であるデータ転送操作のすべてが完了している場合,

PENDING

定子の変数には偽の値が代入され,

INQUIRE

文は,その装置における事前に未了であるデータ転送操作のすべてに

対して待機操作を実行する。

これら以外の場合,

PENDING

指定子の変数には真の値が代入され,待機操作は実行されない。このとき,事前に

未了であるデータ転送は,

INQUIRE

文の実行後も未了のままとなる。

注記

9.64

処理系は,転送が完了したとみなす時点の定義について,かなりの柔軟性をもつ。次のいずれ

の実装方針を採用することもできる。

(1)

INQUIRE

文は,対応する待機操作が終わるまで,非同期データ転送を未完了とみなしてもよ

い。この場合,その装置について事前に未了であるデータ転送がある限り,

PENDING

指定子

は常に真の値を戻す。

(2)

INQUIRE

文は,指定したすべてのデータ転送が完了するのを待ってもよい。この場合,

PEND-

ING

指定子は常に偽の値を戻す。

(3)

INQUIRE

文は,指定したデータ転送操作の状態を実際に検査してもよい。

9.9.1.21 INQUIRE

文の

POS

指定子

POS

指定子のスカラ整変数には,流れ探査として接続したファイルの現在の位置の直後であるファイル記憶単位の

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

184

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

番号が代入される。ファイルが終点に位置付けられている場合,変数には,ファイル中の最大番号のファイル記憶単

位の番号より

1

だけ大きい値が代入される。ファイルが流れ探査として接続されていないか 又は ファイル位置がそ

れ以前の誤り条件のために不定である場合,変数は不定となる。

9.9.1.22 INQUIRE

文の

POSITION

指定子

POSITION

指定子のスカラ基本文字変数には,

OPEN

文によって始点に位置付けられるように接続されているファ

イルの場合,

REWIND

が代入される。

OPEN

文によってファイル終了記録の直前 又は 終点に位置付けられるように接

続されているファイルの場合,

APPEND

が代入される。

OPEN

文によってその位置を変えることなしに接続されてい

る場合,

ASIS

が代入される。接続されていない場合 及び 直接探査として接続されている場合,

UNDEFINED

が代入さ

れる。ファイルが接続されてから再位置付けされた場合,処理系依存の値が代入される。その処理系依存の値は,始

点に位置付けられているのでない場合には,

REWIND

であってはならない。ファイル終了記録が直後記録であるよう

に位置付けられているのでない場合,及び ファイル終了記録がなくて終点に位置付けられているのでない場合には,

APPEND

であってはならない。

9.9.1.23 INQUIRE

文の

READ

指定子

READ

指定子のスカラ基本文字変数には,そのファイルの許容操作集合が

READ

を含む場合,

YES

が代入される。

含まない場合,

NO

が代入される。処理系が決定できない場合,

UNKNOWN

が代入される。

9.9.1.24 INQUIRE

文の

READWRITE

指定子

READWRITE

指定子のスカラ基本文字変数には,そのファイルの許容操作集合が

READWRITE

を含む場合,

YES

代入される。含まない場合,

NO

が代入される。処理系が決定できない場合,

UNKNOWN

が代入される。

9.9.1.25 INQUIRE

文の

RECL

指定子

RECL

指定子のスカラ整変数には,直接探査として接続されているファイルの記録長の値 又は 順番探査として接

続されているファイルの最大の記録長の値が代入される。ファイルが書式付き入出力として接続されている場合,長

さは,基本文字型の文字だけを含む記録全部に対する文字の個数とする。ファイルが書式なし入出力として接続され

ている場合,長さは,記憶単位による。ファイルが接続されていない場合 又は 流れ探査として接続されている場合,

スカラ基本整変数は,不定となる。

9.9.1.26 INQUIRE

文の

ROUND

指定子

ROUND

指定子のスカラ基本文字変数には,書式付き入出力としての接続で有効となっている入出力丸めモードに対

応して,

UP

DOWN

ZERO

NEAREST

COMPATIBLE

又は

PROCESSOR DEFINED

が代入される。ファイルが接続されてい

ない場合か 又は 書式付き入出力として接続されていない場合,

UNDEFINED

が代入される。現在有効な入出力丸めモード

UP

DOWN

ZERO

NEAREST

及び

COMPATIBLE

とは異なる振る舞いをする場合にだけ,処理系は

PROCESSOR DEFINED

を代入する。

9.9.1.27 INQUIRE

文の

SEQUENTIAL

指定子

SEQUENTIAL

指定子のスカラ基本文字変数には,そのファイルの許容探査法集合が

SEQUENTIAL

を含む場合,

YES

が代入される。含まない場合,

NO

が代入される。処理系が決定できない場合,

UNKNOWN

が代入される。

9.9.1.28 INQUIRE

文の

SIGN

指定子

SIGN

指定子のスカラ基本文字変数には,書式付き入出力としての接続で有効となっている符号モードに対応して,

PLUS

SUPPRESS

又は

PROCESSOR DEFINED

が代入される。ファイルが接続されていない場合 又は 書式付き入出力と

して接続されていない場合,

UNDEFINED

が代入される。

9.9.1.29 INQUIRE

文の

SIZE

指定子

SIZE

指定子のスカラ整変数には,ファイル記憶単位で測ったファイルの大きさが代入される。ファイルの大きさ

を決定できない場合,

1

が代入される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

185

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

流れ探査として接続されるファイルの場合,ファイルの大きさは,最大の番号をもつファイル記憶単位の番号と

する。

順番探査 又は 直接探査として接続されるファイルの場合,ファイルの大きさは記録中のデータから決まる記憶単

位の個数とは異なってもよく,厳密な関係は処理系依存とする。

9.9.1.30 INQUIRE

文の

STREAM

指定子

STREAM

指定子のスカラ基本文字変数には,そのファイルの許容探査法集合が

STREAM

を含む場合,

YES

が代入さ

れる。含まない場合,

NO

が代入される。処理系が決定できない場合,

UNKNOWN

が代入される。

9.9.1.31 INQUIRE

文の

UNFORMATTED

指定子

UNFORMATTED

指定子のスカラ基本文字変数には,そのファイルの許容記録形集合が

UNFORMATTED

を含む場合,

YES

が代入される。含まない場合,

NO

が代入される。処理系が決定できない場合,

UNKNOWN

が代入される。

9.9.1.32 INQUIRE

文の

WRITE

指定子

WRITE

指定子のスカラ基本文字変数には,そのファイルの許容操作集合が

WRITE

を含む場合,

YES

が代入される。

含まない場合,

NO

が代入される。処理系が決定できない場合,

UNKNOWN

が代入される。

9.9.2

問合せ指定子の制限

ファイル

INQUIRE

文の問合せ指定子並びは,

FILE

指定子を必ず一つだけ含まなければならず,

UNIT

指定子を含

んではならない。装置

INQUIRE

文の問合せ指定子並びは,

UNIT

指定子を必ず一つだけ含まなければならず,

FILE

指定子を含んではならない。指定される装置は,存在する必要もないし,ファイルと接続されている必要もない。装

置がファイルと接続されている場合,問合せは,接続について 及び 接続されているファイルについてなされる。

9.9.3

出力並び

INQUIRE

出力並び

INQUIRE

文は,一つの

IOLENGTH

指定子と出力項目並びだけを含む。

IOLENGTH

指定子のスカラ整変数には,指定した出力項目並びのデータを書式なしファイルに格納するために必

要なファイル記憶単位の個数が代入される。その値は,同じ並びを入力項目並び 又は 出力項目並びとしてもつ入出

力文があるファイルを,書式なし直接探査として接続する

OPEN

文において,

RECL

指定子の値として利用できる

ものでなければならない。

INQUIRE

文の出力項目並びは,

9.5.2

で規定したように利用者定義の派生型入出力手続を必要とする,派生型並び

項目を含んではならない。出力項目並びに派生型の並び項目を指定すると,利用者定義の派生型入出力手続を呼び出

さないと仮定した値が

IOLENGTH

指定子に戻される

9.10

誤り条件

,

記録終了条件 及び ファイル終了条件

入出力誤り条件の集合は,処理系依存とする。

記録終了条件

(end-of-record condition)

は,ファイルが流れファイルであって現在記録がファイルの終わりである

ためにファイル終了条件が発生するか 又は 停留入力文が現在記録の終わりを越えてデータを転送しようとした場合

に発生する。

ファイル終了条件

(end-of-file condition)

は,次のいずれかの場合に発生する。

(1)

順番探査として接続されたファイルを読んでいる最中にファイル終了記録を検出した場合。

(2)

内部ファイルの終わりを越えて記録を読もうとした場合。

(3)

流れファイルの終わりを越えて読もうとした場合。

ファイル終了条件は,入力文の実行を開始したときに発生することがある。入出力項目並びと書式仕様との相互作

用によって,二つ以上の記録を読んだ場合,書式付き入力文の実行の途中にファイル終了条件が発生することがある。

ファイル終了条件は,流れ入力文の実行の途中に発生することもある。

9.10.1

誤り条件 及び

ERR

指定子

入出力文の実行中に誤り条件が発生すると,ファイル位置は,不定となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

186

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

IOSTAT

指定子 及び

ERR

指定子を含まない入出力文の実行中に誤り条件が発生した場合,プログラムの実行は,

終了する。

ERR

指定子 又は

IOSTAT

指定子を含む入出力文の実行中に誤り条件が発生した場合,次のとおりとなる。

(1)

もしあれば,入出力並びの処理を終了する。

(2)

文がデータ転送文であるか 又は 誤り条件が待機操作中に発生した場合,転送を開始した文のすべての

DO

変数

は,不定となる。

(3)

IOSTAT

指定子を含む場合,

IOSTAT

指定子のスカラ整変数は,

9.10.4

のとおりに確定となる。

(4)

IOMSG

指定子を含む場合,入出力メッセージ変数は,

9.10.5

のとおりに確定となる。

(5)

文が

READ

文で

SIZE

指定子を含む場合,

SIZE

指定子のスカラ整変数は,

9.5.1.14

のとおりに確定となる。

(6)

文が

READ

文であるか 又は

READ

文が開始した転送の待機操作中に誤り条件が発生した場合,転送を開始し

た文のすべての入力項目 又は 変数群要素は,不定となる。

(7)

ERR

指定子を含む場合,実行は,

ERR

指定子で指定した文番号をもつ文に移る。

9.10.2

ファイル終了条件 及び

END

指定子

IOSTAT

指定子 及び

END

指定子を含まない入出力文の実行中にファイル終了条件が発生した場合,プログラムの

実行は,終了する。

END

指定子 又は

IOSTAT

指定子を含む入出力文の実行中にファイル終了条件が発生し,誤り条

件が発生しない場合,次のとおりとなる。

(1)

もしあれば,入力並びの処理を終了する。

(2)

文がデータ転送文であるか 又は ファイル終了条件が待機操作中に発生した場合,転送を開始した文のすべての

DO

変数は,不定となる。

(3)

文が

READ

文であるか 又は

READ

文が開始した転送の待機操作中に誤り条件が発生した場合,転送を開始し

た文のすべての入力項目 又は 変数群要素は,不定となる。

(4)

入力文に指定したファイルが外部ファイルである場合,ファイル終了記録の直後に位置付けられる。

(5)

IOSTAT

指定子を含む場合,

IOSTAT

指定子のスカラ整変数は,

9.10.4

のとおりに確定となる。

(6)

IOMSG

指定子を含む場合,入出力メッセージ変数は,

9.10.5

のとおりに確定となる。

(7)

END

指定子を含む場合,実行は,

END

指定子で指定した文番号をもつ文に移る。

9.10.3

記録終了条件 及び

EOR

指定子

IOSTAT

指定子 及び

EOR

指定子を含まない入出力文の実行中に記録終了条件が発生した場合,プログラムの実行

は,終了する。

EOR

指定子 又は

IOSTAT

指定子を含む入出力文の実行中に記録終了条件が発生し,誤り条件が発生

しない場合,次のとおりとなる。

(1)

空白補充モードが

YES

である場合,その記録がもっているより多い文字を要求する有効な入力並び項目

(

9.5.2

)

及び 対応するデータ編集記述子を満足させるために,記録に空白を詰める。空白補充モードが

NO

である場合,

入力並び項目は,不定となる。

(2)

もしあれば,入力並びの処理を終了する。

(3)

文がデータ転送文であるか 又は 記録終了条件が待機操作中に発生した場合,転送を開始した文のすべての

DO

変数は,不定となる。

(4)

入力文に指定したファイルは,現在記録の直後に位置付けられる。

(5)

IOSTAT

指定子を含む場合,

IOSTAT

指定子のスカラ整変数は,

9.10.4

のとおりに確定となる。

(6)

IOMSG

指定子を含む場合,入出力メッセージ変数は,

9.10.5

のとおりに確定となる。

(7)

SIZE

指定子を含む場合,

SIZE

指定子のスカラ整変数は,

9.5.1.14

のとおりに確定となる。

(8)

EOR

指定子を含む場合,実行は,

EOR

指定子で指定した文番号をもつ文に移る。

9.10.4 IOSTAT

指定子

IOSTAT

指定子をもつ入出力文を実行すると,

IOSTAT

指定子に指定された変数は,次の値で確定となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

187

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(1)

誤り条件,ファイル終了条件 及び 記録終了条件が検出されない場合は,ゼロ。

(2)

誤り条件が検出された場合は,処理系依存の正の整数値。

(3)

ファイル終了条件が検出され,かつ 誤り条件が検出されない場合は,処理系依存の負の整定数

IOSTAT END

(

13.8.2.5

)

(4)

記録終了条件が検出され,かつ 誤り条件もファイル終了条件も検出されない場合,処理系依存のファイル終了時

の値とは異なる負の整定数

IOSTAT EOR

(

13.8.2.6

)

注記

9.65

ファイル終了条件は,順番探査入力文の実行中にだけ発生する。記録終了条件は,停留入力文

の実行中にだけ発生する。例を次に示す。

READ (FMT = "(E8.3)", UNIT = 3, IOSTAT = IOSS) X

IF (IOSS < 0) THEN

!

装置番号

3

に接続されているファイルに対して,ファイル終了時の処理を行う。

CALL END_PROCESSING

ELSE IF (IOSS > 0) THEN

!

誤り処理を行う。

CALL ERROR_PROCESSING

END IF

9.10.5 IOMSG

指定子

入出力文の実行中に誤り条件,ファイル終了条件 又は 記録終了条件が発生すると,処理系は,入出力メッセージ

変数に説明のためのメッセージを代入しなければならない。これらの条件が発生していないとき,処理系は,入出力

メッセージ変数の値を変えてはならない。

9.11

入出力文の制限

装置 又は 装置に接続されているファイルが,ある入出力文の実行に必要な性質をすべては備えていない場合,そ

れらの入出力文はその装置を参照してはならない。

他の入出力文の実行中に実行される入出力文を,再帰入出力文

(recursive input/output statement)

とする。

再帰入出力文は,子データ転送文が親データ転送文の外部装置を識別できることを除いて,外部装置を識別しては

ならない。

入出力文は,確立した書式仕様の値を変更する要因となってはならない。

再帰入出力文は,再帰

WRITE

文がその再帰

WRITE

文で識別した内部装置を変更できることを除いて,内部装置

の値を変更してはならない。

入出力文の指定子の値は,入力項目,入出力

DO

形反復の

DO

変数,又は その文のデータ転送指定子並び 若しく

は 問合せ指定子並びの他の指定子の確定 若しくは 評価の,いずれにも依存してはならない。

入出力文の指定子に指定した変数の添字 又は 部分列の上下限の値は,入力項目,入出力

DO

形反復の

DO

変数,

又は その文のデータ転送指定子並び 若しくは 問合せ指定子並びの他の指定子の確定 若しくは 評価の,いずれにも

依存してはならない。

データ転送文において,

IOSTAT

指定子,

IOMSG

指定子 又は

SIZE

指定子に指定される変数は,データ転送入出

力項目並び

(

9.5.2

)

中の実体,変数群要素並び中の実体,又は そのデータ転送入出力項目並び中の

DO

形反復の

DO

変数と結合されていてはならない。

データ転送文において,

IOSTAT

指定子,

IOMSG

指定子 又は

SIZE

指定子に配列要素が指定された場合,その添

字の値は,データ転送,

DO

形反復の制御,及び データ転送指定子並び中の他の指定子の確定 又は 評価の影響を受

けてはならない。

INQUIRE

文の指定子として使われて,その結果確定 若しくは 不定となる変数,又は それらと結合している要素

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

188

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

を,その

INQUIRE

文中の別の指定子で使用してはならない。

入出力文の実行中に

STOP

文を実行してはならない。

注記

9.66

式の評価

(

7.1.8

)

に関する制約によって,ある種の副作用も禁止されている。

10

入出力編集

書式は,入出力文と組み合わせて使用し,データの内部表現と書式付き記録列としての文字列との間の編集を指示

する情報を与える。

入出力文における

FMT

指定子

(

9.5.1.1

)

は,

FORMAT

文を参照してもよいし書式仕様を含む文字式を参照して

もよい。書式仕様は,明示的な編集情報を与える。

FMT

指定子は,並び書式

(

10.9

)

を指示する星印

*

であっても

よい。書式識別子を指定する代わりに,変数群書式

(

10.10

)

を指示する変数群名を指定することもできる。

10.1

書式仕様の書き方

書式仕様の書き方は,次のいずれかとする。

(1)

FORMAT

文中に書く。

(2)

文字式の値として書く。

10.1.1 FORMAT

R1001

FORMAT

is

FORMAT

書式仕様

R1002

書式仕様

is

(

[

書式項目並び

]

)

C1001

(R1001) FORMAT

文には,文番号を付けなければならない。

C1002

(R1002)

書式項目並び中の書式項目を区切るコンマは,次の場合には省略してもよい。

(1)

P

形編集記述子(

10.7.5

参照)と,その直後で書式反復数 が先行してもよい,

F

形,

E

形,

EN

形,

ES

形,

D

形 又は

G

形の編集記述子との間

(2)

書式反復数をもたない斜線編集記述子

(

10.7.2

)

の前

(3)

斜線編集記述子の後

(4)

コロン編集記述子

(

10.7.3

)

の前後

空白文字が書式仕様の最初の左括弧に先行してもよい。空白文字は,文字列編集記述子(

10.8

参照)中を除いて,

書式仕様中の任意の場所に追加してもよく,そのとき書式仕様の解釈には何の影響も及ぼさない。

10.1

FORMAT

文の例を次に示す。

5

FORMAT (1PE12.4, I10)

9

FORMAT (I12, /, ’ Dates: ’, 2(2I3, I5))

10.1.2

文字書式仕様

書式付き入出力文中の書式識別子が文字式である場合,それを評価して得られる文字列の先頭の部分が正しい書式

仕様を形成しなければならない。

注記

10.2

書式仕様は,左括弧で始まり右括弧で終わる。

書式仕様の最後の右括弧までのすべての文字位置は,その入出力文が実行される時点で確定になっていなければな

らず,その文の実行中に再確定したり不定にしたりしてはならない。文字型データに,書式仕様の終わりを示す右括

弧に続く文字位置がある場合,その部分は書式仕様の解釈には影響しないので,確定でなくてもよいしどのような文

字を含んでいてもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

189

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

書式識別子が文字配列である場合,その配列のすべての要素を配列要素順序に従って書き並べて連結したかのよう

に扱われる。書式識別子が文字配列要素である場合は,その配列要素が書式仕様の全体を含んでいなければならない。

注記

10.3

入出力文の書式識別子として文字定数を使用した場合,文字定数の値が正しい書式仕様になる

ように注意しなければならない。特に,アポストロフィで囲んだ書式仕様がアポストロフィ編集記述

子を含む場合には,アポストロフィ編集記述子の囲み記号としては

2

連のアポストロフィを,アポス

トロフィ編集記述子の中に現れる個々のアポストロフィとしては

4

連のアポストロフィを指定しなけ

ればならない。

例えば,文字列

2 ISN’T 3

は,次に示すような様々な出力文と書式仕様の組合せによって書くことができる。

WRITE (6, 100) 2, 3

100 FORMAT (1X, I1, 1X, ’ISN’’T’, 1X, I1)

WRITE (6, ’(1X, I1, 1X, ’’ISN’’’’T’’, 1X, I1)’) 2, 3

WRITE (6, ’(A)’) ’ 2 ISN’’T 3’

一般に,書式仕様を引用符で囲むことによって内部のアポストロフィが

2

連になるのを避けること

ができ,囲み記号をアポストロフィにすることによって内部の引用符が

2

連になるのを避けることが

できる。

10.2

書式項目並びの形

R1003

書式項目

is

[

r

]

データ編集記述子

or

制御編集記述子

or

文字列編集記述子

or

[

r

]

(

書式項目並び

)

R1004

r

is

整定数表現

C1003

(R1004)

r

は,正でなければならない。

C1004

(R1004)

r

に,種別を指定してはならない。

この整定数表現

r

を,書式反復数

(repeat specification)

と呼ぶ。

10.2.1

編集記述子

編集記述子

(edit descriptor)

は,データ編集記述子

(data edit descriptor)

,制御編集記述子

(control edit descriptor)

又は 文字列編集記述子

(character string edit descriptor)

とする。

R1005

データ編集記述子

is

I

w

[

.

m

]

or

B

w

[

.

m

]

or

O

w

[

.

m

]

or

Z

w

[

.

m

]

or

F

w

.

d

or

E

w

.

d

[

E

e

]

or

EN

w

.

d

[

E

e

]

or

ES

w

.

d

[

E

e

]

or

G

w

.

d

[

E

e

]

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

190

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

L

w

or

A

[

w

]

or

D

w

.

d

or

DT

[

文字定数表現

] [

(

値指定並び

)

]

R1006

w

is

整定数表現

R1007

m

is

整定数表現

R1008

d

is

整定数表現

R1009

e

is

整定数表現

R1010

値指定

is

任意符号付き整定数表現

C1005

(R1009)

e

は,正でなければならない。

C1006

(R1006)

w

は,

I

形,

B

形,

O

形,

Z

形 及び

F

形の編集記述子では

0

以上でなければならず,それ以

外の編集記述子では,正でなければならない。

C1007

(R1005)

w

,

m

,

d

e

及び 値指定に,種別を指定してはならない。

C1008

(R1005) DT

形編集記述子の文字定数表現に,種別を指定してはならない。

I

B

O

Z

F

E

EN

ES

G

L

A

D

及び

DT

は,編集の仕方を指示する。

R1011

制御編集記述子

is

位置付け編集記述子

or

[

r

]

/

or

:

or

符号制御編集記述子

or

k

P

or

空白解釈編集記述子

or

丸め編集記述子

or

小数点編集記述子

R1012

k

is

任意符号付き整定数表現

C1009

(R1012)

k

に,種別を指定してはならない。

k

P

において,

k

を けた移動数

(scale factor)

と呼ぶ。

R1013

位置付け編集記述子

is

T

n

or

TL

n

or

TR

n

or

n

X

R1014

n

is

整定数表現

C1010

(R1014)

n

は,正でなければならない。

C1011

(R1014)

n

に,種別を指定してはならない。

R1015

符号制御編集記述子

is

SS

or

SP

or

S

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

191

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R1016

空白解釈編集記述子

is

BN

or

BZ

R1017

丸め編集記述子

is

RU

or

RD

or

RZ

or

RN

or

RC

or

RP

R1018

小数点編集記述子

is

DC

or

DP

T

TL

TR

X

,斜線,コロン,

S

SP

SS

P

BN

BZ

RU

RD

RZ

RN

RC

RP

DC

及び

DP

は,編集の仕方を

指示する。

R1019

文字列編集記述子

is

文字定数表現

C1012

(R1019)

文字定数表現に,種別を指定してはならない。

文字列編集記述子における表現可能文字は,その処理系で表現できる文字でなければならない。

文字列編集記述子は,定数の出力に用いる。入力に用いてはならない。

文字定数中の文字を除いて,編集記述子中の英大文字と英小文字とは等価とする。

10.2.2

(field)

とは,書式制御がデータ編集記述子 又は 文字列編集記述子を処理するときに読み書きされる,入出力記

録の一部分とする。欄幅

(field width)

とは,欄中の文字の個数とする。

10.3

入出力項目並びと書式との対応

書式仕様を用いた書式付きデータ転送(

9.5.3.4.2

参照)を開始すると,書式制御

(format control)

が始まる。書

式制御の動作は,次の二つの情報によって定まる。

(1)

書式仕様中の次の編集記述子

(2)

入出力項目並び中に次有効項目があれば,その項目

入出力項目並び中に有効項目が少なくとも一つある場合には,書式仕様中にデータ編集記述子が少なくとも一つは

なければならない。

注記

10.4

( )

の形をした空の書式仕様は,入出力項目並びが有効項目(

9.5.3.4

参照)をもたない場合

にだけ用いることができる。文字長ゼロの項目は,有効項目である。しかし,大きさゼロの配列 及び

繰返し数ゼロの

DO

形反復は有効項目ではない。

書式仕様は左から右へと解釈される。例外は,書式反復数

r

の付いた書式項目 及び この箇条の最後に示す書式制

御の戻りである。

書式反復数の付いた書式項目は,その書式項目から書式反復数を除いた部分を

r

個コンマで区切って並べたものと

して処理される。

注記

10.5

書式反復数を省略したときは,書式反復数

1

を指定したときと等価に扱われる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

192

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

書式仕様中の一つのデータ編集記述子には,入出力項目並びで指定される一つの有効項目が対応する(

9.5.2

参照)

。ただし,複素数型の一つの入出力項目には,二つの

F

形,

E

形,

EN

形,

ES

形,

D

形 又は

G

形の編集記述子が対

応する。制御編集記述子 及び 文字列編集記述子には対応する入出力項目はなく,書式制御は記録と直接に情報を交

換する。

書式制御が書式仕様中のデータ編集記述子に出会うと,入出力項目並び中にそれに対応する有効項目があるか否か

が調べられる。対応する項目があれば,書式制御はその項目と記録との間で編集された情報を交換し,次へ進む。対

応する項目がなければ,書式制御は終了する。

書式制御が書式仕様中のコロン編集記述子に出会い,かつ 有効入出力項目が残っていなければ,書式制御は終了

する。

書式制御が書式仕様全体を閉じる右括弧に出会い,かつ 有効入出力項目が残っていなければ,書式制御は終了す

る。有効入出力項目が残っていれば,ファイルは,斜線編集記述子(

10.7.2

参照)が処理されたときの位置付けと同

じ位置付けをされる。その後,書式制御は,

DT

形編集記述子を除いて数えた最後から

2

番目の右括弧で終わってい

る書式項目の始めに戻る。そのような右括弧がなければ,書式制御は書式仕様の先頭の左括弧に戻る。書式制御の戻

りが起こる場合,書式仕様の再使用部分は,データ編集記述子を少なくとも一つは含んでいなければならない。書式

制御が書式反復数の付いた括弧に戻る場合,その書式反復数も再使用される。書式制御の戻りそれ自体は,変更可能

なモード(

9.4.1

)に対して何の影響も与えない。

10.6

次の書式仕様

10 FORMAT (1X, 2(F10.3, I5))

は,次の出力項目並び

WRITE(10, 10) 10.1, 3, 4.7, 1, 12.4, 5, 5.2, 6

とともに用いると,次の書式仕様と同じ出力を生成する。

10 FORMAT (1X, F10.3, I5, F10.3, I5 / F10.3, I5, F10.3, I5)

10.4

書式制御による位置付け

データ編集記述子 又は 文字列編集記述子のそれぞれが処理されると,ファイルは,現在記録の中の最後に読み書

きされた文字の後ろに位置付けされる。

T

形,

TL

形,

TR

形 又は

X

形の編集記述子のそれぞれが処理されると,ファイルは,

10.7.1

の規定に従って位

置付けされる。斜線編集記述子が処理されると,ファイルは,

10.7.2

の規定に従って位置付けされる。

書式付き流れ出力において,

A

形編集記述子によってファイルが位置付けされてもよい(

10.6.3

)。

10.3

に定めた書式制御の戻りが起こると,ファイルは,斜線編集記述子が処理されたときと同じ位置付け(

10.7.2

参照)をされる。

読込み操作中に直後の記録が読まれるときには,現在記録の中の未処理の文字は,すべて読み飛ばされる。

10.5

小数点記号

小数点記号

(decimal symbol)

は,内部ファイル中 又は 外部ファイル中の実数の

10

進表現で,整数部と小数部と

を分ける文字である。小数点編集モードが

POINT

であるとき,小数点記号は,ピリオドとする。小数点編集モードが

COMMA

であるとき,小数点記号は,コンマとする。

10.6

データ編集記述子

データ編集記述子は,内部表現との間のデータの変換を引き起こす。書式付き流れ出力において,

A

形データ編集

記述子によってファイルが位置付けされてもよい。入力において,誤り条件,ファイル終了条件 又は 記録終了条件

が発生しなければ,指定した変数が確定される。出力において,指定した式が評価される。

Unicode

ファイルからの入力では,

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

193

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(1)

ASCII

文字変数に対応する記録中の文字は,

ISO 10646

文字型の大小順序で

127

以下の位置でなければならない。

(2)

基本文字変数に対応する記録中の文字は,基本文字型で表現できなければならない。

Unicode

ファイルでないファイルからの入力では,

(1)

文字変数に対応する記録中の文字の種別は,文字変数と同じでなければならない。

(2)

数値 又は 論理変数に対応する記録中の文字は,基本文字型でなければならない。

Unicode

ファイルへの出力では,記録に転送されるすべての文字は,

ISO 10646

文字型である。文字型の入出力並

び項目 又は 文字列編集記述子が

ISO 10646

文字型で表現できない文字を含んでいる場合,その結果は処理系依存と

する。

Unicode

ファイルでないファイルへの出力では,文字列編集記述子の処理の結果として,又は 数値,論理 若しく

は 基本文字のデータ要素の評価の結果として記録に転送される文字は,基本文字型とする。

10.6.1

数値編集

I

形,

B

形,

O

形,

Z

形,

F

形,

E

形,

EN

形,

ES

形,

D

形 及び

G

形の編集記述子は,整数型,実数型 及び 複素

数型のデータの入出力を指定する。次の共通規定を適用する。

(1)

入力において,欄中の先行空白は意味がない。入力欄が

IEEE

例外仕様(

10.6.1.2.1

)でなければ,先行空白以

外の空白の解釈の仕方は,空白解釈モード(

10.7.6

)によって決まる。正符号は,省略可能とする。すべてが空

白である欄の値は,ゼロとみなされる。

(2)

F

形,

E

形,

EN

形,

ES

形,

D

形 及び

G

形の編集による入力において,入力欄中に小数点記号があれば,それ

が編集記述子による小数点記号位置指定よりも優先する。入力欄中の数字列は,処理系がデータの値を近似する

のに必要とするより長くてもよい。

(3)

I

形,

F

形,

E

形,

EN

形,

ES

形,

D

形 及び

G

形の編集による出力において,欄中での正 又は ゼロの値の外部

表現には,

S

形,

SP

形 及び

SS

形の編集記述子の制御 又は 処理系の制御によって,正符号が付くことがある。

この正符号を任意正符号と呼ぶ。負の値の外部表現には,負符号が付く。処理系は,書式付き出力記録の中に負

符号の付いたゼロを生成してはならない。

(4)

出力において,外部表現は欄中で右寄せした形をとる。編集によって生成される文字の個数が欄幅よりも小さけ

れば,欄の先頭に空白が挿入される。

(5)

出力において,編集によって生成される文字の個数が欄幅を超える場合 又は 指数が

E

w.d

E

e

形,

EN

w.d

E

e

形,

ES

w.d

E

e

形 若しくは

G

w.d

E

e

形の編集記述子によって指定された長さを超える場合,欄幅

w

の欄全体が星印

で埋められる。ただし,省略可能な文字を省略すれば欄幅を超えないときには,処理系は,星印を生成してはな

らない。

注記

10.7

SP

形編集記述子が有効となっているときの正符号は,省略可能ではない。

(6)

I

形,

B

形,

O

形,

Z

形 及び

F

形の編集による出力において,欄幅

w

はゼロであってもよい。その場合,処理

系は,欄を星印で埋めない最小の正の幅を選択する。入力において,欄幅

w

はゼロであってはならない。

10.6.1.1

整数型の編集

I

w

形,

I

w.m

形,

B

w

形,

B

w.m

形,

O

w

形,

O

w.m

形,

Z

w

形 及び

Z

w.m

形の編集記述子は,

w

がゼロの場合

を除き編集する欄が

w

けたを占めることを指示する。

w

がゼロの場合は,処理系が欄幅を選択する。入力において,

w

はゼロであってはならない。対応する入出力項目は,整数型でなければならない。整数型データを編集するのに

G

形編集記述子を用いることもできる(

10.6.4.1.1

参照)。

入力において,

m

は効果をもたない。

I

形編集記述子に対する入力欄では,欄中の文字列は,空白の解釈の仕方を除けば任意符号付き数字列

(R408)

の形

でなければならない。

B

形,

O

形 又は

Z

形の編集記述子に対する入力欄中の文字列は,それぞれ

2

進数字,

8

進数字

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

194

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

又は

16

進数字(

R412

R414

参照)で構成しなければならない。処理系が英大文字 及び 英小文字の両方を表現可能

な場合,

16

進入力欄における英小文字の

16

進数字

a

f

は,対応する英大文字の

16

進数字と等価とする。

I

w

形編集記述子に対する出力欄の構成は,必要ならば空白,続いて内部の値が負であれば負符号,そうでなけれ

ば任意正符号,続いて内部の値の絶対値を先行ゼロの付かない数字列の形に編集したものとする。

注記

10.8

数字列は,

1

個以上の数字を含む。

B

w

形,

O

w

形 又は

Z

w

形の編集記述子に対する出力欄の構成は,必要ならば空白,続いて内部データをその値を

もつ先行ゼロの付かない

2

進定数表現,

8

進定数表現 又は

16

進定数表現の数字部分の形にそれぞれ編集したものと

する。

注記

10.9

2

進定数表現,

8

進定数表現 及び

16

進定数表現は,

1

個以上の数字を含む。

I

w.m

形,

B

w.m

形,

O

w.m

形 又は

Z

w.m

形の編集記述子に対する出力欄の構成は,それぞれ,

I

w

形,

B

w

形,

O

w

形 又は

Z

w

形の編集記述子の場合と同じとする。ただし,定数表現の数字部分が

m

けた未満の場合には,

m

たになるように先行ゼロが付けられる。

m

の値は,

w

がゼロである場合を除いて,

w

の値を超えてはならない。

m

ゼロで,かつ 内部の値がゼロである場合,出力される欄は,符号制御の効果にかかわらず空白文字だけからなる。

m

及び

w

が共にゼロであって,内部の値がゼロである場合は,一つの空白文字が生成される。

10.6.1.2

実数型 及び 複素数型の編集

F

形,

E

形,

EN

形,

ES

形 及び

D

形の編集記述子は,実数型データ 及び 複素数型データの編集を指定する。

F

形,

E

形,

EN

形,

ES

形 又は

D

形の編集記述子に対応する入出力項目は,実数型 又は 複素数型でなければならな

い。実数型データ 及び 複素数型データを編集するのに

G

形編集記述子を用いることもできる(

10.6.4.1.2

参照)。

IEEE

例外仕様 又は 数値入力欄の指数部における英小文字は,対応する英大文字と等価とする。

10.6.1.2.1 F

形編集

F

w.d

形編集記述子は,欄が

w

けたを占め,そのうちの小数部が

d

けたからなることを指示する。

w

がゼロの場合

は,処理系が欄幅を選択する。入力において,

w

はゼロであってはならない。

入力欄の基本形は,

IEEE

例外仕様 又は 省略可能な符号,続いて小数点記号を一つ含んでもよい数字列とする。数

字列は,一つ以上の数字 又は ゼロと解釈される空白を含まなければならない。入力での

d

は,入力欄が小数点記号

を含む場合,効果をもたない。小数点記号を含まない場合,数字列の右側の

d

けたが小数部とみなされる。このとき,

必要ならば先行ゼロが想定される。数字列は,処理系が定数の値を近似するのに必要とするより長くてもよい。この

基本形に続いて,次のいずれかの形の指数部があってもよい。

(1)

符号付き数字列

(2)

E

に続いて省略可能な空白列,続いて任意符号付き数字列

(3)

D

に続いて省略可能な空白列,続いて任意符号付き数字列

D

を含む指数部は,

E

を含む指数部と等価とする。

注記

10.10

入力欄が指数部を含まない場合,けた移動数(

10.7.5

参照)を

k

とすると,基本形に

k

値の指数部が続いているかのようにみなされる。

IEEE

例外仕様である入力欄は,省略可能な空白に続いて次のいずれかがあり,更に省略可能な空白が続く。

(1)

省略可能な符号に続いて,文字列

’INF’

又は 文字列

’INFINITY’

(2)

省略可能な符号に続く文字列

’NAN’

。括弧に囲まれたゼロ個以上の英数字がその後に続いてもよい。

形式

(1)

で規定した値は,

IEEE

無限大である。処理系が入力値として

IEEE

無限大を取り扱わない場合には,こ

の形式を使用してはならない。形式

(2)

で規定した値は,

IEEE

非数である。処理系が入力値として

IEEE

非数を取

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

195

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

り扱わない場合には,この形式を使用してはならない。入力欄の空白以外の文字が

’NAN’

又は

’NAN()’

だけのとき,

非数の値は,例外非通知非数とする。そうでなければ,非数の値は処理系依存とする。非数である入力欄の符号の解

釈は,処理系依存とする。

内部の値が

IEEE

無限大であるときの出力欄の構成は,必要ならば空白,続いて負の無限大のとき負符号それ以外

のとき省略可能な正符号,続いて文字列

’Inf’

又は

’Infinity’

であり,欄の中で右詰めとする。

w

3

より小さ

い場合は,欄を星印で埋め,

w

3

以上で

8

未満の場合は,

’Inf’

を生成する。

内部の値が

IEEE

非数であるときの出力欄の構成は,必要ならば空白,続いて文字列

’NaN’

,続いて省略可能で引

用符で囲んだ

1

文字以上

w

5

文字以下の処理系依存の英数字であり,欄の中で右詰めとする。

w

3

未満の場合は,

欄を星印で埋める。

注記

10.11

’NaN’

に続く処理系依存の文字は,その特定の非数についての付加情報を与えるものであって

もよい。

内部の値が

IEEE

無限大でも

IEEE

非数でもないとき,出力欄の構成は,必要ならば空白,続いて内部の値が負の

とき負符号,それ以外のとき任意正符号,続いて小数点記号を一つ含む数字列とする。この数字列は,内部の値の絶

対値をけた移動数で修正し,小数点記号以下

d

けたに丸めたものとする。出力欄の値の絶対値が

1

よりも小さい場合,

小数点記号の左隣にゼロを付けるか否かは処理系による。それ以外の場合,処理系は,先行ゼロを付けてはならない。

省略可能なゼロを省略すると出力欄に数字が一つもなくなるときには,処理系は,ゼロを一つ付けなければならない。

10.6.1.2.2 E

形編集 及び

D

形編集

E

w.d

形,

D

w.d

形 及び

E

w.d

E

e

形の編集記述子は,欄が

w

けたを占め,そのうちの小数部が

d

けたからなり,

指数部の整数が

e

けたからなることを指示する。ただし,有効となっているけた移動数が

2

以上であるときは,小数

部は

d

けたよりも短い。入力において

e

は何の効果ももたない。

入力欄の形 及び 解釈は,

F

形編集(

10.6.1.2.1

参照)の場合と同じとする。

内部の値が

IEEE

無限大 又は

IEEE

非数であるとき,出力欄の形は,

F

形編集の場合と同じとする。

内部の値が

IEEE

無限大でも

IEEE

非数でもないときの出力欄は,けた移動数がゼロであるとき,次の形とする。

[

±

] [ 0 ]

.

x

1

x

2

. . . x

d

exp

ここで,

±

は正符号 又は 負符号,

.

は小数点記号(

10.5

),

x

1

x

2

. . . x

d

はデータの値を

d

けたに丸めた有効数

字,

exp

10

進指数とする。指数部の形は,次の表による。表中の

z

は,どれも数字とする。

編集記述子

指数の絶対値

指数部の形

E

w.d

|

exp

| ≤

99

E

±

z

1

z

2

又は

±

0

z

1

z

2

99

<

|

exp

| ≤

999

±

z

1

z

2

z

3

E

w.d

E

e

|

exp

| ≤

10

e

1

E

±

z

1

z

2

. . . z

e

D

w.d

|

exp

| ≤

99

D

±

z

1

z

2

E

±

z

1

z

2

又は

±

0

z

1

z

2

99

<

|

exp

| ≤

999

±

z

1

z

2

z

3

指数部の符号は,常に生成される。指数の値がゼロであるときは,正符号が生成される。

|

exp

|

>

999

であるとき,

E

w.d

形 及び

D

w.d

形の編集記述子を用いてはならない。

出力において,けた移動数

k

は,

10

進正規化を制御する(

10.2.1

及び

10.7.5

参照)。

d < k

0

ならば,出力

欄には小数点記号の右に

|

k

|

個の先行ゼロ,続いて

d

− |

k

|

けたの有効数字が来る。

0

< k < d

+ 2

ならば,小数点記

号の左にちょうど

k

けたの有効数字,右に

d

k

+ 1

けたの有効数字が来る。これ以外の

k

の値を指定してはなら

ない。

10.6.1.2.3 EN

形編集

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

196

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

EN

形編集記述子は,実数値を工学表記の形で出力する。すなわち,出力値がゼロでないとき,

10

進指数は

3

の倍

数となり,有効数字部(

R418

)の絶対値は

1

以上

1000

未満となる。出力において,けた移動数は効果をもたない。

EN

w.d

形 及び

EN

w.d

E

e

形の編集記述子は,欄が

w

けたを占め,そのうちの小数部が

d

けたからなり,指数部

の整数が

e

けたからなることを指示する。

入力欄の形 及び 解釈は,

F

形編集(

10.6.1.2.1

参照)の場合と同じとする。

内部の値が

IEEE

無限大 又は

IEEE

非数であるとき,出力欄の形は,

F

形編集の場合と同じとする。

内部の値が

IEEE

無限大でも

IEEE

非数でもないときの出力欄は,次の形とする。

[

±

]

yyy

.

x

1

x

2

. . . x

d

exp

ここで,

±

は正符号 又は 負符号,

yyy

は内部の値を丸めた有効数字の最上位の

1

3

けた(整数

yyy

は,出力

値がゼロであれば

yyy

= 0

,そうでなければ

1

yyy <

1000

とする。),

.

は小数点記号(

10.5

),

x

1

x

2

. . . x

d

その有効数字の次位の

d

けた,

exp

3

で割り切れる

10

進指数とする。指数部の形は,次の表による。表中の

z

は,

どれも数字とする。

編集記述子

指数の絶対値

指数部の形

EN

w.d

|

exp

| ≤

99

E

±

z

1

z

2

又は

±

0

z

1

z

2

99

<

|

exp

| ≤

999

±

z

1

z

2

z

3

EN

w.d

E

e

|

exp

| ≤

10

e

1

E

±

z

1

z

2

. . . z

e

指数部の符号は,常に生成される。指数の値がゼロであるとき,正符号が生成される。

|

exp

|

>

999

であるとき,

EN

w.d

形編集記述子を用いてはならない。

10.12

EN

形編集記述子の例を次に示す。

内部の値

SS,EN12.3

による出力欄

6.421

6.421E+00

-.5

-500.000E-03

.00217

2.170E-03

4721.3

4.721E+03

10.6.1.2.4 ES

形編集

ES

形編集記述子は,実数値を科学表記の形で出力する。すなわち,出力値がゼロでないとき,有効数字部(

R418

参照)の絶対値が

1

以上

10

未満となる。出力において,けた移動数は効果をもたない。

ES

w.d

形 及び

ES

w.d

E

e

形の編集記述子は,欄が

w

けたを占め,そのうちの小数部が

d

けたからなり,指数部の

整数が

e

けたからなることを指示する。

入力欄の形 及び 解釈は,

F

形編集(

10.6.1.2.1

参照)の場合と同じとする。

内部の値が

IEEE

無限大 又は

IEEE

非数であるとき,出力欄の形は,

F

形編集の場合と同じとする。

内部の値が

IEEE

無限大でも

IEEE

非数でもないときの出力欄は,次の形とする。

[

±

]

y

.

x

1

x

2

. . . x

d

exp

ここで,

±

は正符号 又は 負符号,

y

は内部の値を丸めた有効数字の最上位の

1

けた,

.

は小数点記号(

10.5

),

x

1

x

2

. . . x

d

はその有効数字の次位の

d

けた,

exp

10

進指数とする。指数部の形は,次の表による。表中の

z

は,

どれも数字とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

197

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

編集記述子

指数の絶対値

指数部の形

ES

w.d

|

exp

| ≤

99

E

±

z

1

z

2

又は

±

0

z

1

z

2

99

<

|

exp

| ≤

999

±

z

1

z

2

z

3

ES

w.d

E

e

|

exp

| ≤

10

e

1

E

±

z

1

z

2

. . . z

e

指数部の符号は,常に生成される。指数の値がゼロであるときは,正符号が生成される。

|

exp

|

>

999

であるとき,

ES

w.d

形編集記述子を用いてはならない。

10.13

ES

形編集記述子の例を次に示す。

内部の値

SS,ES12.3

による出力欄

6.421

6.421E+00

-.5

-5.000E-01

.00217

2.170E-03

4721.3

4.721E+03

10.6.1.2.5

複素数型の編集

複素数型データは,一対の実数型データからなる。複素数型の一つのスカラデータの編集は,実数型データの編集

に用いる編集記述子を二つ用いて指定する。

1

番目の編集記述子が実部を指定し,

2

番目が虚部を指定する。二つの編

集記述子は,異なっていてもよい。二つの編集記述子の間に制御編集記述子 及び 文字列編集記述子があってもよい。

10.6.1.2.6

丸めモード

丸めモード

(rounding mode)

は,

OPEN

文(

9.4.1

),データ転送入出力文(

9.5.1.12

) 又は 編集記述子(

10.7.7

で指定することができる。

以降の記述で,

10

進の値

(decimal value)

は文字列で与えられる正確な

10

進数を意味し, 内部の値

(internal

value)

は処理系内部で実際に格納される

2

進数形式などの数を意味する。例えば

10

進定数

0

.

1

について,

10

進の値

は,正確に数学的な量

1

/

10

であるが,大部分の処理系において正確な表現が存在しない。実数データの書式付き出

力は,内部の値から

10

進の値への変換を伴い,書式付き入力は,

10

進の値から内部の値への変換を伴う。

入出力丸めモードが

UP

である場合,変換結果の値は,元の値以上で最小の表現可能な値とする。入出力丸めモード

DOWN

である場合,変換結果の値は,元の値以下で最大の表現可能な値とする。入出力丸めモードが

ZERO

である場

合,変換結果の値は,元の値に最も近く,絶対値で元の値未満の値とする。入出力丸めモードが

NEAREST

である場合,

変換結果の値は,最も近い表現可能な値とする。最も近い表現可能な値が二つあるとき,どちらを選択するかは処理

系依存とする。入出力丸めモードが

COMPATIBLE

である場合,変換結果の値は,最も近い表現可能な値とする。最も

近い表現可能な値が二つあるときは,ゼロから離れているほうとする。入出力丸めモードが

PROCESSOR DEFINED

ある場合,変換での丸めは処理系依存の省略時解釈のモードとし,他のモードの一つであってもよい。

変換で

IEEE

の丸めを採用する処理系において,

NEAREST

は,

IEEE

国際規格で規定する直近偶数丸め

(round to

nearest)

に相当しなければならない。

注記

10.14

変換で

IEEE

の丸めを採用する処理系において,入出力丸めモードの

COMPATIBLE

及び

NEAREST

は,データが二つの表現可能な値の中間である場合を除いて,同じ結果を得る。この場合,

NEAREST

は偶数の値を選択し,

COMPATIBLE

はゼロから遠いほうを選択する。入出力丸めモードの

UP

DOWN

及び

ZERO

は,それぞれ

IEEE

国際規格で規定された正の無限大方向への丸め,負の無限大方向への

丸め 及び ゼロ方向への丸めと同じ効果をもつ。

10.6.2

論理型の編集

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

198

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

L

w

形編集記述子は,欄が

w

けたを占めることを指示する。対応する入出力項目は,論理型でなければならない。

論理型データを編集するのに

G

形編集記述子を用いることもできる(

10.6.4.2

参照)。

入力欄の構成は,省略可能な空白列,続いて省略可能な一つのピリオド,続いて英字

T

又は

F

とする。英字

T

は真

を表し,英字

F

は偽を表す。欄の中で

T

又は

F

に更に文字が続いてもよい。この場合,これらの文字は無視される。

論理入力欄における英小文字は,対応する英大文字と等価とする。

注記

10.15

入力の形として,論理定数

.TRUE.

及び

.FALSE.

が許される。

出力欄の構成は,

w

1

個の空白,続いて内部の値が真か偽かに応じてそれぞれ英字

T

又は

F

とする。

10.6.3

文字型の編集

A

又は

A

w

の形の

A

形編集記述子に対応する入出力項目は,文字型でなければならない。文字型データを編集する

のに

G

形編集記述子を用いることもできる(

10.6.4.3

参照)。

A

形 又は

G

形の一つの編集記述子で転送され変換さ

れるすべての文字は,入出力項目並び中のデータ項目と同じ種別型パラメタをもたなければならない。

A

形編集記述子に欄幅

w

を指定すると,欄は,

w

個 の文字からなる。欄幅

w

を指定しないと,欄は,種別型パラ

メタの値にかかわらず,入出力項目の長さと同じ個数の文字からなる。

入出力項目の長さを

len

とする。入力項目に対応する

A

形編集において,指定した欄幅

w

len

以上であれば,

入力欄の右端の

len

個の文字が読み込まれる。指定した欄幅

w

len

未満であれば,その

w

個の文字は,内部の値

の中で左寄せされ,

len

w

個の空白が補われる。

出力項目に対応する

A

形編集において,指定した欄幅

w

len

より大きければ,出力欄の構成は,

w

len

個の

空白,続いて内部表現の

len

個の文字とする。

w

len

以下であれば,出力欄の構成は,内部表現の左端の

w

個の

文字とする。

注記

10.16

基本文字型でない文字型に対して補う空白文字は,処理系依存とする。

ファイルが流れ探査として接続されている場合,改行文字を含んでいる出力は複数の記録に分割してもよい。改行

文字は,組込み関数

NEW LINE

が返す空白でない文字とする。出力欄の最初の文字から,改行文字でない文字は現在

の記録の連続する位置に書かれ,改行文字はその時点でファイル位置付けを斜線編集と同様に行う。つまり,現在の

記録をそこで終了し,現在の記録に続けて新しい空の記録を作り,この新しい記録をファイルの最後 かつ 現在の記

録とし,ファイルをこの新しい記録の始めに位置付ける。

注記

10.17

特定の文字種別で組込み関数

NEW LINE

が空白文字を返す場合,処理系は,書式付き流れファ

イルで記録を終了させるために,その種別の文字を使用してはならない。

10.6.4 G

形編集

G

w.d

形 及び

G

w.d

E

e

形の編集記述子は,任意の組込み型の入出力項目に対応させて用いることができる。これ

らの編集記述子は,欄が

w

けたを占め,そのうちの小数部が最大

d

けたからなり,指数部の整数が

e

けたからなる

ことを指示する。これらの編集記述子を整数型データ,論理型データ 又は 文字型データの入出力の指定に用いたと

きは,

d

及び

e

は効果をもたない。

10.6.4.1

数値型の

G

形編集

整数型データ,実数型データ 又は 複素数型データの入出力での

G

w.d

形 及び

G

w.d

E

e

形の編集記述子には,数

値編集の共通規定

(

10.6.1

)

を適用する。

注記

10.18

G

w.d

E

e

形編集記述子には,

E

w.d

E

e

形編集記述子に関する付加的な規定も適用する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

199

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

10.6.4.1.1

整数型の

G

形編集

整数型データの入出力での

G

w.d

形 及び

G

w.d

E

e

形の編集記述子には,

I

w

形編集記述子の規定

(

10.6.1.1

)

を適

用する。ただし,

w

がゼロであってはならない。

10.6.4.1.2

実数型 及び 複素数型の

G

形編集

入力欄の形 及び 解釈は,

F

形編集(

10.6.1.2.1

参照)の場合と同じとする。

IEEE

無限大 又は 非数である内部の値に対して,出力欄の形は,

F

w.d

と同じとする。

それ以外の場合,出力欄の表現の方法は,編集を受ける内部の値の絶対値によって異なる。ここで,内部の値の絶

対値を

N

とし,次の表で決まる丸めモードの値を

r

とする。また,有効となっているけた移動数(

10.7.5

参照)を

k

とする。

0

< N <

0

.

1

r

×

10

d

1

であるとき,

N

10

d

r

であるとき,又は

N

= 0

かつ

d

= 0

であるとき,

G

w.d

形編集の出力は

k

PE

w.d

形編集の出力と同じとし,

G

w.d

E

e

形編集の出力は

k

PE

w.d

E

e

形編集の出力と同じ

とする。

0

.

1

r

×

10

d

1

N <

10

d

r

であるとき,又は

N

= 0

かつ

d

̸

= 0

であるとき,けた移動数は効果をも

たず,このときの編集は

N

の値によって次のとおりに決まる。

データの絶対値

等価な編集

N

= 0

F

(

w

n

)

.

(

d

1)

,

n

(’␣’)

0

.

1

r

×

10

d

1

N <

1

r

×

10

d

F

(

w

n

)

.

d

,

n

(’␣’)

1

r

×

10

d

N <

10

r

×

10

d

+1

F

(

w

n

)

.

(

d

1)

,

n

(’␣’)

10

r

×

10

d

+1

N <

100

r

×

10

d

+2

F

(

w

n

)

.

(

d

2)

,

n

(’␣’)

:

:

10

d

2

r

×

10

2

N <

10

d

1

r

×

10

1

F

(

w

n

)

.

1

,

n

(’␣’)

10

d

1

r

×

10

1

N <

10

d

r

F

(

w

n

)

.

0

,

n

(’␣’)

ここで,

は空白を表し,

n

G

w.d

のとき

4

G

w.d

E

e

のとき

e

+ 2

とし,

r

は丸めモードに応じて次のとおりに

決まる。

入出力丸めモード

r

COMPATIBLE

0

.

5

NEAREST

大きいほうの値が偶数のとき

0

.

5

,小さいほうの値が偶数のとき

0

.

5

UP

1

DOWN

0

ZERO

内部の値が負のとき

1

,内部の値が正のとき

0

w

n

は正でなければならない。

注記

10.19

編集を受けるデータの絶対値が実質上

F

形編集の実行される範囲を超えた場合にだけ,けた

移動数が出力時に効果をもつ。

10.6.4.2

論理型の

G

形編集

論理型データの入出力での

G

w.d

形 及び

G

w.d

E

e

形の編集記述子には,

L

w

形編集記述子の規定

(

10.6.2

)

を適用

する。

10.6.4.3

文字型の

G

形編集

文字型データの入出力での

G

w.d

形 及び

G

w.d

E

e

形の編集記述子には,

A

w

形編集記述子の規定

(

10.6.3

)

を適用

する。

10.6.5

使用者定義派生型の編集

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

200

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

DT

型編集記述子では,派生型の並び項目の処理において,処理系の暗黙の入出力編集の代わりに使用者の用意し

た手続を使用することができる。

DT

編集記述子は,文字定数表現を含んでもよい。

"DT"

とその文字定数表現を連結した文字型の値は,使用者定義

の派生型入出力手続に,引数

iotype

9.5.3.7

)として渡される。編集記述子の値指定の値は,使用者定義の派生型

入出力手続に,配列引数

v list

として渡される。

注記

10.20

編集記述子

DT’Link List’(10,4,2)

において,

iotype

は,

"DTLink List"

であり,

v list

は,

(/10,4,2/)

である。

DT

編集記述子に派生型の変数 又は 値が対応する場合,その派生型に対応する派生型入出力手続への参照可能な

引用仕様(

9.5.3.7

)がなければならない。

10.7

制御編集記述子

制御編集記述子は,内部表現との間でのデータの転送 又は データの変換は行わず,後のデータ編集記述子によっ

て実行される変換に影響を及ぼす。

10.7.1

位置付け編集

T

形,

TL

形,

TR

形 及び

X

形の編集記述子は,記録へ 又は 記録から転送される次の文字の位置を指定する。

T

形,

TL

形,

TR

形 又は

X

形の編集記述子によって飛び越される部分に非基本文字型の文字が含まれ,装置が基本文

字型の内部ファイル 又は

Unicode

ファイルでない外部ファイルであるとき,位置付けの結果は処理系依存とする。

T

形編集記述子は,現在の位置より左右いずれの位置を指定することもできる。これは,入力において記録の一部

分を異なる編集で複数回処理できることを意味する。

X

形編集記述子は,現在の位置より右の位置を指定する。入力において,記録の最後の文字を越える位置を指定し

てもよいが,その位置から文字の転送をしてはならない。

注記

10.21

n

X

形編集記述子は,

TR

n

形編集記述子と同じ効果をもつ。

出力において,

T

形,

TL

形,

TR

形 及び

X

形の編集記述子は,文字の転送を伴わないので,それ自身が記録の長

さに影響を及ぼすことはない。

T

形,

TL

形,

TR

形 又は

X

形の編集記述子によって指定した位置 又は それよりも

右の位置に文字を転送する場合,飛び越された部分で,以前に文字が埋め込まれていない位置には,空白が埋め込ま

れる。この結果は,前もって記録全体に空白を埋め込んだ場合と同じとなる。

出力において,出力される記録の中の文字を置き換えることができる。しかし,

T

形,

TL

形,

TR

形 又は

X

形の

編集記述子が,記録の中に既に生成されている文字を直接置き換えることはない。これらの編集記述子は,後の編集

によって置換えが生じるような位置付けを行ってもよい。

10.7.1.1 T

形編集

, TL

形編集 及び

TR

形編集

位置付け左限界

(left tab limit)

は,

T

形 及び

TL

形の編集記述子によるファイルの位置付けに影響を及ぼす。子

データ転送でないデータ転送の直前に,位置付け左限界は,現在記録の現在の文字位置 又は 流れファイルの現在位

置として確定する。データ転送の間にファイルが他の記録に位置付けられたとき,位置付け左限界は,その記録の第

1

文字位置として確定する。

T

n

形編集記述子は,記録への 又は 記録からの次の文字の転送を,現在記録の位置付け左限界から(そこを

1

目として)

n

番目の文字位置に対して行うことを指示する。

TL

n

形編集記述子は,記録への 又は 記録からの次の文字の転送を,現在位置から

n

文字だけ左へ戻った文字位

置に対して行うことを指示する。ただし,

n

が現在位置と位置付け左限界との差より大きい場合には,

TL

n

形編集記

述子は,記録への 又は 記録からの次の文字の転送を,現在記録の位置付け左限界の文字位置に対して行うことを指

示する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

201

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

TR

n

形編集記述子は,記録への 又は 記録からの次の文字の転送を,現在位置から

n

文字だけ右へ進んだ文字位

置に対して行うことを指示する。

注記

10.22

T

n

形,

TL

n

形 及び

TR

n

形の編集記述子の

n

は省略できず,ゼロより大きい値を指定しな

ければならない。

10.7.1.2 X

形編集

n

X

形編集記述子は,記録への 又は 記録からの次の文字の転送を,現在位置から

n

文字だけ右へ進んだ文字位置

に対して行うことを指示する。

注記

10.23

n

X

形編集記述子の

n

は省略できず,ゼロより大きい値を指定しなければならない。

10.7.2

斜線編集

斜線編集記述子は,現在記録への 又は 現在記録からのデータ転送の終了を指示する。

順番探査 又は 流れ探査として接続されているファイルからの入力では,現在記録の残りの部分は読み飛ばされ,

ファイルは直後の記録の先頭に位置付けられ,この記録が現在記録となる。順番探査 又は 流れ探査として接続され

ているファイルへの出力では,新しい空の記録が現在記録の直後に作り出され,それがファイルの最後の記録となり,

また現在記録ともなり,ファイルはこの新しい記録の先頭に位置付けられる。

直接探査として接続されているファイルでは,記録番号に

1

が加えられ,その記録番号をもつ記録があれば,ファ

イルはその記録の先頭に位置付けられ,この記録が現在記録となる。

注記

10.24

出力において,文字を

1

個も含まない記録を書き出してもよい。ファイルが内部ファイルで

あるか 又は 直接探査として接続されているとき,その記録は空白文字で埋められる。入力において,

記録全体を読み飛ばしてもよい。

斜線編集記述子の書式反復数は,省略可能とする。省略したとき,暗黙値は

1

とする。

10.7.3

コロン編集

コロン編集記述子は,入出力項目並び

(

9.5.2

)

中に有効項目が残っていない場合に,書式制御を終了させる。コロ

ン編集記述子は,入出力項目並び中に有効項目が残っている場合には効果をもたない。

10.7.4 SS

形編集

, SP

形編集 及び

S

形編集

SS

形,

SP

形 及び

S

形の編集記述子は,接続の符号モード(

9.4.5.14

9.5.1.13

)を一時的に変更(

9.4.1

)する。

SS

形,

SP

形 及び

S

形の編集記述子は,それぞれ

SIGN

指定子の値である

SUPPRESS

PLUS

及び

PROCESSOR DEFINED

に対応する符号モードを設定する。

符号モードは,数値出力欄の任意正符号文字を制御する。符号モードが

PLUS

のとき処理系は,任意正符号を含む

どの位置にも正符号を生成しなければならない。符号モードが

SUPPRESS

のとき処理系は,任意正符号を含むどの位

置にも正符号を生成してはならない。符号モードが

PROCESSOR DEFINED

のとき,これらの位置に正符号を生成する

かどうかは,

10.6.1

(5)

に示したとおり,処理系依存となる。

SS

形,

SP

形 及び

S

形の編集記述子は,出力文の実行中における

I

形,

F

形,

E

形,

EN

形,

ES

形,

D

形 及び

G

形の編集に対してだけ影響を及ぼす。

SS

形,

SP

形 及び

S

形の編集記述子は,入力文の実行中は効果をもたない。

10.7.5 P

形編集

k

P

形編集記述子は,その接続のけた移動数を

k

に,一時的に変更(

9.4.1

)する。けた移動数は,

F

形,

E

形,

EN

形,

ES

形,

D

形 及び

G

形の編集記述子による数値の編集にだけ影響を及ぼす。

けた移動数

k

は,関係する編集に対して次のとおりの効果をもつ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

202

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(1)

欄中に指数部がない場合の

F

形,

E

形,

EN

形,

ES

形,

D

形 及び

G

形の入力編集,並びに

F

形の出力編集に

おいて,外部表現の数値は,内部表現の数値の

10

k

倍に等しくなる。

(2)

欄中に指数部がある場合の

F

形,

E

形,

EN

形,

ES

形,

D

形 及び

G

形の入力編集において,けた移動数は効果

をもたない。

(3)

E

形 及び

D

形の出力編集において,出力する値の有効数字部(

4.4.2

参照)の値は

10

k

倍にされ,指数部の値

k

だけ減らされる。

(4)

G

形の出力編集において,編集を受けるデータの絶対値が実質上

F

形編集を適用される範囲を超えなければ,け

た移動数は効果をもたない。実質上

E

形編集を適用される場合には,けた移動数は,

E

形の出力編集の場合と同

じ効果をもつ。

(5)

EN

形 及び

ES

形の出力編集において,けた移動数は効果をもたない。

入出力丸めモードの

UP

DOWN

ZERO

又は

NEAREST

が有効である場合は,次のとおりとなる。

(1)

入力では,外部の

10

進の値にけた移動数を適用してから,それを現在の入出力丸めモードで変換する。

(2)

出力では,内部の値を現在の入出力丸めモードで変換してから,変換後の

10

進の値にけた移動数を適用する。

10.7.6 BN

形編集 及び

BZ

形編集

BN

形 及び

BZ

形の編集記述子は,接続の空白解釈モード(

9.4.5.4

9.5.1.5

)を一時的に変更(

9.4.1

)する。

BN

形 及び

BZ

形の編集記述子は,それぞれ

BLANK

指定子の値である

NULL

及び

ZERO

に対応する空白解釈モードを

設定する。

空白解釈モードは,数値入力欄中の先行空白以外の空白の解釈の方法を制御する。空白解釈モードの値が

ZERO

ときこれらの空白はゼロと解釈され,空白解釈モードの値が

NULL

のときこれらの空白は無視される。空白を無視す

る効果は,入力欄中の空白を取り除き,欄の残りの部分を右に寄せ,取り除いた空白を先行空白として置き換えたこ

とと等価とする。ただし,すべてが空白である欄の値は,ゼロとする。

空白解釈モードは,入力における数値編集(

10.6.1

) 及び数値型の

G

形編集(

10.6.4.1

)に対してだけ影響を及

ぼす。出力には効果をもたない。

10.7.7 RU

形編集,

RD

形編集,

RZ

形編集,

RN

形編集,

RC

形編集 及び

RP

形編集

丸め編集記述子は,接続の入出力丸めモード(

9.4.5.13

9.5.1.12

10.6.1.2.6

)を一時的に変更(

9.4.1

)する。

RU

形,

RD

形,

RZ

形,

RN

形,

RC

形 及び

RP

形の丸め編集記述子は,それぞれ

ROUND

指定子の値である

UP

DOWN

ZERO

NEAREST

COMPATIBLE

及び

PROCESSOR DEFINED

に対応する入出力丸めモードを設定する。入出力丸

めモードは,書式付き入出力での実数 及び 複素数の値の変換に影響を及ぼす。また,

D

形,

E

形,

EN

形,

ES

形,

F

形 及び

G

形の編集に対してだけ影響を及ぼす。

10.7.8 DC

形編集 及び

DP

形編集

小数点編集記述子は,接続の小数点編集モード(

9.4.5.5

9.5.1.6

)を一時的に変更(

9.4.1

)する。

DC

形 及び

DP

形の編集記述子は,それぞれ

DECIMAL

指定子の値である

COMMA

及び

POINT

に対応する入出力丸めモードを設

定する。

小数点編集モードは,書式付き入出力での実数 及び 複素数の値の変換において,小数点記号の表現を制御する。小

数点編集モードは,

D

形,

E

形,

EN

形,

ES

形,

F

形 及び

G

形の編集に対してだけ影響を及ぼす。並び入出力におい

て小数点編集モードが

COMMMA

であると,値区切り子として使用される文字は,コンマの替わりにセミコロンとなる。

10.8

文字列編集記述子

文字列編集記述子は,入力に使用してはならない。

文字定数編集記述子は,その編集記述子中の文字(空白も含む。)の列自身を書き出させる。文字定数編集記述子

での欄幅は,その中に含まれる文字の個数とする。このとき,両端の囲み記号は,文字の個数に含めない。欄の中で

は,

2

連の囲み記号は,

1

文字として数える。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

203

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

10.25

囲み記号は,アポストロフィ 又は 引用符とする。

10.9

並び書式

並び入出力は,書式仕様の代わりに並び項目の型に応じたデータ編集を可能にする。更に,データをコンマ(若し

くは セミコロン)又は 空白で区切った自由欄形式を可能にする。

一つ以上の並び記録の中の文字が,値 及び 値区切り子の列を構成する。記録の終わりは,文字定数の内部以外で

は,空白と同じ効果をもつ。二つ以上の連続する空白は,文字定数の内部以外では,一つの空白として扱われる。

それぞれの値は,空値 又は 次のいずれかの形とする。

c

r

*

c

r

*

ここで,

c

は整数 若しくは 実数の任意符号付き定数表現 又は 囲みなし文字定数とし,

r

はゼロでない符号なし整

定数表現とする。

c

にも

r

にも種別型パラメタを指定してはならない。定数

c

は,対応する並び項目と同じ種別型パ

ラメタをもっているかのように解釈される。

r

*

c

は,定数

c

r

個連続して書いたものと同じとする。

r

*

は,空値

r

個連続して書いたものと同じとする。いずれの場合も,定数

c

の中の許されている場所を除いて,値中に空白を

書いてはならない。

値区切り子

(value separator)

は,次のいずれかとする。

(1)

0

個以上の空白が前後に続いているコンマ。ただし,小数点編集モードが

COMMA

のときは,コンマの代わりにセ

ミコロンを使用する。

(2)

0

個以上の空白が前後に続いている斜線。

(3)

二つの空白でない値の間 又は 最後の空白でない値の後の

1

個以上の連続する空白。ここで,空白でない値とは,

定数,

r

*

c

の形 又は

r

*

の形とする。

注記

10.26

入力記録中の斜線は,値区切り子の一つではあるが,実際には並び入力文 及び 変数群入力文

を終了させるものであって,二つの値を区切るものではない。

注記

10.27

並び入出力文に入出力項目を指定していないと,一つの入力記録を読み飛ばすか 又は 一つの

空の記録を書き出す。

10.9.1

並び入力

与えられた型に対応する編集記述子に許されている入力の形は,この箇条に定めることを除いて,並び書式におい

ても許される。入力値の形は,並び中の次有効項目の型に許されているものでなければならない。空白がゼロとして

扱われることはなく,文字定数 及び 複素定数の場合を除いて,定数の中に空白を挟むことは許されない。

r

*

c

の入力値に対して,この値に対応する最初の並び項目が基本文字型,

ASCII

文字型 又は

ISO 10646

文字型で

あり,

r

*

の直後に空白でない文字があって,その文字がアポストロフィでも引用符でもないとき,定数

c

は囲みな

し文字定数と解釈される。それ以外のとき,

c

は定数表現と解釈される。

注記

10.28

記録の終わりは,文字定数の中に現れる場合を除いて,空白と同じ効果をもつ。

有効項目が整数型である場合,入力記録中の値は,

w

として適切な値をもつ

I

w

形編集記述子を用いたかのように

解釈される。

次有効項目が実数型である場合,入力の形は,数値入力欄の規定に従う。数値入力欄とは,

F

形編集(

10.6.1.2.1

参照)に適合する入力欄をいう。欄中に小数点記号がないときは,小数部の数字がないものとみなす。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

204

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

次有効項目が複素数型である場合,入力の形の構成は,左括弧,続いて区切り子で区切られた数値入力欄の順序対,

続いて右括弧とする。

1

番目の数値入力欄は複素定数の実部とし,

2

番目は虚部とする。どちらの数値入力欄にも,前

後に任意の個数の空白 及び 記録の終わりが続いてもよい。区切り子は,小数点編集モードが

POINT

である場合はコ

ンマとし,小数点編集モードが

COMMA

である場合はセミコロンとする。記録の終わりが,実部と区切り子との間 又

は 区切り子と虚部との間にあってもよい。

次有効項目が論理型である場合,入力の形は,

L

形編集に許される形と同じとするが,その中に値区切り子を含ん

ではならない。

次有効項目が文字型である場合,入力の形は,有効並び項目の種別型パラメタと同じ種別型パラメタをもち,必要

なら前後に囲み文字を指定した

0

個以上の文字の繰返しとする。文字列は,ある記録の終わりから次の記録の始めに

またがってもよいが,記録の終わりが,アポストロフィ 又は 引用符を囲み記号とする文字列の中の,それぞれ

2

アポストロフィの間 又は

2

連引用符の間にあってはならない。記録の終わりによって,空白その他の文字が文字列の

一部となることはない。文字列は,幾つもの記録にまたがってもよい。空白,コンマ,セミコロン 及び 斜線を基本

文字型,

ASCII

文字型 又は

ISO 10646

文字型の文字列の中に用いてもよい。

次有効項目が基本文字型,

ASCII

文字型 又は

ISO 10646

文字型であるとき,次の条件をすべて満足すれば,囲み

記号のアポストロフィ 又は 引用符はなくてもよい。

(1)

文字列が値区切り子を含まない。

(2)

文字列が記録の境界をまたがない。

(3)

先頭の文字がアポストロフィでも引用符でもない。

(4)

文字列の先頭部分が

*

を伴う数字列でない。

(5)

文字列が

1

個以上の文字を含んでいる。

文字列の囲み記号を省略したとき,その文字列は最初の空白,コンマ(小数点編集モードが

POINT

である場合),

セミコロン(小数点編集モードが

COMMA

である場合),斜線 又は 記録の終わりで終了し,データ中のアポストロフィ

又は 引用符は

2

連にしない。

入力項目の長さを

len

とし,文字列の長さを

w

とする。

len

w

以下であれば,文字列の左端の

len

個の文字が

入力項目に転送される。

len

w

より大きければ,文字列が入力項目の左端の

w

文字に転送され,入力項目の残り

len

w

文字に空白が埋められる。これは,その文字列がその入力項目に文字代入文(

7.4.1.3

参照)で代入され

るのと同じ効果をもつ。

10.9.1.1

空値

空値は,次のいずれかで表す。

(1)

r

*

の形

(2)

間に文字のない連続する値区切り子の間

(3)

並び入力文の

1

回の実行中に読まれた最初の記録中の最初の値区切り子が先行する文字をもたないとき,その先

行文字の部分

注記

10.29

任意の値区切り子に続く記録の終わりは,分離する空白の有無にかかわらず,並び入力に空値

を指定しない。

空値は,対応する入力項目の定義状態に何の影響も及ぼさない。空値は,複素定数全体としては用いてもよいが,

複素定数の実部 又は 虚部の一方として用いることはできない。

並び入力文の実行中に,値区切り子である斜線に出会うと,直前の値を代入した後,その入力文の実行が終了する。

現在記録の残りの文字は無視される。入力項目並び中に更に項目が残っていれば,それらには空値が供給されたとみ

なされる。入力項目並び中に

DO

形反復があれば,その

DO

変数は,残りの入力項目に十分な個数の空値が供給され

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

205

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

たかのように確定される。

注記

10.30

並び記録中のすべての空白は,次の場合を除いて,値区切り子の一部とみなされる。

(1)

文字列の中の空白

(2)

複素定数の中の実部 又は 虚部の前後の空白

(3)

並び入力文の

1

回の実行中に読まれた最初の記録中で,直後に斜線 又は コンマが続かないと

きの先行空白

10.31

次の

READ

文において,

INTEGER I;

REAL X (8);

CHARACTER (11) P;

COMPLEX Z;

LOGICAL G

...

READ *, I, X, P, Z, G

...

入力データが

12345,12345,,2*1.5,4*

ISN’T_BOB’S,(123,0),.TEXAS$

であるとき,結果は次のとおりとなる。

変数

I

12345

X(1)

12345.0

X(2)

変化せず

X(3)

1.5

X(4)

1.5

X(5)

X(8)

変化せず

P

ISN’T BOB’S

Z

(123.0, 0.0)

G

10.9.2

並び出力

生成される値の形は,特に断らない限り,入力の形と同じとする。囲みなし文字列が連続する場合を除いて,値は,

1

個以上の空白で区切られるか 又は

0

個以上の空白が前後に続いたコンマ 若しくは 小数点編集モードが

COMMA

の場

合はセミコロンで区切られる。

処理系は,必要に応じて新しい記録に移る。複素定数 及び 文字列の場合を除いて,記録の終わりが定数中に現れ

てはならない。複素定数の場合を除いて,空白が文字列中 又は 定数中に現れてはならない。

論理型の出力値は,真の値に対しては

T

,偽の値に対しては

F

とする。

整数型の出力定数は,

I

w

形編集記述子を用いたかのように生成される。

実定数は,値の絶対値

x

とその範囲

10

d

1

x <

10

d

2

によって選択される

F

形編集記述子 又は

E

形編集記述子を

用いたかのように生成される。ここで,

d

1

及び

d

2

は,処理系依存の整数値とする。絶対値

x

がこの範囲内にあるか

ゼロであるとき,定数は

0PF

w.d

によって生成され,そうでないとき

1PE

w.d

E

e

が使われる。

数値出力において,

w

,

d

及び

e

は,それぞれの数値定数を出力するために,処理系依存の適切な値が使われる。

複素定数は,実部 及び 虚部が上で実定数に対して定義したとおりに生成され,それらが区切り子で区切られ,括

弧でくくられる。区切り子は,小数点編集モードが

POINT

の場合はコンマとし,小数点編集モードが

COMMA

の場合は

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

206

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

セミコロンとする。定数全体が一つの記録全体と同じ長さか 又は それより長い場合だけ,区切り子と虚部との間に

記録の終わりが現れることがある。複素定数の中の空白は,区切り子と記録の終わりとの間 及び その次の記録の先

頭の

1

文字にだけ許される。

囲み記号モードの値が

NONE

である場合に生成される文字列は,次による。

(1)

文字列の前後に囲み記号のアポストロフィ 又は 引用符をもたない。

(2)

文字列同士を分離する値区切り子をもたない。

(3)

内部の一つのアポストロフィ 又は 引用符は,外部でも一つで表現される。

(4)

直前の記録から文字列が継続して始まるそれぞれの記録の始めには,空白が処理系によって挿入される。

囲み記号モードの値が

QUOTE

である場合に生成される文字列は,文字列の前後に囲み記号として引用符をもち,値

区切り子を前後にもち,内部の一つの引用符は外部媒体上では

2

連引用符で表現される。

囲み記号モードの値が

APOSTROPHE

である場合に生成される文字列は,文字列の前後に囲み記号としてアポストロ

フィをもち,値区切り子を前後にもち,内部の一つのアポストロフィは外部媒体上では

2

連アポストロフィで表現さ

れる。

生成される出力記録中に二つ以上連続して同一の値があれば,処理系は,同一の値の列の代わりに,

r

*

c

の形を生

成してもよい。

空値 及び 値区切り子の斜線は,並び書式出力で生成されることはない。

囲み付き文字列の継続を除いて,それぞれの出力記録は,空白で始まる。

注記

10.32

書式付き記録の長さは,常に正確に指定できるものではなく,処理系に依存する場合もある。

10.10

変数群書式

変数群入出力は,名前

-

値対応によるデータ編集を可能にする。これによって,入出力ファイルの記述性 及び 入力

での柔軟性を向上させることができる。

一つ以上の変数群記録の中の文字が,名前

-

値対応

(name-value subsequence)

の列を構成する。名前

-

値対応の構成

は,実体特定子,続いて等号,続いて一つ以上の値 及び 値区切り子の列とする。等号の前後には一つ以上の連続す

る空白を指定してもよい。記録の終わりは,文字定数の内部以外では,空白と同じ効果をもつ。二つ以上の連続する

空白は,文字定数の内部以外では,一つの空白として扱われる。

実体名は,変数群要素並び(

5.4

参照)にある任意の名前とする。

それぞれの値は,空値(

10.10.1.4

参照)又は 次のいずれかの形とする。

c

r

*

c

r

*

ここで,

c

は整数 若しくは 実数の任意符号付き定数表現 又は 囲みなし文字定数とし,

r

はゼロでない整定数表現

とする。

c

にも

r

にも種別型パラメタを指定してはならない。定数

c

は,対応する並び項目と同じ種別型パラメタを

もっているかのように解釈される。

r

*

c

は,定数

c

r

個連続して書いたものと同じとする。

r

*

は,空値を

r

個連

続して書いたものと同じとする。いずれの場合も,定数

c

の中の許されている場所を除いて,値中に空白を書いては

ならない。

変数群書式での値区切り子は,並び書式(

10.9

参照)の場合と同じとする。

10.10.1

変数群入力

変数群入力文による入力の構成は,次による。

(1)

省略可能な空白列 及び 変数群注釈

(2)

文字

&

,その直後に,

NAMELIST

文で指定された変数群名

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

207

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(3)

一つ以上の空白

(4)

0

個以上の名前

-

値対応を,値区切り子で区切った列

(5)

変数群入力文を終了させる斜線

注記

10.33

変数群入力中に斜線に出会うと,入力文は終了する。変数群入力文で二つの値を区切るため

に,斜線を使用することはできない。

名前

-

値対応において,名前は変数群要素並びで指定した名前とし,必要ならば修飾が可能とする。修飾の結果は,

大きさゼロの配列,大きさゼロの部分配列,長さゼロの文字列であってはならない。修飾には,配列添字を含んでは

ならない。

変数群名 及び 変数群要素名における英大文字と英小文字とは等価とする。

10.10.1.1

変数群要素名

それぞれの入力データにおいて,それぞれの名前は,変数群要素並び中に指定されたものでなければならない。名

前を修飾する添字,刻み幅 及び 部分列式は,種別型パラメタを指定してない符号付き 又は 符号なしの整定数表現で

なければならない。変数群要素が配列であるとき,それに対応する入力記録は,その配列名 又は 実体特定子

(R603)

の構文形式を使ったその配列の部分実体の指定を含むことができる。変数群要素名が派生型の変数の名前であるとき,

それに対応する入力記録は,その変数名 又は その変数名を成分名で修飾した派生型の成分の指定を含むことができ

る。表現する変数の形状 及び 型に応じて,連続する修飾も適用できる。

入力記録中の名前の順序は変数群要素並びでの順序と一致しなくてもよい。入力記録は変数群要素並びのすべての

名前を含んでいなくてもよい。変数群要素並びにある名前で,入力記録に現れないものの定義状態は,変更されない。

入力記録中の実体名 又は 部分実体特定子の前後には空白列を挟んでもよいが,中に挟んではならない。

10.10.1.2

変数群の入力値

与えられた型に対応する書式仕様に許されている入力値は,

10.10.1.3

で規定する論理型 及び 整数型の変数群要素

に対応する入力値の形の制限を除いて,データ

c

10.10

参照)として許される。実数値 又は 複素数値の形は,有

効な小数点編集モード(

10.7.8

)に依存する。入力値の形は,対応する変数群要素の型にとって受入れ可能でなけれ

ばならない。名前

-

値対応の等号に続く入力値の個数と形は,入力記録中の名前で表される実体の形状と型に従う。入

力記録中の名前が組込み型のスカラ変数の名前である場合,等号に続く値は二つ以上あってはならない。空白がゼロ

として扱われることはなく,

10.10.1.3

で規定する文字定数 及び 複素定数の場合を除いて,定数の中に空白を挟む

ことは許されない。

名前

-

値対応は左から右へ順に評価される。変数群要素の実体特定子は,二つ以上の名前

-

値対応に現れてもよい。

入力記録中の名前が配列 又は 派生型変数を表す場合,書式付き入出力文の入出力項目の展開(

9.5.2

参照)と同じ

方法で,スカラ入力項目の列に展開したものと同じ効果をもつ。等号に続く入力値は,

10.10.1.3

で示す場合を除い

て,展開された列の対応する位置の入力項目の型に対する書式仕様に受入れ可能でなければならない。等号に続く入

力値の個数は,展開された入力項目の個数を超えてはならないが,少なくてもよい。少ない場合,展開された入力項

目の残りには,空値が供給される。

注記

10.34

例えば,入力記録中の名前が大きさ

100

の整数型の配列名である場合,最大

100

個の数値列

又は 空値を等号に続けて指定できる。そして,これらの値が配列要素にその順番で割り当てられる。

変数群入力文の実行中に,値区切り子である斜線に出会うと,直前の値を代入した後,その入力文の実行が終了す

る。現在転送中の変数群要素の中に更に項目が残っていれば,それらには空値が供給されたとみなされる。

変数群注釈は,斜線を除くどの値区切り子の後に現われてもよい。また,変数群注釈は,文字定数表現を含まない

入力記録の空白でない最初の文字から開始してもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

208

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

変数群入力文による後続の変数群記録の入力は,斜線に出会うと終了する。その記録の残りは無視され,変数群入

力の規定に従う必要はなくなる。

10.10.1.3

変数群要素並びの項目

対応する変数群要素並びの次有効項目が実数型である場合,入力の形は,数値入力欄の規定に従う。数値入力欄と

は,

F

形編集(

10.6.1.2.1

参照)に適合する入力欄をいう。欄中に小数点記号がないときは,小数部の数字がないも

のとみなす。

次有効項目が複素数型である場合,入力の形の構成は,左括弧,続いてコンマ(小数点編集モードが

POINT

である

場合)又は セミコロン(小数点編集モードが

COMMA

である場合)で区切られた数値入力欄の順序対,続いて右括弧

とする。区切り子は,小数点編集モードが

POINT

である場合はコンマとし,小数点編集モードが

COMMA

である場合は

セミコロンとする。

1

番目の数値入力欄は複素定数の実部とし,

2

番目は虚部とする。どちらの数値入力欄にも,前

後に任意個の空白 及び 記録の終わりが続いてもよい。記録の終わりが,実部と区切り子との間 又は 区切り子と虚部

との間にあってもよい。

次有効項目が論理型である場合,入力の形は,

L

形編集(

10.6.2

参照)入力に許される形と同じとするが,その中

に等号 又は値区切り子を含んではならない。

次有効項目が整数型である場合,入力記録中の値は,

w

として適当な値をもつ

I

w

形編集記述子を用いたかのよう

に解釈される。

次有効項目が文字型である場合,入力の形は,有効並び項目の種別型パラメタと同じ種別型パラメタをもつ,必要

なら前後に囲み文字を指定した

0

個以上の文字の繰返しとする。そのような文字列は,ある記録の終わりから次の記

録の始めにまたがってもよいが,記録の終わりが,アポストロフィ 又は 引用符を囲み記号とする文字列の中の,そ

れぞれ

2

連アポストロフィの間 又は

2

連引用符の間にあってはならない。記録の終わりによって,空白その他の文

字が文字列の一部となることはない。文字列は,幾つもの記録にまたがってもよい。空白,コンマ,セミコロン 及び

斜線を文字列の中に用いてもよい。

注記

10.35

文字型の変数群入力項目に対して,文字列は,アポストロフィ 又は 引用符で囲まなければ

ならない。囲み記号は,文字列と実体名とのあいまいさを避けるために必要である。外部ファイルに

対する

OPEN

文に

DELIM

指定子(

9.4.5.6

参照)があっても,その値は,変数群入力の間は無視さ

れる。

入力項目の長さを

len

とし,文字定数の長さを

w

とする。

len

w

以下であれば,文字列の左端の

len

個の文字

が入力項目に転送される。

len

w

より大きければ,文字列が入力項目の左端の

w

文字に転送され,入力項目の残

りの

len

w

文字に空白が埋められる。これは,その定数がその入力項目に文字代入文(

7.4.1.3

参照)で代入され

るのと同じ効果をもつ。

10.10.1.4

空値

空値は,次のいずれかで表す。

(1)

r

*

の形

(2)

連続する値区切り子の間の空白

(3)

等号の後ろで,最初の値区切り子の前の任意個の空白

(4)

二つの連続する,空白以外の値区切り子

空値は,対応する入力項目の定義状態に何の影響も及ぼさない。変数群要素並びの項目が確定であればその値をそ

のまま保持し,不定であれば不定のままとする。空値は,複素定数全体としては用いてもよいが,複素定数の実部 又

は 虚部の一方として用いることはできない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

209

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

10.36

変数群入力において,任意の値区切り子に続く記録の終わりは,分離する空白の有無にかか

わらず,空値を指定しない。

10.10.1.5

空白

変数群入力の記録中のすべての空白は,次の場合を除いて,値区切り子の一部とみなされる。

(1)

文字定数の中の空白

(2)

複素定数の中の実部 又は 虚部の前後の空白

(3)

直後に斜線もコンマ(又は 小数点編集モードが

COMMA

のときにはセミコロン)も続かない場合の,等号の右側

にある

1

個以上の先行空白

(4)

名前と等号との間の空白

10.10.1.6

変数群注釈

文字定数表現の中にある場合を除いて,値区切り子の直後 又は 変数群入力記録の最初の空白でない位置にある文

“!”

は,注釈の開始とする。注釈は,現在の入力記録の最後までとし,処理系依存のどの図形文字を含んでもよい。

注釈行は無視される。変数群注釈の中の斜線は,変数群入力の実行を終了させない。注釈は記録の構造に依存するの

で,流れ入力に変数群注釈を含めてはならない。

10.37

次の

READ

文において,

INTEGER I; REAL X (8); CHARACTER (11) P; COMPLEX Z; LOGICAL G

NAMELIST / TODAY / G, I, P, Z, X

READ (*, NML=TODAY)

入力データが

&TODAY I = 12345, X(1) = 12345, X(3:4) = 2*1.5, I=6, !

これは,注釈です。

P = "ISN’T_BOB’S", Z = (123,0)/

であるとき,結果は次のとおりとなる。

変数

I

6

X(1)

12345.0

X(2)

変化せず

X(3)

1.5

X(4)

1.5

X(5)

X(8)

変化せず

P

ISN’T BOB’S

Z

(123.0, 0.0)

G

変化せず

10.10.2

変数群出力

生成される値の形は,実定数,文字定数 及び 論理定数の形を除いて,入力の形と同じとする。出力における名前

は英大文字とする。囲みなし文字定数が連続する場合を除いて,値は,

1

個以上の空白で区切られるか,又は

0

個以

上の空白が前後に続いたコンマ(若しくは 小数点編集モードが

COMMA

のときにはセミコロン)で区切られる。

変数群出力は,変数群注釈を含んではならない。

処理系は,必要に応じて新しい記録に移る。複素定数 及び 文字定数の場合を除いて,記録の終わり 又は 空白が

定数中に現れることはない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

210

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

10.38

書式付き記録の長さは,常に正確に指定できるものではなく,処理系に依存する場合もある。

10.10.2.1

変数群出力の編集

論理型の出力定数は,真の値に対しては

T

,偽の値に対しては

F

とする。

整数型の出力定数は,

I

w

形編集記述子を用いたかのように生成される。

実定数は,値の絶対値

x

とその範囲

10

d

1

x <

10

d

2

によって選択される

F

形編集記述子 又は

E

形編集記述子を

用いたかのように生成される。ここで,

d

1

及び

d

2

は,処理系依存の整数値とする。絶対値

x

がこの範囲内にあると

き,定数は

0PF

w

.

d

によって生成され,そうでないとき

1PE

w

.

d

E

e

が使われる。

数値出力において,

w

,

d

及び

e

は,それぞれの数値定数を出力するために,処理系依存の適切な値が使われる。

複素定数は,実部 及び 虚部が上で実定数に対して定義したとおりに生成され,それらの間には区切り子があり,括

弧でくくられる。区切り子は,小数点編集モードが

POINT

のときコンマとし,小数点編集モードが

COMMA

のときセミ

コロンとする。定数全体が一つの記録全体と同じ長さか 又は それより長い場合だけ,区切り子と虚部との間に記録

の終わりが現れることがある。複素定数の中の空白は,区切り子と記録の終わりとの間 及び その次の記録の先頭の

1

文字にだけ許される。

囲み記号モードが

NONE

である場合に生成される文字定数は,次による。

(1)

文字列の前後に囲み記号のアポストロフィ 又は 引用符をもたない。

(2)

文字定数同士を分離する値区切り子をもたない。

(3)

内部の一つのアポストロフィ 又は 引用符は,外部でも一つで表現される。

(4)

直前の記録から文字定数が継続して始まるそれぞれの記録の始めには,空白が処理系によって挿入される。

注記

10.39

DELIM

指定子に値

NONE

を指定して生成された,文字定数を含む変数群出力記録は,変数群

入力記録としては受け入れられない。

囲み記号モードが

QUOTE

であるときに生成される文字定数は,文字列の前後に囲み記号として引用符をもち,必

要ならば種別と下線が先行し,値区切り子を前後にもち,内部の一つの引用符は外部媒体上では

2

連引用符で表現さ

れる。

囲み記号モードが

APOSTROPHE

であるときに生成される文字定数は,文字列の前後に囲み記号としてアポストロフィ

をもち,必要ならば種別と下線が先行し,値区切り子を前後にもち,内部の一つのアポストロフィは外部媒体上では

2

連アポストロフィで表現される。

10.10.2.2

変数群出力記録

生成される出力記録中の配列に二つ以上連続して同一の値があれば,処理系は,同一の値の列の代わりに,

r

*

c

形を生成してもよい。

出力記録には,変数群要素並びのそれぞれの項目の名前に続いて等号とその変数群要素の値が出力される。

変数群書式では,どの群のデータ実体を出力するかを指定するため,最初に出力される記録の先頭に,

&

に続い

て変数群名が生成される。変数群書式の終わりを示すものとして,斜線が生成される。

変数群書式によって空値が生成されることはない。

使用者定義の派生型出力手続にある明示的な書式識別子 又は 囲み付き文字定数の継続によって生成された新しい

記録を除いて,それぞれの出力記録は,空白で始まる。

11

プログラム単位

プログラム単位の用語 及び 基本概念は,

2.2

の規定による。プログラム単位は,主プログラム,外部副プログラ

ム,モジュール 又は 初期値設定プログラム単位のいずれかとする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

211

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

箇条

11

では,主プログラム,モジュール 及び 初期値設定プログラム単位について規定する。外部副プログラムに

ついては,箇条

12

で規定する。

11.1

主プログラム

Fortran

の主プログラム

(main program)

は,先頭の文が

SUBROUTINE

文,

FUNCTION

文,

MODULE

文 又は

BLOCK DATA

文のいずれでもないプログラム単位とする。

R1101

主プログラム

is

[ PROGRAM

]

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END PROGRAM

R1102

PROGRAM

is

PROGRAM

プログラム名

R1103

END PROGRAM

is

END

[

PROGRAM

[

プログラム名

] ]

C1101

(R1101)

主プログラム中の実行部は,

RETURN

文 及び

ENTRY

文を含んではならない。

C1102

(R1101) PROGRAM

文を書いた場合にだけ,

END PROGRAM

文中にプログラム名を書いてもよい。

その場合,そのプログラム名は,

PROGRAM

文で指定したプログラム名と同じでなければならない。

C1103

(R1101)

自動割付け実体は,主プログラムの宣言部

(R204)

中に書いてはならない。

注記

11.1

プログラム名は,プログラム中で大域的である(

16.1

参照)。プログラム名の使用についての

補足説明は,

C.8.1

を参照。

11.2

主プログラムの例を次に示す。

PROGRAM ANALYSE

REAL A, B, C (10,10)

!

宣言部

CALL FIND

!

実行部

CONTAINS

SUBROUTINE FIND

!

内部副プログラム

...

END SUBROUTINE FIND

END PROGRAM ANALYSE

主プログラムは,

Fortran

以外の手段で定義してもよい。その場合,そのプログラムには,主プログラム単位を含

んではならない。

主プログラムは,自分自身も含めて,そのプログラムのどのプログラム単位中でも引用できない。

11.2

モジュール

モジュール

(module)

は,その中にある宣言 及び 定義を,他のプログラム単位から参照できるようにする。処理系

に備わっているモジュールは,組込みモジュール

(intrinsic module)

とする。組込みでないモジュール

(nonintrinsic

module)

は,モジュールプログラム単位 又は

Fortran

以外の手段によって定義する。

組込みモジュールで定義した手続 及び 型は,組込みではない。

R1104

モジュール

is

MODULE

[

宣言部

]

[

モジュール副プログラム部

]

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

212

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

END MODULE

R1105

MODULE

is

MODULE

モジュール名

R1106

END MODULE

is

END

[

MODULE

[

モジュール名

] ]

R1107

モジュール副プログラム部

is

CONTAINS

モジュール副プログラム

[

モジュール副プログラム

] ...

R1108

モジュール副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

C1104

(R1104) END MODULE

文中にモジュール名を書く場合,それは,

MODULE

文で指定したモジュー

ル名と同じでなければならない。

C1105

(R1104)

モジュールの宣言部は,

文関数定義文,

ENTRY

文 又は

FORMAT

文のいずれも含んではならない。

C1106

(R1104)

自動割付け実体は,モジュールの宣言部中に書いてはならない。

C1107

(R1104)

成分初期値指定

(R444)

が指定された型の実体をモジュールの宣言部中に書く場合,その実体

ALLOCATABLE

属性 又は

POINTER

属性をもたないとき,

SAVE

属性をもたなければならない。

注記

11.3

モジュール名は,プログラム中で大域的である

(

16.1

参照

)

注記

11.4

文関数定義文,

ENTRY

文 又は

FORMAT

文は,モジュールの宣言部中に書いてはならないが,そ

のモジュールに含まれるモジュール副プログラムの宣言部中には書いてもよい。

モジュールは,それが含むどのモジュール副プログラム(

12.1.2.2

参照)に対しても親プログラム

となる。モジュール内の言語要素は,親子結合によってモジュール副プログラム内で参照可能になる。

注記

11.5

モジュールが依存翻訳に与える影響については,

C.8.2

を参照。

注記

11.6

モジュールの使用例は,

C.8.3

を参照。

モジュールの有効域で宣言された手続は,暗黙の引用仕様をもつ場合,その有効域では

EXTERNAL

属性を指定しな

ければならない。その手続が関数の場合には,その有効域の型宣言文中で,明示的にその関数の型 及び 型パラメタ

を宣言しなければならない。

組込み手続は,モジュールの有効域で宣言される場合,その有効域で

INTRINSIC

属性を明示的に指定するか,又

は その有効域内で組込み手続として使用しなければならない。

11.2.1 USE

文 及び 参照結合

USE

(USE statement)

は,参照結合

(use association)

を宣言する。

USE

文は,指定したモジュールへのモジュ

ール引用

(module reference)

になる。

USE

文が処理される時に,指定したモジュールの公開部分は,利用可能になっ

ていなければならない。モジュールは,直接 又は 間接に自分自身を引用してはならない。

USE

文によって,その有効域内からモジュール内の名前付きデータ実体,派生型,引用仕様宣言,手続,総称識

別子

(

12.3.2.1

)

及び 変数群を参照できる。有効域内のそれらの言語要素は,モジュール内の要素と 参照結合してい

(use associated)

という。参照された要素は,モジュール内で指定されている属性をもつ。ただし,その場合でも

要素は異なる参照許可属性をもってもよく,参照結合しているモジュール内の要素が

ASYNCHRONOUS

属性 又は

VOLATILE

属性のいずれももたないときでも,局所有効域では

ASYNCHRONOUS

属性 又は

VOLATILE

属性を

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

213

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

もってもよい。参照許可された要素は,その名前で識別するか,又は モジュール内でそれらを識別するのに用いられ

る総称識別子によって識別する。参照許可された要素は,特に指定しなければ,

USE

文を含む有効域では同じ識別子

によって使用できるが,異なる局所識別子を使用するように宣言することもできる。

注記

11.7

モジュールの要素の参照可能性は,参照許可属性

(

4.5.1.1

及び

5.1.2.1

参照

)

及び

USE

文の

ONLY

句によって制御することができる。モジュールの要素の確定可能性は,

PROTECTED

属性

(

5.1.2.12

参照

)

によって制御することができる。

R1109

USE

is

USE

[ [

,

モジュール性質

]

::

]

モジュール名

[

,

仮称指定並び

]

or

USE

[ [

,

モジュール性質

]

::

]

モジュール名

,

ONLY :

[

参照限定並び

]

R1110

モジュール性質

is

INTRINSIC

or

NON INTRINSIC

R1111

仮称指定

is

局所名

=>

参照対象名

or

OPERATOR (

局所利用者定義演算

) =>

OPERATOR (

参照利用者定義演算

)

R1112

参照限定

is

総称指定

or

参照限定対象名

or

仮称指定

R1113

参照限定対象名

is

参照対象名

C1108

(R1109)

モジュール性質が

INTRINSIC

の場合,モジュール名は組込みモジュールの名前でなければな

らない。

C1109

(R1109)

モジュール性質が

NON INTRINSIC

の場合,モジュール名は組込みでないモジュールの名前で

なければならない。

C1110

(R1109)

有効域から,組込みモジュール 及び 同じ名前をもつ組込みでないモジュールを参照してはな

らない。

C1111

(R1111)

OPERATOR (

参照利用者定義演算

)

は,総称束縛を識別してはならない。

C1112

(R1112)

総称指定は,総称束縛を識別してはならない。

注記

11.8

上の二つの制約は,総称束縛が引用仕様宣言によって宣言された総称指定と同じ総称指定をも

つ場合であっても,その引用仕様宣言で宣言された総称指定の参照を妨げるものではない。

C1113

(R1112)

各総称指定は,モジュール内の公開要素でなければならない。

C1114

(R1113)

各参照対象名は,モジュール内の公開要素の名前でなければならない。

R1114

局所利用者定義演算

is

利用者定義単項演算子

or

利用者定義

2

項演算子

R1115

参照利用者定義演算

is

利用者定義単項演算子

or

利用者定義

2

項演算子

C1115

(R1115)

各参照利用者定義演算は,モジュール内の公開要素でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

214

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

モジュール性質をもたない

USE

文は,組込みモジュール 又は 組込みでないモジュールのいずれかを参照可能にす

る。モジュール名が組込みモジュール 及び 組込みでないモジュールの両方の名前である場合,組込みでないモジュー

ルが参照される。

ONLY

句をもたない

USE

文は,指定したモジュール内のすべての公開要素を参照可能にする。

ONLY

句をもつ

USE

文は,参照限定並び中に総称指定,参照対象名 又は 参照利用者定義演算として書いてある

要素だけを参照可能にする。

一つの有効域内で一つのモジュールに対して複数の

USE

文を書いてもよい。それらのうちいずれかの

USE

文が

ONLY

句をもたない場合,そのモジュール内のすべての公開要素が参照可能になる。それらすべての

USE

文が

ONLY

句をもっている場合,参照限定並びで指定した要素だけが参照可能になる。

引用されるモジュール中の参照可能な要素は,次に示す一つ以上の局所識別子をもつ。

(1)

引用されるモジュールに対するいずれかの参照限定中に参照限定対象名 又は 総称指定の利用者定義演算として

書かれた識別子の場合,そのモジュール内の要素の識別子

(2)

そのモジュールに対するいずれかの仮称指定に指定されている要素の各局所名 又は 局所利用者定義演算

(3)

引用されるモジュールに対するどの仮称指定の参照対象名 又は 参照利用者定義演算としても書かれていない識

別子の場合,そのモジュール内の要素の識別子

総称引用仕様 及び 利用者定義演算以外の言語要素については,その有効域内でその識別子を要素の参照に用いな

い場合にだけ,二つ以上の参照可能な要素が同じ識別子をもってもよい。総称引用仕様 及び 利用者定義演算の扱いに

ついては,

16.2.3

で規定する。これらの場合を除いて,

USE

文で参照可能になった要素の局所識別子は,

USE

文 又

は 他の手段でその有効域内で参照可能になっている他のすべての要素の局所識別子と異なっていなければならない。

注記

11.9

一つの

USE

文中 又は 同じモジュールを引用する複数の

USE

文中に,一つの参照対象名 又は

参照利用者定義演算を複数回書くことは禁止されていない。その結果,参照結合した一つの要素が,

二つ以上の局所識別子で参照可能になることがある。

USE

文で参照可能になった要素の局所識別子は,その

USE

文を含む有効域内でその要素の属性

(

5.1.2

)

の定義を引

き起こす他のいかなる非実行文中にも書いてはならない。ただし,モジュールの有効域の場合は,有効域内の

PUBLIC

文 又は

PRIVATE

文には書いてもよく,

ASYNCHRONOUS

属性 又は

VOLATILE

属性をもってもよい。

このような局所識別子をモジュールの

PUBLIC

文中に書くと,

USE

文で参照可能になった要素は,そのモジュー

ルの公開要素となる。識別子をモジュールの

PRIVATE

文中に書くと,その要素は,そのモジュールの非公開要素と

なる。局所識別子を

PUBLIC

文にも

PRIVATE

文にも書かないと,その有効域での暗黙の参照許可属性(

5.2.1

照)をもつとみなされる。

注記

11.10

5.5.1

5.5.2

及び

5.4

の制約は,それぞれ,

COMMON

文の共通ブロック実体,

EQUIVA-

LENCE

文の結合実体 及び

NAMELIST

文の変数群名として局所名を書くことを禁止している。局

所名を,共通ブロック名 又は 変数群要素として書くことは禁止されていない。

注記

11.11

ONLY

句 及び 仮称指定が依存翻訳に与える影響については,

C.8.2.1

を参照。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

215

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

11.12

USE

文の例を次に示す。

USE STATS_LIB

は,モジュール

STATS LIB

中のすべての公開要素を参照可能にする。

USE MATH_LIB; USE STATS_LIB, SPROD => PROD

は,

MATH LIB

STATS LIB

中のすべての公開要素を参照可能にする。

MATH LIB

PROD

という要素

を含む場合,それは名前

PROD

で参照可能になるが,

STATS LIB

の要素

PROD

は名前

SPROD

で参照可

能になる。

USE STATS_LIB, ONLY: YPROD; USE STATS_LIB, ONLY : PROD

は,

STATS LIB

中の公開要素

YPROD

PROD

を参照可能にする。

USE STATS_LIB, ONLY : YPROD; USE STATS_LIB

は,

STATS LIB

中のすべての公開要素を参照可能にする。

11.3

初期値設定プログラム単位

初期値設定プログラム単位

(block data program unit)

は,名前付き共通ブロック中のデータ実体に初期値を与える。

R1116

初期値設定プログラム単位

is

BLOCK DATA

[

宣言部

]

END BLOCK DATA

R1117

BLOCK DATA

is

BLOCK DATA

[

初期値設定プログラム単位名

]

R1118

END BLOCK DATA

is

END

[

BLOCK DATA

[

初期値設定プログラム単位名

] ]

C1116

(R1116)

初期値設定プログラム単位名は,

BLOCK DATA

文中に書いた場合にだけ,

END BLOCK

DATA

文中に書かなければならない。その場合,その名前は,

BLOCK DATA

文中の初期値設定プログ

ラム単位名と同じでなければならない。

C1117

(R1116)

初期値設定プログラム単位中の宣言部は,派生型定義,

ASYNCHRONOUS

文,

BIND

文,

COMMON

文,

DATA

文,

DIMENSION

文,

EQUIVALENCE

文,

IMPLICIT

文,

INTRINSIC

文,

PA-

RAMETER

文,

POINTER

文,

SAVE

文,

TARGET

文,

USE

文,

VOLATILE

文 及び 型宣言文だけ

を含まなければならない。

C1118

(R1116)

初期値設定プログラム単位の宣言部中の型宣言文は,

ALLOCATABLE

属性,

EXTERNAL

属性 及び

BIND

属性の指定を含んではならない。

注記

11.13

初期値設定プログラム単位名の使用についての補足説明は,

C.8.1

を参照。

名前付き共通ブロック中の一部のデータ実体を初期確定にする場合,その共通ブロック記憶列中の記憶単位は,初

期確定にしないものもすべて,指定しておく必要がある。一つの初期値設定プログラム単位が,初期確定にするデー

タ実体をもつ名前付き共通ブロックを二つ以上含んでもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

216

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

11.14

次の例で,共通ブロック

BLOCK1

及び

BLOCK2

は共に,一つの初期値設定プログラム単位内で初

期値設定される実体をもつ。

BLOCK DATA INIT

REAL A, B, C, D, E, F

COMMON /BLOCK1/ A, B, C, D

DATA A /1.2/, C /2.3/

COMMON /BLOCK2/ E, F

DATA F /6.5/

END BLOCK DATA INIT

B

D

及び

E

は初期値設定されないが,共通ブロックの一部として指定する必要がある。

初期値設定プログラム単位で初期確定にできるのは,名前付き共通ブロック中のデータ実体だけとする。

注記

11.15

共通ブロック中のデータ実体に結合しているデータ実体は,その共通ブロックに含まれている

とみなす。

同じ名前の共通ブロックを,一つのプログラムにおける二つ以上の初期値設定プログラム単位中に指定してはなら

ない。

一つのプログラム中に,二つ以上の名前なし初期値設定プログラム単位があってはならない。

11.14

初期値設定プログラム単位の例を次に示す。

BLOCK DATA WORK

COMMON /WRKCOM/ A, B, C (10, 10)

REAL :: A, B, C

DATA A /1.0/, B /2.0/, C /100 * 0.0/

END BLOCK DATA WORK

12

手続

手続の基本概念は,

2.2.3

による。この箇条では,手続を完全に規定する。手続によって指定した動作は,手続引

用を実行することによってその手続を呼び出した時に実行される。

手続によってカプセル化された処理の列は,引数結合(

12.4.1

参照)によって,その手続を呼び出した有効域内の

要素を参照する。仮引数

(dummy argument)

は,手続の宣言

(R1233)

において

SUBROUTINE

文,

FUNCTION

又は

ENTRY

文に指定する名前とする。仮引数は,箇条

13

14

及び

15

にある組込み手続 及び 組込みモジュール

内の手続に対しても規定している。

手続を呼び出す有効域内の要素は,実引数によって指定される。実引数

(actual argument)

は,手続引用

(R1221)

に指定する要素とする。

手続は,参照結合(

16.4.1.2

参照),親子結合(

16.4.1.3

参照),他言語結合(

16.4.1.4

参照),記憶列結合(

16.4.3

参照)又は 外部手続の引用(

5.1.2.6

参照)によって,必ずしもその手続を呼び出す有効域ではない他の有効域内の

要素を参照してもよい。

12.1

手続の分類

手続は,引用の形 及び 定義の方法によって分類する。

12.1.1

引用の形による手続の分類

手続の定義は,その手続が関数であるか 又は サブルーチンであるかを指定する。関数引用は,式の中に一次子とし

て明示的に書くか 又は 式の中に利用者定義演算子(

7.1.3

参照)として暗黙的に書く。サブルーチン引用は,

CALL

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

217

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

文 又は 利用者定義代入文(

7.4.1.4

参照)とする。

要素別に引用することができる手続は,要素別処理

(elemental)

手続として分類する(

12.7

参照)。

12.1.2

定義の方法による手続の分類

手続は,組込み手続,外部手続,モジュール手続,内部手続,仮手続(仮手続ポインタであってもよい。),仮引数

でない手続ポインタ

又は 文関数

のいずれかとする。

12.1.2.1

組込み手続

処理系の一部としてあらかじめ用意されている手続を,組込み手続

(intrinsic procedure)

という。

12.1.2.2

外部手続

,

内部手続 及び モジュール手続

外部手続

(external procedure)

は,外部副プログラムによって,又は

Fortran

以外の方法によって定義した手続と

する。

内部手続

(internal procedure)

は,内部副プログラムによって定義した手続とする。内部副プログラムは,主プロ

グラム,外部副プログラム 又は モジュール副プログラムの内部に書くことができる。内部副プログラムを他の内部

副プログラムの内部に書くことはできない。内部手続の名前が大域要素でないこと,内部副プログラムには

ENTRY

文を含んではならないこと,内部手続名は仮手続と引数結合(

12.4.1.3

参照)してはならないこと,及び内部副プロ

グラムは親子結合によって親有効域の要素を参照できることを除いて,内部副プログラムは,外部副プログラムと同

じとする。

モジュール手続

(module procedure)

は,モジュール副プログラムによって定義した手続とする。

副プログラムは,

SUBROUTINE

文 又は

FUNCTION

文に対する手続を定義する。その手続が一つ以上の

ENTRY

文を含む場合,それぞれの

ENTRY

文に対して一つずつの手続が定義される。

12.1.2.3

仮手続

手続として指定した仮引数,及び 手続引用に書いた仮引数を,仮手続

(dummy procedure)

という。

POINTER

性をもつ仮手続は,仮手続ポインタとする。

12.1.2.4

手続ポインタ

手続ポインタは,

EXTERNAL

属性 及び

POINTER

属性をもつ手続とする。手続ポインタは,外部手続,モジュー

ル手続,組込み手続 又は 手続ポインタではない仮手続とポインタ結合してもよい。

12.1.2.5

文関数

単一の文によって定義する関数を,文関数

(statement function)

という(

12.5.4

参照)。

12.2

手続の特性

手続の特性

(characteristics of a procedure)

は,関数であるか 又は サブルーチンであるかの手続の分類,純粋で

あるか否か,要素別処理であるか否か,

BIND

属性をもつか否か,手続の引数の特性,及び 手続が関数である場合に

は結果の値の特性とする。

12.2.1

仮引数の特性

仮引数は,仮データ実体,仮手続,仮手続ポインタ

又は 星印(選択戻り星印と呼ぶ。)

である特性をもつ。

星印以外の

仮引数に

は,

OPTIONAL

属性をもつように指定することができる。

OPTIONAL

属性は,その手続の引用において,その仮

引数が必ずしも実引数と結合する必要がないことを意味する。

12.2.1.1

仮データ実体の特性

仮データ実体の特性は,型,もしあれば型パラメタ,形状,

INTENT

属性(

5.1.2.7

及び

5.2.7

参照),

OPTIONAL

属性(

5.1.2.9

及び

5.2.8

参照)があるか否か,

ALLOCATABLE

属性(

5.1.2.5.3

参照)があるか否か,

VALUE

性(

5.1.2.15

参照),

ASYNCHRONOUS

属性(

5.1.2.3

参照)又は

VOLATILE

属性(

5.1.2.16

参照)があるか否

か,多相的であるか否か 及び ポインタ(

5.1.2.11

及び

5.2.10

参照)であるか 又は 指示先(

5.1.2.14

及び

5.2.13

参照)であるかとする。実体の型パラメタ 又は 配列の上下限が,初期値式である場合には,その式の要素への依存

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

218

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

の仕方も特性とする。形状 若しくは 大きさが引き継がれた場合 又は 型パラメタが無指定の場合には,それも特性と

する。

12.2.1.2

仮手続 及び 仮手続ポインタの特性

仮手続の特性は,その引用仕様が明示的であるか否か(

12.3.1

参照),引用仕様が明示的である場合には手続とし

ての特性,

POINTER

属性があるか否か,及び

OPTIONAL

属性(

5.1.2.9

及び

5.2.8

参照)があるか否かとする。

12.2.1.3

星印の仮引数の特性

仮引数としての星印には,特性はない。

12.2.2

関数結果の特性

関数結果の特性は,その型,もしあれば型パラメタ,次元数,多相的であるか否か,

ALLOCATABLE

属性がある

か否か,それがポインタであるか否か,及び 手続ポインタであるか否かとする。関数結果が

ALLOCATABLE

属性

POINTER

属性ももたない配列である場合には,その形状も特性とする。関数結果の型パラメタ 又は 関数結果の

配列の上下限が初期値式でない場合には,式中の要素への依存の仕方も特性とする。関数結果の型パラメタが無指定

の場合には,どのパラメタが無指定であるかも特性とする。

文字型の関数結果の長さが引き継がれた場合には,それも特性とする。

12.3

手続引用仕様

手続の 引用仕様

(interface)

は,その手続を呼び出すときの引用の形を定義する。手続の引用仕様は,抽象引用仕

様,その引用仕様の名前,もしあれば束縛ラベル,及び もしあれば手続の総称識別子からなる。手続の特性は,変化

することはないが,それ以外の引用仕様は,別の有効域では異なっていてもよい。

抽象引用仕様

(abstract interface)

は,手続の特性 及び 仮引数の名前を含む。

注記

12.1

手続引用仕様についての説明は,

C.9.3

を参照。

12.3.1

暗黙的引用仕様 及び 明示的引用仕様

手続が有効域内で参照可能な場合,手続の引用仕様は,その有効域において 明示的

(explicit)

又は 暗黙的

(implicit)

とする。内部手続,モジュール手続 及び 組込み手続の引用仕様は,そのような有効域において常に明示的とする。サ

ブルーチン,及び 別の結果名をもつ関数の引用仕様は,それを定義している副プログラムの中では明示的とする。

関数の引用仕様は,常に暗黙的とする。

外部手続 及び 仮手続の引用仕様は,その手続に対する引用仕様宣言(

12.3.2.1

参照)が

与えられているか 又は 参照可能であるとき,それ自身以外の有効域内で明示的とし,それ以外の場合には暗黙的と

する。

12.2

C.8.3.5

に示したサブルーチン

LLS

は,明示的引用仕様をもっている。

12.3.1.1

明示的引用仕様

文関数以外の

手続は,その手続が引用され,次のいずれかの条件を満たす場合,明示的引用仕様をもたなければなら

ない。

(1)

手続の引用を書いたとき,次の

(

a

)

(

e

)

のいずれかを満たしている。

(a)

引数キーワード(

12.4.1

参照)がある。

(b)

総称名(

12.3.2.1

参照)によって引用している。

(c)

利用者定義代入として現れている(サブルーチンの場合)。

(d)

利用者定義演算として,式中に現れている(関数の場合)。

(e)

純粋手続であることが要求される文脈に現れている。

(2)

手続の仮引数が次の

(

a

)

(

d

)

のいずれかを満たしている。

(a)

ALLOCATABLE

属性,

ASYNCHRONOUS

属性,

OPTIONAL

属性,

POINTER

属性,

TARGET

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

219

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

属性,

VALUE

属性 又は

VOLATILE

属性をもっている。

(b)

形状引継ぎ配列である。

(c)

パラメタ付き派生型である。

(d)

多相的である。

(3)

手続の結果が次の

(

a

)

(

c

)

いずれかを満たしている。

(a)

配列である。

(b)

POINTER

属性 又は

ALLOCATABLE

属性をもつ。

(c)

初期値式ではない

引継ぎでない

型パラメタ値をもつ。

(4)

手続が要素別処理である。

(5)

手続が

BIND

属性をもつ。

12.3.2

手続引用仕様の指定

内部手続,外部手続,モジュール手続 及び 仮手続の引用仕様は,

FUNCTION

文,

SUBROUTINE

文 又は

ENTRY

文,仮引数の宣言文 及び 関数結果の宣言文によって指定する。これらの文は,

ENTRY

文を引用仕様本体の中に書

いてはならないことを除いて,手続の定義の中,引用仕様本体の中,又は その両方に書いてもよい。

注記

12.3

内部手続,モジュール手続 及び 組込み関数の引用仕様は,既に明示的であるので引用仕様本

体内に書いてはならない。ただし,モジュール手続名は,引用仕様宣言内の

PROCEDURE

文中に現

れてもよい(

12.3.2.1

参照)。

12.3.2.1

手続引用仕様宣言

R1201

引用仕様宣言

is

INTERFACE

[

引用仕様部構文

] ...

END INTERFACE

R1202

引用仕様部構文

is

引用仕様本体

or

PROCEDURE

R1203

INTERFACE

is

INTERFACE

[

総称指定

]

or

ABSTRACT INTERFACE

R1204

END INTERFACE

is

END INTERFACE

[

総称指定

]

R1205

引用仕様本体

is

FUNCTION

[

宣言部

]

END FUNCTION

or

SUBROUTINE

[

宣言部

]

END SUBROUTINE

R1206

PROCEDURE

is

[

MODULE

]

PROCEDURE

手続名並び

R1207

総称指定

is

総称名

or

OPERATOR (

利用者定義演算子

)

or

ASSIGNMENT ( = )

or

派生型入出力総称指定

R1208

派生型入出力総称指定

is

READ ( FORMATTED )

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

220

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

READ ( UNFORMATTED )

or

WRITE ( FORMATTED )

or

WRITE ( UNFORMATTED )

R1209

IMPORT

is

IMPORT

[ [

::

]

輸入名並び

]

C1201

(R1201)

副プログラム内の引用仕様宣言は,その副プログラムによって定義される手続の引用仕様本体

を含んではならない。

C1202

(R1201)

総称指定は,

INTERFACE

文に指定されている場合に限り,

END INTERFACE

文中に書

かなければならない。

END INTERFACE

文に総称指定を書く場合,

INTERFACE

文にも同じ総称指

定を書かなければならない。

END INTERFACE

文に

ASSIGNMENT(=)

を書く場合,

INTERFACE

文に

ASSIGNMENT(=)

を書かなければならない。

END INTERFACE

文に派生型入出力総称指定を書く場

合,

INTERFACE

文にも同じ派生型入出力総称指定を書かなければならない。

END INTERFACE

文に

OPERATOR(

利用者定義演算子

)

を書く場合,

INTERFACE

文にも同じ利用者定義演算子を書かなければ

ならない。一方の利用者定義演算子が

.LT.

.LE.

.GT.

.GE.

.EQ.

又は

.NE.

である場合,他方は

<

<=

>

>=

==

又は

/=

の対応する演算子であってもよい。

C1203

(R1203) INTERFACE

文が

ABSTRACT INTERFACE

である場合,

FUNCTION

文の関数名 又は

SUB-

ROUTINE

文のサブルーチン名は,組込み型を指定するキーワードと同じであってはならない。

C1204

(R1202) PROCEDURE

文は,総称指定をもつ引用仕様宣言にだけ指定できる。

C1205

(R1205)

純粋手続の引用仕様本体は,

POINTER

属性

,選択戻り

及び 手続引数を除くすべての仮引数の

授受特性を宣言しなければならない。

C1206

(R1205)

引用仕様本体は,

ENTRY

文,

DATA

文,

FORMAT

及び 文関数定義文

を含んではならない。

C1207

(R1206)

手続名は明示的な引用仕様をもたなければならない。手続名は,参照可能な手続ポインタ,外

部手続,仮手続 又は モジュール手続を参照しなければならない。

C1208

(R1206) PROCEDURE

文に

MODULE

を指定する場合,その文の各手続名は,現在の有効範囲内でモ

ジュール手続として参照可能でなければならない。

C1209

(R1206)

手続名には,それより前に,同じ総称識別子をもつ参照可能な引用仕様内の

PROCEDURE

文で宣言される手続を指定してはならない。

C1210

(R1209) IMPORT

文は,引用仕様本体にだけ指定することができる。

C1211

(R1209)

各輸入名は,親有効域内の要素の名前でなければならない。

外部副プログラム 又は モジュール副プログラムは,その副プログラムによって定義される手続に対して,個別引

用仕様

(specific interface)

を指定する。個別引用仕様は,モジュール手続に対しては明示的とし,外部手続に対して

は暗黙的とする。

ABSTRACT INTERFACE

によって導入される引用仕様宣言を抽象引用仕様宣言

(abstract interface block)

とする。抽

象引用仕様宣言内の引用仕様本体は,抽象引用仕様を宣言する。総称指定をもつ引用仕様宣言を総称引用仕様宣言

(generic interface block)

とする。

ABSTRACT

及び 総称指定のいずれの指定もない引用仕様宣言を個別引用仕様宣言

(specific interface block)

とする。

引用仕様本体によって宣言される要素の名前は,引用仕様本体を開始する

FUNCTION

文の関数名 又は

SUBROU-

TINE

文のサブルーチン名とする。

総称引用仕様宣言 又は 個別引用仕様宣言の引用仕様本体は,外部手続 又は 仮手続に対して,

EXTERNAL

属性

及び 明示的個別引用仕様を与える。宣言される手続の名前がその引用仕様宣言を含む副プログラムの仮引数の名前と

同じである場合,その手続は仮手続とし,そうでなければ外部手続とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

221

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

引用仕様本体は,明示的個別引用仕様 又は 抽象引用仕様の特性のすべてを指定する。引用仕様本体の宣言部で,そ

の手続の特性を決定しないデータ要素に対して,属性を指定したり値を定義したりしてもよい。それらの指定は,効

果をもたない。

外部手続に対する引用仕様本体 又は 手続宣言文(

12.3.2.3

参照)によって明示的個別引用仕様を指定する場合,そ

の特性は,手続定義で指定した特性と一致しなければならない。ただし,手続が純粋であると定義されていても,そ

の引用仕様では純粋でないと指定してよい。入口名を引用仕様本体内の手続名として使用することによって,

ENTRY

文に指定した手続の名前に対して引用仕様を指定してもよい。プログラム内に存在しないその外部手続がどんな方法

によっても使用されない場合,その外部手続に対する引用仕様によって明示的個別引用仕様を指定してもよい。一つ

の有効域内では,一つの手続が二つ以上の明示的個別引用仕様をもってはならない。

注記

12.4

仮引数の名前は特性ではないので,引用仕様本体で指定した仮引数の名前と,手続の定義に書

いた仮引数の名前とは,異なっていてもよい。

IMPORT

文は,引用仕様本体において,親有効域の名前付き要素を親子結合によって参照可能にすることを宣言

する。親有効域において定義され,この方法によって輸入される要素は,その引用仕様本体よりも先に明示的に宣言

しなければならない。

IMPORT

文によって参照可能となった要素の名前は,

16.4.1.3

で規定する,その名前の親要

素を参照不能とするようないかなる文脈にも現れてはならない。

引用仕様本体内において,輸入名並びを指定しない

IMPORT

文を指定した場合,他の

IMPORT

文において指定

しなかった各親要素についても,その名前が,

16.4.1.3

で規定する,その親要素を参照不能とするようないかなる文

脈にも現れないとき,親子結合によって参照可能となる。この方法によって参照可能となった要素は,親有効域で定

義され,親子結合によって参照される場合,その引用仕様本体よりも先に明示的に宣言しなければならない。

12.5

総称指定のない引用仕様宣言

INTERFACE

SUBROUTINE EXT1 (X, Y, Z)

REAL, DIMENSION (100, 100) :: X, Y, Z

END SUBROUTINE EXT1

SUBROUTINE EXT2 (X, Z)

REAL X

COMPLEX (KIND = 4) Z (2000)

END SUBROUTINE EXT2

FUNCTION EXT3 (P, Q)

LOGICAL EXT3

INTEGER P (1000)

LOGICAL Q (1000)

END FUNCTION EXT3

END INTERFACE

この例の引用仕様宣言は,三つの外部手続

EXT1

EXT2

及び

EXT3

に対して,明示的引用仕様を指定

している。これらの手続はいずれも,次のような引数キーワードによる呼出しをしてもよい(

12.4.1

参照)。

EXT3 (Q = P_MASK (N+1 : N+1000), P = ACTUAL_P)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

222

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.6

形状引継ぎ引数をもつ手続を仮引数とするモジュール手続

IMPORT

文は,不透明な型の形状引継ぎ引数をもつ手続をモジュール手続の仮引数とするように

使うことができる。

MODULE M

TYPE T

PRIVATE ! T

は不透明な型

...

END TYPE

CONTAINS

SUBROUTINE PROCESS(X,Y,RESULT,MONITOR)

TYPE(T),INTENT(IN) :: X(:,:),Y(:,:)

TYPE(T),INTENT(OUT) :: RESULT(:,:)

INTERFACE

SUBROUTINE MONITOR(ITERATION_NUMBER,CURRENT_ESTIMATE)

IMPORT T

INTEGER,INTENT(IN) :: ITERATION_NUMBER

TYPE(T),INTENT(IN) :: CURRENT_ESTIMATE(:,:)

END SUBROUTINE

END INTERFACE

...

END SUBROUTINE

END MODULE

仮手続

MONITOR

は,形状引継ぎ配列引数であるので,明示的な引用仕様が必要である。しかし,

TYPE(T)

は,

IMPORT

文がなければその引用仕様本体内で参照可能とはならない。

総称引用仕様宣言は,引用仕様宣言内のそれぞれの手続に対して,総称引用仕様

(generic interface)

を指定する。

PROCEDURE

文は,その総称引用仕様をもつ外部手続,仮手続 又は モジュール手続を列挙して指定する。総称引

用仕様は,常に明示的とする。

手続は,個別引用仕様が参照可能である場合,その個別引用仕様を通して引用することができる。手続は,総称引

用仕様を通して引用してもよい。

INTERFACE

文の総称指定は,その引用仕様宣言中のすべての手続に対して,総称

識別子

(generic identifier)

となる。同じ総称識別子をもつ二つの手続が,どのように異ならなければならないかの規

則を,

16.2.3

に示す。この規則によって,総称識別子による呼出しを一つの個別手続に対応付けることができる。

総称名

(generic name)

は,その引用仕様宣言中のすべての手続を引用できる一つの名前を指定する。総称名は,引

用仕様宣言中の手続の名前と同じであってもよいし,参照可能な他の総称名と同じであってもよい。

総称名は,派生型の名前と同じであってもよい。その場合,引用仕様宣言内のすべての手続は関数でなければなら

ない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

223

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.7

総称引用仕様

INTERFACE SWITCH

SUBROUTINE INT_SWITCH(X, Y)

INTEGER, INTENT (INOUT) :: X, Y

END SUBROUTINE INT_SWITCH

SUBROUTINE REAL_SWITCH (X, Y)

REAL, INTENT (INOUT) :: X, Y

END SUBROUTINE REAL_SWITCH

SUBROUTINE COMPLEX_SWITCH (X, Y)

COMPLEX, INTENT (INOUT) :: X, Y

END SUBROUTINE COMPLEX_SWITCH

END INTERFACE SWITCH

これら三つのサブルーチン(

INT SWITCH

REAL SWITCH

COMPLEX SWITCH

)はいずれも,それぞ

れの個別名と同様に,総称名

SWITCH

でも引用することができる。例えば,

INT SWITCH

は,次の形で

も引用できる。

CALL SWITCH (MAX_VAL, LOC_VAL) ! MAX_VAL

及び

LOC_VAL

は,整数型とする。

派生型入出力総称指定をもつ

INTERFACE

文は,利用者定義の派生型入出力手続

(

9.5.3.7

)

に対する引用仕様と

する。

12.3.2.1.1

利用者定義演算

総称指定の中に

OPERATOR

を指定する場合には,その総称引用仕様内で指定する手続は,すべて利用者定義演算と

して引用可能な関数(

7.1.3

7.1.8.7

7.2

及び

12.4

参照)でなければならない。二つの引数をもつ関数の場合には,

2

項演算の規則が適用される。一つの引数をもつ関数の場合には,単項演算の規則が適用される。引数をもたない関

数 又は 三つ以上の引数をもつ関数には,

OPERATOR

を指定することはできない。仮引数は,

INTENT(IN)

を指定した

省略可能でない仮データ実体でなければならない。

関数結果は,文字長引継ぎであってはならない。

演算子が組込み演算子

(R310)

である場合には,関数の引数の個数は,その演算子の組込み演算としての使用に適合しなければならず,仮引数の型,

種別型パラメタ 及び 次元数は,その組込み演算

(

7.1.2

)

に必要とされるものと異なっていなければならない。

利用者定義演算は,指定された関数の引用とみなされる。利用者定義単項演算に対しては,演算対象は,関数の仮

引数に対応する。利用者定義

2

項演算に対しては,左側の演算対象は,関数の

1

番目の仮引数に対応し,右側の演算

対象は,

2

番目の仮引数に対応する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

224

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.8

OPERATOR

総称指定

INTERFACE OPERATOR (*)

FUNCTION BOOLEAN_AND (B1, B2)

LOGICAL, INTENT (IN) :: B1 (:), B2 (SIZE (B1))

LOGICAL :: BOOLEAN_AND (SIZE (B1))

END FUNCTION BOOLEAN_AND

END INTERFACE OPERATOR (*)

この宣言によって,例えば

SENSOR (1:N) * ACTION (1:N)

は,次の関数呼出しの代わりとなる。

BOOLEAN_AND (SENSOR (1:N), ACTION (1:N)) ! SENSOR

及び

ACTION

は論理型とする。

利用者定義演算子は,総称名と同様に二つ以上の関数に適用でき,その解釈は,総称手続名の場合と同様とする。

組込み演算子に対する総称性は,それが表現する組込み演算を含む。関係演算子の二つの形式は,どちらも同じ解釈

をもつ(

7.2

参照)ので,一つの形式(例えば

<=

)を拡張すれば,両方の形式(

<=

及び

.LE.

)を定義することに

なる。

注記

12.9

Fortran 90

及び

Fortran 95

では,ポインタ仮引数が

INTENT

属性をもつことを許していな

かったので,ポインタの演算を定義することはできなかった。ポインタ仮引数に対するこの

INTENT

属性の制限は今やなくなったので,ポインタの利用者定義演算が可能である。

しかし,

POINTER

属性は,総称手続を解決するために使うことはできない

(

16.2.3

)

。すなわち,

ポインタに対する手続 及び 非ポインタに対する別の手続をもつような総称演算を定義することはで

きない。

12.3.2.1.2

利用者定義代入

総称宣言に

ASSIGNMENT(=)

を指定する場合には,その総称引用仕様内の手続は,すべて利用者定義代入として引

用可能なサブルーチン(

7.4.1.4

及び

7.4.1.5

参照)でなければならない。利用者定義代入は,総称名と同様に二つ

以上のサブルーチンに適用でき,その解釈は,総称手続名の場合と同様とする。

これらのサブルーチンは,ちょうど二つの仮引数をもたなければならない。仮引数は,省略可能でない仮データ実

体でなければならない。

1

番目の引数は,

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもたなければならず,

2

番目の引数は

INTENT(IN)

属性をもたなければならない。

2

番目の引数が

1

番目の引数とは異なる次元数をもつ配

列でなければならないか,引数の宣言時の型 及び 種別型パラメタが

7.8

によって規定されているものと一致して

はならないか,又は

1

番目の引数が派生型でなければならないかのいずれかとする。利用者定義代入は,

1

番目の引

数として左辺をもち,

2

番目の引数として右辺を括弧でくくったものをもつようなサブルーチンの引用とみなされる。

ASSIGNMENT

総称指定は,代入操作を拡張する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

225

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.10

ASSIGNMENT

総称指定の使用例

INTERFACE ASSIGNMENT (=)

SUBROUTINE LOGICAL_TO_NUMERIC (N, B)

INTEGER, INTENT (OUT) :: N

LOGICAL, INTENT (IN)

:: B

END SUBROUTINE LOGICAL_TO_NUMERIC

SUBROUTINE CHAR_TO_STRING (S, C)

USE STRING_MODULE

! STRING

型の定義を含む

TYPE (STRING), INTENT (OUT) :: S

!

可変長文字列

CHARACTER (*), INTENT (IN) :: C

END SUBROUTINE CHAR_TO_STRING

END INTERFACE ASSIGNMENT (=)

この定義による代入は,次のようになる。

KOUNT = SENSOR (J)

! CALL LOGICAL_TO_NUMERIC (KOUNT, (SENSOR (J)))

NOTE = ’89AB’

! CALL CHAR_TO_STRING (NOTE, (’89AB’))

12.3.2.1.3

利用者定義派生型入出力手続の引用仕様

利用者定義派生型入出力手続の引用仕様宣言に指定したすべての手続は,

9.5.3.7.2

で規定されている引用仕様を

もつサブルーチンでなければならない。

12.3.2.2 EXTERNAL

EXTERNAL

(EXTERNAL statement)

は,

EXTERNAL

属性

(

5.1.2.6

)

をもつ名前の並びを指定する。

R1210

EXTERNAL

is

EXTERNAL [ :: ]

外部名並び

それぞれの外部名は,外部手続の名前,仮引数の名前,手続ポインタ 又は 初期値設定プログラム単位の名前でな

ければならない。外部副プログラムにおいて,

EXTERNAL

文に,その副プログラムによって定義される手続の名前

を指定してはならない。

初期値設定プログラム単位名を

EXTERNAL

文に書いた場合,その初期値設定プログラム単位がプログラムの一部

であることが確認される。

注記

12.11

外部手続に関して起こりうる可搬性の問題についての説明は,

C.9.1

を参照。

12.12

EXTERNAL

文の例

EXTERNAL :: FOCUS

12.3.2.3

手続宣言文

手続宣言文は,手続ポインタ,仮手続 及び 外部手続を宣言する。それによって手続宣言並びのすべての手続要素

に対して

EXTERNAL

属性

(

5.1.2.6

)

を宣言する。

R1211

手続宣言文

is

PROCEDURE (

[

手続引用仕様

]

)

[ [

,

手続属性指定

] ...

::

]

手続宣言並び

R1212

手続引用仕様

is

引用仕様名

or

宣言型指定子

R1213

手続属性指定

is

参照許可指定子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

226

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

手続言語束縛指定子

or

INTENT (

授受特性指定

)

or

OPTIONAL

or

POINTER

or

SAVE

R1214

手続宣言

is

手続要素名

[

=>

空初期値

]

R1215

引用仕様名

is

名前

C1212

(R1215)

名前は,抽象引用仕様の名前 又は 明示的な引用仕様をもつ手続の名前でなければならない。

名前は,手続宣言文によって宣言する場合,あらかじめ宣言しなければならない。名前は,組込み手続を

表す場合,

13.6

に列挙されている名前のうち

印のない名前でなければならない。

C1213

(R1215)

名前は,組込み型を宣言するキーワードと同じであってはならない。

C1214

手続要素は,

INTENT

属性 又は

SAVE

属性を指定する場合,

POINTER

属性も指定しなければなら

ない。

C1215

(R1211)

手続引用仕様に要素別処理手続の指定がある場合,それぞれの手続要素名は外部手続を指定す

るものでなければならない。

C1216

(R1214)

手続宣言に

=>

が指定される場合,その手続要素には

POINTER

属性を指定しなければなら

ない。

C1217

(R1211)

NAME=

をもつ手続言語束縛指定子を指定する場合,手続宣言並びにはちょうど一つの手続宣

言を指定しなければならない。その場合の手続宣言は,

POINTER

属性を指定してはならず,仮手続で

あってもならない。

C1218

(R1211)

手続言語束縛指定子を指定する場合,手続引用仕様を指定しなければならず,その手続引用

仕様は引用仕様名でなければならず,引用仕様名は手続言語束縛指定子を指定して宣言しなければなら

ない。

手続引用仕様が指定され,それが引用仕様名からなる場合,それは宣言される手続 又は 手続ポインタに対する明

示的な個別引用仕様

(

12.3.2.1

)

を宣言する。その抽象引用仕様

(

12.3

)

は,引用仕様名によって名前付けられた引用

仕様で指定される。

手続引用仕様が指定され,宣言型指定子からなる場合,それは,宣言される手続 又は 手続ポインタが暗黙の引

用仕様 及び 指定された結果の型をもつ関数であることを宣言する。外部手続に型が指定される場合,その関数定義

(

12.5.2.1

)

には同じ結果の型 及び 種別型パラメタを指定しなければならない。

手続引用仕様が指定されない場合,手続宣言文は,宣言される手続 又は 手続ポインタがサブルーチンであるか関

数であるかを宣言しない。

手続言語束縛指定子以外の手続属性指定が指定される場合,それは,宣言される手続 又は 手続ポインタがその属

性をもつことを宣言する。これらの属性は,

5.1.2

で規定している。

NAME=

をもつ手続言語束縛指定子が指定される

場合,

15.4.1

で規定したとおり,それは束縛ラベル 又は それを指定しないことを宣言する。

NAME=

をもたない手続

言語束縛指定子を指定してもよいが,

C1218

によって要求される手続引用仕様からも冗長である。

手続宣言文の手続宣言に

=>

空初期値

を指定した場合,それは対応する手続要素の初期結合状態が空状態である

ことを宣言する。それは

SAVE

属性をもつことを意味し,手続宣言文における

SAVE

属性の明示的な指定 又は

SAVE

文によって再度宣言してもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

227

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

12.13

EXTERNAL

文とは対照的に,初期値設定副プログラムを識別するために

PROCEDURE

を利用することはできない。

12.14

PROCEDURE

文の例

7.43

で使用している

P

及び

BESSEL

は,次のプログラムによって定義されたものである。

ABSTRACT INTERFACE

FUNCTION REAL_FUNC (X)

REAL, INTENT (IN) :: X

REAL :: REAL_FUNC

END FUNCTION REAL_FUNC

END INTERFACE

INTERFACE

SUBROUTINE SUB (X)

REAL, INTENT (IN) :: X

END SUBROUTINE SUB

END INTERFACE

!--

明示的引用仕様をもつ幾つかの外部手続 又は 仮手続。

PROCEDURE (REAL_FUNC) :: BESSEL, GAMMA

PROCEDURE (SUB) :: PRINT_REAL

!--

明示的引用仕様をもつ幾つかの手続ポインタ,

!--

一つは

NULL()

に初期化されている。

PROCEDURE (REAL_FUNC), POINTER :: P, R => NULL()

PROCEDURE (REAL_FUNC), POINTER :: PTR_TO_GAMMA

!--

手続ポインタの成分をもつ派生型

...

TYPE STRUCT_TYPE

PROCEDURE (REAL_FUNC), POINTER :: COMPONENT

END TYPE STRUCT_TYPE

!-- ...

及びその型の変数。

TYPE(STRUCT_TYPE) :: STRUCT

!--

暗黙的引用仕様をもつ外部手続又は仮手続

PROCEDURE (REAL) :: PSI

12.3.2.4 INTRINSIC

INTRINSIC

(INTRINSIC statement)

は,

INTRINSIC

属性

(

5.1.2.8

)

をもつ名前の並びを指定する。

R1216

INTRINSIC

is

INTRINSIC [ :: ]

組込み手続名並び

C1219

(R1216)

それぞれの組込み手続名は,組込み手続の名前でなければならない。

注記

12.15

一つの名前は,一つの有効域内において,明示的に

EXTERNAL

属性 及び

INTRINSIC

属性

の両方の属性をもつように指定してはならない。

12.3.2.5

暗黙的引用仕様の指定

ある有効域内で,関数の引用仕様が暗黙的である場合,関数結果の型 及び 型パラメタは,関数名の暗黙的 又は 明

示的な型宣言によって指定される。ある有効域内で,引用仕様が暗黙的である手続を呼び出す場合,実引数の型,型

パラメタ 及び 形状は,その手続の仮引数の特性に適合しなければならない。

12.4

手続引用

手続引用の形式は,手続 又は 手続ポインタの引用仕様に従う。しかし,手続がどのように定義されているかには

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

228

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

関係しない。手続引用の形式は,次のとおりとする。

R1217

関数引用

is

手続特定子

(

[

実引数指定子並び

]

)

C1220

(R1217)

手続特定子は,関数を特定しなければならない。

C1221

(R1217)

関数引用の実引数指定子並びには,選択戻り指定子を指定することはできない。

R1218

CALL

is

CALL

手続特定子

[

(

[

実引数指定子並び

]

)

]

C1222

(R1218)

手続特定子は,サブルーチンを特定しなければならない。

R1219

手続特定子

is

手続名

or

手続成分引用

or

データ参照

%

束縛名

C1223

(R1219)

手続名は,手続 又は 手続ポインタの名前でなければならない。

C1224

(R1219)

束縛名は,データ参照の宣言時の型の束縛名(

4.5.4

参照)でなければならない。

C1224a

(R1219)

データ参照が配列である場合,引用する型束縛手続は,

PASS

属性(

4.5.4

参照)をもたなけ

ればならない。

型束縛手続の引用の解決は,

12.4.5

による。

関数は,利用者定義演算

(

12.3.2.1.1

)

として引用してもよい。サブルーチンは,利用者定義代入

(

12.3.2.1.2

)

とし

て引用してもよい。

R1220

実引数指定子

is

[

引数キーワード

=

]

実引数

R1221

実引数

is

or

変数

or

手続名

or

手続成分引用

or

選択戻り指定子

R1222

選択戻り指定子

is

*

文番号

C1225

(R1220)

手続の引用仕様が有効域内で暗黙的である場合には,

引数キーワード

=

を指定することはで

きない。

C1226

(R1220) “

引数キーワード

=

は,先行するすべての実引数指定子の

引数キーワード

=

を省略しない

限り,省略してはならない。

C1227

(R1220)

それぞれの引数キーワードは,その手続の明示的引用仕様中の仮引数の名前でなければなら

ない。

C1228

(R1221)

組込みでない要素別処理手続は,実引数として用いてはならない。

C1229

(R1221)

手続名は,外部手続,仮手続,モジュール手続,手続ポインタ,又は

13.6

に列挙している個

別組込み関数のうち

印のない組込み関数の名前でなければならない。

注記

12.16

この規格では,内部手続を実引数として用いることを禁止している。これは,再

帰的な親手続をもつ内部手続が,親手続の正しい分身

(

12.5.2.3

)

の言語要素を確実に参

照しなければならないという問題を簡単にする。内部手続を実引数に書けるように拡張

した処理系では,上の場合の正しい分身は,対応する仮引数を最終的に異なる分身中で

呼び出したのであっても,手続を実引数として提供した分身とする。

C1230

(R1221)

純粋手続を引用する場合,実引数として書く手続名は,純粋手続の名前でなければならない

12.6

参照)。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

229

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

12.17

この制約は,純粋でない手続の呼出しによって手続の純粋性が損われないことを

保証する。

C1231

(R1222)

選択戻り指定子の文番号は,

CALL

文と同じ有効域内にある飛び先文の文番号でなければならない。

注記

12.18

省略可能引数を省略するために連続するコンマを用いることはできない。

12.19

手続ポインタを使った手続引用の例

P => BESSEL

WRITE (*, *) P(2.5)

!-- BESSEL(2.5)

S => PRINT_REAL

CALL S(3.14)

12.4.1

実引数,仮引数 及び 引数結合

サブルーチン引用 又は 関数引用において,実引数の並びは,指定した実引数と手続の仮引数との間の対応を識別

する。この対応は,引数キーワードによって確定してもよいし,引数の位置によって確定してもよい。引数キーワー

ドを書いた場合には,実引数は,引数キーワードと同じ名前をもつ仮引数と結合する(この場合,手続引用がある有

効域内で参照可能な引用仕様から仮引数名を使用する。)。引数キーワードを省略した場合には,実引数は,短縮され

た仮引数並びの対応する位置の仮引数と結合する。すなわち,

1

番目の実引数は短縮された並びの

1

番目の仮引数と,

2

番目の実引数は短縮された並びの

2

番目の仮引数と,というように順に結合する。短縮された仮引数並びは,すべ

ての仮引数からなる仮引数並び,又は 当該実体仮引数

(

4.5.3.3

)

があるときはその当該実体仮引数を省略した仮引数

並びのいずれかとする。それぞれの省略可能でない仮引数には,ちょうど一つの実引数が結合しなければならない。

それぞれの省略可能な仮引数には,高々一つの実引数が結合できる。それぞれの実引数は,仮引数と結合しなければ

ならない。

12.20

省略可能な仮引数

SUBROUTINE SOLVE (FUNCT, SOLUTION, METHOD, STRATEGY, PRINT)

INTERFACE

FUNCTION FUNCT (X)

REAL FUNCT, X

END FUNCTION FUNCT

END INTERFACE

REAL SOLUTION

INTEGER, OPTIONAL :: METHOD, STRATEGY, PRINT

...

この手続は,引用仕様が明示的であるならば,次のように呼び出すことができる。

CALL SOLVE (FUN, SOL, PRINT = 6)

ここで,引用仕様宣言によって引用仕様を指定した場合は,最後の引数の名前を

PRINT

と指定して

あるとする。

12.4.1.1

当該実体仮引数 及び 引数結合

当該実体仮引数

(

4.5.3.3

)

をもつ型束縛手続 又は 手続ポインタ成分を引用すると,その当該実体仮引数には,関数

引用中 又は

CALL

文中のデータ参照が実引数として結合する。

12.4.1.2

仮データ実体と結合する実引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

230

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

仮引数は,割付け可能でもなくポインタでもない場合,結合する実引数と型が適合しなければならない(

5.1.1.2

参照)。仮引数が割付け可能であるか 又は ポインタである場合,結合する実引数は,仮引数が多相的であるとき か

つ そのときに限り多相的でなければならず,実引数 及び 仮引数はいずれも無制限多相的でなければならないか 又は

実引数の宣言時の型は仮引数の宣言時の型と同じでなければならないかのいずれかである。

注記

12.21

多相的な割付け仮引数 又は ポインタ仮引数の実行時の型は,その副プログラム内の

ALLO-

CATE

文 又は ポインタ代入の実行の結果として変更してもよい。したがって,対応する実引数は多

相的である必要があり,その宣言時の型は仮引数の宣言時の型 又は その拡張と同じである必要があ

る。しかし,型の適合性によって,仮引数の宣言時の型は,実引数の型 又は その拡張と同じである

ことが要求されている。したがって,仮引数 及び 実引数は,同じ宣言時の型をもつ必要がある。

実行時の型の情報は,多相的でない割付け仮引数 又は ポインタ仮引数に対しては維持されない。

しかし,そのような仮引数の割付け 又は ポインタへの代入は,対応する実引数が多相的である場合,

この情報を維持する必要がある。したがって,対応する実引数は多相的であってはならない。

実引数の型パラメタ値は,引継ぎでもなく無指定でもない対応する仮引数の型パラメタ値と一致しなければならな

い。ただし,引継ぎでない仮引数と結合する基本文字型の実引数の文字長パラメタは,一致しなくてもよい。

スカラの仮引数が基本文字型である場合には,その仮引数の長さ

len

は,実引数の長さより短いか 又は 等しくな

ければならない。仮引数は,実引数の左端の

len

文字と結合される。仮引数の配列が基本文字型であり,引継ぎでな

い場合には,実引数の要素列

(

12.4.1.5

)

の左端の文字と結合され,その列の終端を越えてはならない。

仮引数の引継ぎ型パラメタの値は,結合する実引数の対応する型パラメタから引き継がれる。

割付け仮引数 又は ポインタ仮引数と結合する実引数は,その仮引数と同じ型パラメタが無指定でなければならない。

仮引数がポインタである場合には,実引数はポインタでなければならず,無指定でない型パラメタ 及び 次元数は

同じでなければならない。仮引数が割付け仮引数である場合,実引数は割付け実引数でなければならず,無指定でな

い型パラメタ 及び 次元数は同じでなければならない。実引数は,割り付けられていない割付け状態をもってもよい。

手続を引用すると,ポインタ仮引数と結合する実引数のポインタ結合状態は,仮引数が

INTENT(OUT)

属性をも

つ場合,不定になる。

組込み問合せ関数の引用以外で,仮引数がポインタではなく,対応する実引数がポインタである場合,実引数は指

示先と結合していなければならず,仮引数はその指示先と引数結合する。

組込み問合せ関数の引用以外で,仮引数が割付け仮引数でなく,実引数が割付け実引数である場合,実引数は割り

付けられていなければならない。

仮引数が

VALUE

属性をもつ場合,その仮引数は,実引数の値を初期値とする確定可能な匿名のデータ実体と結合

する。仮引数の値 及び 定義状態のその後の変更は,実引数には影響を与えない。

注記

12.22

Fortran

の通常の引数結合は,参照渡し 又は 値結果渡しのように働く。

VALUE

属性が指定

される場合,実引数が一時領域に代入され,その一時領域が仮引数と引数結合するかのような効果を

もつ。その実装方式は,処理系による。

仮引数が

TARGET

属性も

POINTER

属性ももたない場合,手続呼出し時に実引数と結合しているポインタは,対

応する仮引数と結合しない。そのような仮引数が

TARGET

属性をもつ仮引数と結合する実引数として使用される場

合,元の実引数と結合しているポインタが

TARGET

属性をもつ仮引数と結合するか否かは,処理系依存とする。

仮引数が

TARGET

属性をもち

VALUE

属性をもたないスカラ 又は 形状引継ぎ配列のいずれかであり,対応する

実引数が

TARGET

属性をもち,かつ ベクトル添字をもつ部分配列でない場合,

(1)

手続の呼出し時に実引数と結合しているポインタは,対応する仮引数と結合し,

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

231

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

不定にならず

(

16.4.2.1.3

)

,手続の実行終了時に仮引数と結合しているポインタは,実引数と結合したままと

なる。

仮引数が

TARGET

属性をもつ形状明示配列 又は 大きさ引継ぎ配列であり,対応する実引数が

TARGET

属性を

もち,かつ ベクトル添字をもつ部分配列でない場合,

(1)

手続の呼出し時に実引数と結合しているポインタが対応する仮引数と結合するか否かは処理系依存とし,

(2)

手続の実行終了時に仮引数と結合しているポインタが実引数と結合するか否かは処理系依存とする。

仮引数が

TARGET

属性をもち,対応する実引数が

TARGET

属性をもたないか 又は ベクトル添字をもつ部分配

列である場合には,手続の実行終了時に仮引数と結合しているすべてのポインタは不定となる。

仮引数が

TARGET

属性 及び

VALUE

属性をもつ場合,仮引数と結合するいかなるポインタも手続の実行終了時

に不定となる。

実引数がスカラである場合には,その実引数が基本文字型,

C

文字種別

(

15.1.1

)

の文字型,又は 形状引継ぎ配列

でもなく,ポインタ配列でもなく,多相的でもない配列の要素であるとき 及び そのような要素の部分列であるとき

を除いて,対応する仮引数はスカラでなければならない。手続が要素別処理でなく,総称名によって引用される場合

及び 利用者定義演算子 又は 利用者定義代入として引用される場合には,実引数の次元数と,対応する仮引数の次元

数とは,一致しなければならない。

仮引数が形状引継ぎ配列である場合には,実引数の次元数は,仮引数の次元数と同じでなければならず,実引数は,

大きさ引継ぎ配列(配列要素特定子 又は 配列要素部分列特定子のときを含む。)であってはならない。

手続引用が要素別引用

(

12.7

)

である場合を除き,配列実引数のそれぞれの要素 又は 順序結合

(

12.4.1.5

)

の列の

それぞれの要素は,配列要素順序

(

6.2.2.2

)

で同じ位置をもつ仮引数の要素と結合する。

注記

12.23

基本文字型の順序結合に対する要素の解釈は,

12.4.1.5

による。

非要素別処理手続のスカラ仮引数は,スカラ実引数とだけ結合することができる。

ポインタでない仮引数が

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもっている場合には,その実引数は

確定可能でなければならない。仮引数が

INTENT(OUT)

属性をもっている場合には,対応する実引数は,結合した

時点で不定となる。ただし,省略時の初期化が指定されていた場合の派生型の実体の成分は,不定にならない。仮引

数が非多相的であって,実引数の型が仮引数の型の直接拡張型である場合,実引数における仮引数と同じ型の部分だ

けが不定になる。

実引数がベクトル添字をもつ部分配列である場合には,仮引数は,

INTENT(OUT)

属性,

INTENT(INOUT)

属性,

VOLATILE

属性 又は

ASYNCHRONOUS

属性をもっていてはならず,確定可能ではない。

注記

12.24

引数の授受特性には,幾つかの目的がある。

注記

5.14

参照。

注記

12.25

引数結合 及び 評価についての説明は,

C.9.5

を参照。仮引数としてのポインタと指示先につ

いての説明は,

C.9.6

を参照。

C1232

(R1221)

実引数が部分配列 又は 形状引継ぎ配列であり,対応する仮引数が

VOLATILE

属性 又は

ASYNCHRONOUS

属性のいずれかをもつ場合,その仮引数は,形状引継ぎ配列でなければならない。

C1233

(R1221)

実引数がポインタ配列であり,対応する仮引数が

VOLATILE

属性 又は

ASYNCHRONOUS

属性のいずれかをもつ場合,その仮引数は,形状引継ぎ配列 又は ポインタ配列でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

232

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

12.26

ASYNCHRONOUS

属性 又は

VOLATILE

属性のいずれかをもつ仮引数に対応する実引数の

制約は,いわゆる値結果渡しの利用を処理系に強制しないことを意図したものである。実引数の値が

非同期入出力の完了 又は ある予期しない方法によって変更される可能性がある場合にその実引数の

複製を作成すると,呼び出した手続から戻り,結果の複写によって実引数に上書きされたときに,新

しい値を失うことになる。

12.4.1.3

仮手続要素と結合する実引数

仮引数が手続ポインタである場合には,結合される実引数は,手続ポインタ,手続ポインタを返す関数引用 又は 組

込み関数

NULL

の引用でなければならない。

仮引数がポインタ属性をもたない仮手続である場合には,結合される実引数は,外部手続,モジュール手続,仮手

続 若しくは 組込み手続の個別名,結合される手続ポインタ 又は 結合される手続ポインタを返す関数の引用でなけれ

ばならない。組込み手続の名前として許されるものは,

13.6

にあって,かつ

印の指定のないものとする。個別名

が総称名でもある場合には,個別手続だけが仮引数と結合する。

外部手続名 又は 仮手続名を実引数として使用する場合,それは明示的に

EXTERNAL

属性をもつと宣言するか 又

は その引用仕様は明示的でなければならない。

仮引数の引用仕様が明示的である場合には,

12.2

に列挙された特性は,結合する実引数と対応する仮引数とで同じ

でなければならない。ただし,純粋である実引数は,純粋でない仮引数と結合してもよく,要素別処理組込み実手続

は,(要素別処理ではない)仮手続と結合してもよい。

仮引数の引用仕様が暗黙的であり,その仮引数の名前が明示的に型宣言されているか 又は その仮引数が関数とし

て引用されている場合には,その仮引数をサブルーチンとして引用してはならず,実引数は関数手続ポインタ関数 又

は 仮手続でなければならない。

仮引数の引用仕様が暗黙的であり,その仮引数がサブルーチン引用の形で引用されている場合には,実引数はサブ

ルーチン,手続ポインタサブルーチン 又は 仮手続でなければならない。

12.4.1.4

選択戻り星印と結合する実引数

仮引数が星印(

12.5.2.2

参照)である場合には,結合する実引数は選択戻り指定子

(

12.4

)

でなければならない。

12.4.1.5

順序結合

実引数が配列式,配列要素特定子,基本文字型スカラ 又は

C

文字種別

(

15.1.1

)

の文字型スカラである場合には,

それは 要素列

(element sequence)

を表現する。実引数が配列式である場合には,その要素列は配列要素順序の要素か

らなる。実引数が配列要素特定子である場合には,その要素列はその配列要素から始まり,配列要素順序でそれに続

くすべての要素からなる。

実引数が基本文字型 又は

C

文字種別の文字型であり,配列式,配列要素 又は 配列要素部分列特定子である場合に

は,その要素列は,実引数の最初の記憶単位から配列の終わりまでの,連続する記憶単位の列からなる。配列要素部

分列特定子の記憶単位の列は,仮配列の文字長をもつ連続する記憶単位からなる配列要素の列とみなされる。

実引数が基本文字型 又は

C

文字種別の文字型であって,配列要素でもなく配列要素部分列特定子でもないスカラ

である場合,要素列は,実引数の記憶単位の列からなる。

注記

12.27

この要素列の要素は,元の配列における,異なる要素の記憶単位から構成されていてもよい。

要素列を表現する実引数が,配列である仮引数に対応する場合には,その仮引数が形状明示配列であるか 又は 大

きさ引継ぎ配列であれば,その仮引数と順序結合する。実引数の次元数 及び 形状は,仮引数の次元数 及び 形状と一

致する必要はない。ただし,仮引数のもつ要素の個数は,実引数の要素列の要素の個数を超えてはならない。仮引数

が大きさ引継ぎ配列である場合には,仮引数のもつ要素の個数は,要素列における要素の個数に等しい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

233

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.4.1.6

実在しない仮引数に関する制限

仮引数 又は 仮引数と親子結合される要素は,仮引数が次のいずれかの条件を満たす場合,実在しないという。

(1)

仮引数が実引数と結合しない。

(2)

仮引数が実在しない実引数と結合する。

そうでない場合,その仮引数 又は 仮引数と親子結合される要素は, 実在する

(present)

という。省略可能でない

仮引数は,実在しなければならない。実在しない省略可能な仮引数は,次の制限を受ける。

(1)

実在しない省略可能な仮引数がデータ実体である場合には,その実体は引用も確定もしてはならない。その仮引

数の型のいずれかの成分に暗黙的初期値指定があるとき,その初期値は上書きされない。

(2)

実在しない省略可能な仮引数は,ポインタ代入のデータ指示先 又は 手続指示先として使用してはならない。

(3)

実在しない省略可能な仮引数が手続 又は 手続ポインタである場合には,その手続を呼び出してはならない。

(4)

実在しない省略可能な仮引数は,組込み関数

PRESENT

の引数 又は

7.1.7

(

6

)

又は

(

8

)

の要求事項に適合する

関数引用の引数として書いた場合を除き,省略可能でない仮引数に対応する実引数として使用してはならない。

(5)

実在しない省略可能な仮引数を基底実体とする特定子 又は 少なくとも一つの成分選択子,部分配列選択子,配

列要素選択子 若しくは 部分列選択子をもつ特定子は,実引数として使用してはならない。

(6)

実在しない省略可能な仮引数が配列である場合には,その配列は,要素別処理手続の実引数として使用してはな

らない。ただし,その要素別処理手続の省略可能でない仮引数に対応する実引数として同じ次元数の配列を使用

しているときは使用できる。

(7)

実在しない省略可能な仮引数がポインタである場合には,その仮引数は,割り付けられていてはならないし,解

放されていてもならないし,無効にされていてもならないし,省略可能なポインタでない仮引数に対応する実引

数として使用してもならない。

(8)

実在しない省略可能な仮引数が割付け仮引数である場合には,その仮引数は,割り付けられていてはならないし,

解放されていてもならないし,省略可能なポインタでない仮引数に対応する実引数としても使用してはならない。

(9)

実在しない省略可能な仮引数が長さ型パラメタである場合には,その仮引数は,問合せ対象であってはならない。

(10)

実在しない省略可能な仮引数は,

SELECT TYPE

構文 又は

ASSOCIATE

構文の選択子として使用してはなら

ない。

上に示した場合を除き,実在しない省略可能な仮引数は,省略可能な仮引数に対応する実引数として使用すること

ができ,その結果その仮引数も実引数と結合していないとみなされる。

12.4.1.7

仮引数と結合した要素に関する制限

ある言語要素が仮引数と結合している間,次の制限を受ける。

(1)

その要素 又は その要素の部分実体の割付け状態に影響を及ぼす動作は,仮引数を通して行われなければならな

い。次のいずれかの場合である場合を除き,その要素 又は その要素の部分実体の値に影響を及ぼすためには,そ

の仮引数を通してだけ行われなければならない。

(a)

その仮引数が

POINTER

属性をもつ。

(b)

仮引数が

TARGET

属性をもち,

INTENT(IN)

属性をもたないスカラ実体 又は 形状引継ぎ配列であ

り,実引数がベクトル添字をもつ部分配列でない指示先である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

234

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.28

手続が次のとおりに定義されているとする。

SUBROUTINE OUTER

REAL, POINTER :: A (:)

...

ALLOCATE (A (1:N))

...

CALL INNER (A)

...

CONTAINS

SUBROUTINE INNER (B)

REAL :: B (:)

...

END SUBROUTINE INNER

SUBROUTINE SET (C, D)

REAL, INTENT (OUT) :: C

REAL, INTENT (IN) :: D

C = D

END SUBROUTINE SET

END SUBROUTINE OUTER

次の代入文

A (1) = 1.0

は,この代入文が

B

を使わずに

A

を変更してしまうので,

INNER

の実行の間では許されない。し

かし,次の文

B (1) = 1.0

及び

CALL SET (B (1), 1.0)

は,許される。同様に,

DEALLOCATE (A)

は,この文によって

B

を使わずに

B

の割付けに影響を及ぼすので,許されない。この場合には,

DEALLOCATE (B)

もまた許されない。

B

POINTER

属性をもつと宣言されている場合には,

DEALLOCATE (A)

又は

DEALLOCATE (B)

のいずれか一方の文は許されるが,両方は許されない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

235

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

12.29

同じ手続の二つの異なる仮引数と結合された実引数の,部分 又は 全体が重なっており,

どちらの仮引数も

POINTER

属性 及び

TARGET

属性をもたない場合には,その重なっている

部分は,その手続の実行の間に確定も再確定もしてはならず,また,不定にしてはならない。

例を次に示す。

CALL SUB (A (1:5), A (3:9))

上の文において,

A(3:5)

は,

2

番目の仮引数と引数結合している部分であるから,

1

番目の仮引

数において確定 又は 再確定したり不定にしたりしてはならない。同様に,

A(3:5)

は,

1

番目の

仮引数と引数結合している部分であるから,

2

番目の仮引数において確定 又は 再確定したり不

定にしたりしてはならない。

1

番目の仮引数において

A(1:2)

は確定してもよく,

2

番目の仮引

数において

A(6:9)

は確定してもよい。

注記

12.30

この制限は,ポインタ指示先にも同様に適用される。

次のプログラムにおいて,

REAL, DIMENSION (10), TARGET :: A

REAL, DIMENSION (:), POINTER :: B,C

B => A (1:5)

C => A (3:9)

CALL SUB (B, C)

!

この仮引数はポインタでも指示先でもない。

B(3:5)

は,

2

番目の仮引数と引数結合している部分であるため,確定することはできない。

C(1:3)

は,

1

番目の仮引数と引数結合している部分であるため,確定することはできない。

A(1:2)

すな

わち

B(1:2)

は,

1

番目の仮引数において確定してもよいし,

A(6:9)

すなわち

C(4:7)

は,

2

目の仮引数において確定してもよい。

注記

12.31

授受特性として

INTENT(IN)

属性をもつポインタでない仮引数は,対応する実引数を変

更してはならないので,手続の実行の間,結合する実引数は一定のままとなる。

(2)

その要素 又は その要素の部分実体の割付け状態が仮引数を通して影響を受ける場合には,割付け 又は 解放の前

後を問わず手続の実行の間のいかなる時点においても,その部分は,その要素 又は その要素の部分実体は,そ

の仮引数を通してだけ引用することができる。その要素 又は その要素の部分実体の値が仮引数を通して影響を

受ける場合には,仮引数が次のいずれかである場合を除き,確定の前後を問わず手続の実行の間のいかなる時点

においても,その要素 又は 要素の部分実体はその仮引数を通してだけ引用することができる。

(a)

その仮引数が

POINTER

属性をもつ。

(b)

仮引数が

TARGET

属性をもち,

INTENT(IN)

属性をもたないスカラ実体 又は 形状引継ぎ配列であ

り,実引数がベクトル添字をもつ部分配列でない指示先である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

236

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.32

次のプログラムにおいて,

MODULE DATA

REAL :: W, X, Y, Z

END MODULE DATA

PROGRAM MAIN

USE DATA

...

CALL INIT (X)

...

END PROGRAM MAIN

SUBROUTINE INIT (V)

USE DATA

...

READ (*, *) V

...

END SUBROUTINE INIT

変数

X

は,仮引数

V

を通して確定されているため,

INIT

の実行の間のいかなる時点でも直接に

引用することはできない。

X

は,

V

を通して間接に引用することはできる。

W

Y

及び

Z

は,直接

に引用してもよい。もちろん

X

は,

INIT

の実行が終了すれば,直接に引用してもよい。

注記

12.33

仮引数と結合する言語要素の制限は,ポインタでも指示先でもない実引数の値がレジスタ 又

は 局所的な記憶場所に保持されるような引数結合の実現方式も含めて,副プログラムの翻訳における

種々の最適化を容易にすることを意図したものである。

12.4.2

関数引用

関数は,式の評価の間に,関数引用 又は 利用者定義演算(

7.1.3

参照)を通して呼び出される。関数を呼び出す

と,すべての実引数の式が評価され,次に引数が結合され,最後に関数が実行される。関数の実行が終了した時,関

数結果の値は,それを呼び出した式において使用可能となる。関数結果の特性(

12.2.2

参照)は,関数の引用仕様に

よって定義される。

要素別処理関数(

12.7

参照)の引用は,一つ以上の実引数が配列であり,すべての配列引数が同じ形状をもってい

る場合に 要素別引用

(elemental reference)

となる。

12.4.3

サブルーチン引用

サブルーチンは,

CALL

文の実行,利用者定義代入文(

7.4.1.4

参照)の実行,利用者定義の派生型入出力(

9.5.3.7.1

参照)又は 後始末(

4.5.5

参照)を通して呼び出される。サブルーチンを呼び出すと,すべての実引数の式が評価さ

れ,次に引数が結合され,最後にそのサブルーチンが実行される。サブルーチンによって指定された動作が終了した

時,

CALL

文の実行,利用者定義代入文の実行 又は 入出力項目の処理もまた終了する。

CALL

文が一つ以上の選択戻り指定子

を引数としてもつ場合には,サブルーチンによって指定された動作に従って,指示した文の一つに制御が移ることがある。

要素別処理サブルーチン(

12.7

参照)の引用は,

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもつ仮引数

に対応する実引数が少なくとも一つ存在し,それらすべての実引数が形状適合する配列である場合に,要素別処理引

用となる。

12.4.4

名前付き手続引用の解決

手続引用の解釈の規則は,引用する手続名が,引用する有効域内で総称的であると宣言することによって確立され

るか,引用する有効域内で単に個別的であると確立されるか 又は 確立されないかに依存する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

237

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(1)

手続名は,次のいずれかの場合に,有効域内で総称名として確立される。

(a)

有効域内にその名前の引用仕様宣言がある。

(b)

有効域内にその名前に対する

INTRINSIC

属性の指定があり,その名前が総称組込み手続の名前である。

(c)

有効域内に手続名を参照可能とする

USE

文が指定され,そのモジュール内の対応する名前が総称名と

して確立される。

(d)

有効域内にその名前の宣言がなく,その有効域が親有効域をもち,その名前がその親有効域内で総称

名として確立される。

(2)

手続名は,総称名としてではなく個別名として確立される場合,有効域内で単なる個別名として確立される。そ

の手続名は,次のいずれかの場合に,個別名として確立される。

(a)

有効域内にその名前の手続を定義するモジュール副プログラム,内部副プログラム

又は 文関数

がある。

(b)

有効域内にその名前に対する

INTRINSIC

属性の指定があり,その名前が個別組込み手続の名前である。

(c)

有効域内にその名前に対する明示的な

EXTERNAL

属性(

5.1.2.6

参照)の指定がある。

(d)

有効域内に手続名を参照可能とする

USE

文が指定され,そのモジュール内の対応する名前が個別名と

して確立される。

(e)

有効域内にその名前の宣言がなく,その有効域が親有効域をもち,その名前がその親有効域内で個別

名として確立される。

(3)

手続名は,総称名としても個別名としても確立されない場合,有効域内では確立されない。

12.4.4.1

名前が総称名として確立される手続引用の解決

(1)

引用が同じ名前の総称引用仕様中の一つの個別引用仕様への要素別処理でない引用と一致し,その引用を含む有

効域内にあるか 又は その有効域内の

USE

文によって参照可能とされているかのいずれかである場合,その引用

は,その引用仕様を与える引用仕様宣言内の個別手続への引用とする。そのような個別手続が高々一つしか存在

できないことは,

16.2.3

による。

(2)

(

1

)

が適用されず,引用が,同じ名前の総称引用仕様中の一つの個別引用仕様への要素別処理引用と一致し,そ

の引用を含む有効域内にあるか 又は その有効域内の

USE

文によって参照可能とされているかのいずれかである

場合,その引用は,その引用仕様を与える引用仕様宣言内の要素別処理個別手続への引用とする。そのような要

素別処理個別手続が高々一つしか存在できないことは,

16.2.3

による。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

238

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.34

これらの規則では,ある総称関数の特定の分身を特定の配列の次元数に対して使うことが

でき,更にある要素別処理総称関数の分身を別の次元数に対して使うこともできる。次のような
引用仕様宣言が与えられて,

INTERFACE RANF

ELEMENTAL FUNCTION SCALAR_RANF(X)

REAL, INTENT(IN) :: X

END FUNCTION SCALAR_RANF

FUNCTION VECTOR_RANDOM(X)

REAL X(:)

REAL VECTOR_RANDOM(SIZE(X))

END FUNCTION VECTOR_RANDOM

END INTERFACE RANF

更に次の宣言が与えられた場合,

REAL A(10,10), AA(10,10)

次の文は,

SCALAR RANF

の要素別処理引用となる。

A = RANF(AA)

次の文は,

VECTOR RANDOM

の要素別処理でない引用となる。

A = RANF(AA(6:10,2))

(3)

(

1

)

及び

(

2

)

が適用されず,有効域内でその名前に対する

INTRINSIC

属性の指定があるか 又は 対応する名前

INTRINSIC

属性をもつように宣言しているモジュールからその名前を参照可能とする

USE

文を指定し,そ

の名前の引用が組込み手続の引用仕様と一致する場合,その引用は,その組込み手続の引用とする。

注記

12.35

USE

文の場合,名前を変更する機能によって,引用名を組込み手続の名前と別のものに

しておくことができる。

(4)

(

1

)

(

3

)

が適用されず,その有効域に親有効域が存在し,その名前が親有効域内で総称名として確立され,名前

が関数名であるか 又は サブルーチン名であるかがその有効域と親有効域間で一致する場合,その名前は,この

箇条の規則を親有効域に適用することによって解決される。

(5)

(

1

)

(

4

)

が適用されず,名前が組込み関数名であり,その名前の引用が組込み手続の引用仕様と一致する場合,

その引用は,その組込み手続の引用とする。

12.4.4.2

名前が単なる個別名として確立される手続引用の解決

(1)

有効域内に引用仕様本体があるか 又は その名前に対する

EXTERNAL

属性の指定があり,その名前が副プログ

ラムの仮引数の名前である場合,仮引数は仮手続とし,その引用は仮手続の引用とする。すなわち,その引用の

実行によって呼び出される手続は,その仮手続に対応する実引数として与えられた手続とする。

(2)

有効域内に名前に対する引用仕様宣言 又は

EXTERNAL

属性の指定があり,

(

1

)

が適用されない場合,その引

用は,同じ名前をもつ外部手続の引用とする。

(3)

有効域内にその名前の手続を定義するモジュール副プログラム,内部副プログラム

又は 文関数

の指定がある場合,

その引用は,そのように定義された手続の引用とする。

(4)

有効域内にその名前に対する

INTRINSIC

属性の指定がある場合,その引用は,同じ名前をもつ組込み手続の引

用とする。

(5)

有効域内に手続をその名前によって参照可能とする

USE

文が指定される場合,その引用は,同じ手続の引用と

する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

239

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

12.36

USE

文の名前を変更する機能によって,引用名を手続の本来の名前と別のものにしてお

くことができる。

(6)

(

1

)

(

5

)

がいずれも適用されない場合,その有効域には親有効域がなければならず,その引用は,この箇条の規

則を親有効域に適用することによって解決される。

12.4.4.3

名前が確立されない手続引用の解決

(1)

有効域が副プログラムであり,その名前が副プログラムの仮引数の名前である場合,その仮引数は仮手続とし,

その引用は,その仮手続の引用とする。すなわち,その引用の実行によって呼び出される手続は,その仮手続に

対応する実引数として与えられた手続とする。

(2)

(

1

)

が適用されず,その名前が組込み手続の名前であって,関数であるか 又は サブルーチンであるかがその引用

と組込み手続の状態との間で一致する場合,その引用は,組込み手続の引用とする。

(3)

(

1

)

及び

(

2

)

が適用されない場合,その引用は,その名前をもつ外部手続の引用とする。

12.4.5

型束縛手続引用の解決

手続特定子

(R1219)

の束縛名が個別型束縛手続の束縛名である場合,引用される手続は,

R1219

のデータ参照の実

行時の型においてその名前に束縛されている手続とする。

手続特定子の束縛名が総称型束縛手続の束縛名である場合,データ参照の宣言時の型においてその名前をもつ総称

束縛が,次のとおり個別束縛の選択に使用される。

(1)

引用が総称束縛の一つの個別束縛と一致する場合,その個別束縛が選択される。

(2)

そうでない場合,その引用は,総称束縛の一つの個別束縛の要素別処理引用と一致しなければならず,その個別

束縛が選択される。

その引用は,データ参照の実行時の型において選択された個別束縛と同じ名前に束縛されている手続の引用とする。

12.5

手続定義

12.5.1

組込み手続の定義

組込み手続は,処理系に固有の部分として定義されている。規格合致処理系は,箇条

13

に規定する組込み手続を

含まなければならないが,それ以外の手続を含んでいてもよい。他方,規格合致プログラムは,箇条

13

に規定して

ある以外の組込み手続を使用してはならない。

12.5.2

副プログラムによって定義される手続

副プログラムによって定義された手続を呼び出すと,副プログラムの分身(

12.5.2.3

参照)が生成され,実行され

る。副プログラムは,呼び出された手続の名前をもつ

FUNCTION

文,

SUBROUTINE

文 又は

ENTRY

文に続く最

初の実行構文から実行が開始される。

12.5.2.1

関数副プログラム

関数副プログラム

(function subprogram)

は,先頭の文が

FUNCTION

文である副プログラムとする。

R1223

関数副プログラム

is

FUNCTION

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END FUNCTION

R1224

FUNCTION

is

[

手続接頭句

]

FUNCTION

関数名

(

[

仮引数名並び

]

)

[

手続接尾句

]

C1234

(R1224) RESULT

句を指定する場合には,結果名は,関数名と同じ名前であってはならず,その副プ

ログラム中の

ENTRY

文の入口名と同じ名前であってもならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

240

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C1235

(R1224) RESULT

句を指定する場合には,その関数副プログラムの有効域内のいかなる単純宣言文に

も,この関数名を書いてはならない。

R1225

手続言語束縛指定子

is

言語束縛指定子

C1236

(R1225) NAME

指定子をもつ手続言語束縛指定子は,抽象引用仕様 又は 仮手続に対する引用仕様本

体の

FUNCTION

文 又は

SUBROUTINE

文に指定してはならない。

C1237

(R1225)

手続言語束縛指定子は,内部手続に指定してはならない。

C1238

(R1225)

手続言語束縛指定子が手続に指定される場合,手続のそれぞれの仮引数は,省略可能でない相

互利用可能変数(

15.2.4

及び

15.2.5

参照)又は 省略可能でない相互利用可能手続(

15.2.6

参照)でな

ければならない。手続言語束縛指定子が関数に指定される場合,その関数結果は,相互利用可能スカラ変

数でなければならない。

R1226

仮引数名

is

名前

C1239

(R1226)

仮引数名は,仮引数の名前でなければならない。

R1227

手続接頭句

is

手続接頭辞

[

手続接頭辞

] ...

R1228

手続接頭辞

is

宣言型指定子

or

RECURSIVE

or

PURE

or

ELEMENTAL

C1240

(R1227)

手続接頭句には,それぞれの手続接頭辞は高々一つしか指定してはならない。

C1241

(R1227)

手続接頭句には,

ELEMENTAL

及び

RECURSIVE

の両方を書いてはならない。

C1242

(R1227)

手続言語束縛指定子を

FUNCTION

文 又は

SUBROUTINE

文に書いた場合,手続接頭句に

ELEMENTAL

を指定してはならない。

R1229

手続接尾句

is

手続言語束縛指定子

[

RESULT (

結果名

)

]

or

RESULT (

結果名

)

[

手続言語束縛指定子

]

R1230

END FUNCTION

is

END

[

FUNCTION

[

関数名

] ]

C1243

(R1230)

内部関数 及び モジュール関数の

END FUNCTION

文には,キーワード

FUNCTION

を指定し

なければならない。

C1244

(R1223)

内部関数副プログラムは,

ENTRY

文を含んではならない。

C1245

(R1223)

内部関数副プログラムは,内部副プログラム部を含んではならない。

C1246

(R1230) END FUNCTION

文に関数名を指定する場合,それは対応する

FUNCTION

文中の関数名と

同じでなければならない。

関数の名前は,指定した関数名とする。

関数副プログラムによって定義された関数結果の型 及び 型パラメタは,

FUNCTION

文の型宣言によって指定す

るか,又は 結果変数の名前を関数副プログラムの宣言部の型宣言文に書くことによって指定する。両方で指定する

ことはできない。いずれの方法でも指定しなかった場合には,関数副プログラム内で有効な,暗黙の型宣言の規則に

よって定義される。関数結果が配列,割付け変数 又は ポインタである場合には,関数本体の中で結果変数の名前の

指定によって定義しなければならない。関数結果属性の指定,仮引数属性の指定 及び 手続の先頭の文の情報が,そ

の関数の特性(

12.2

参照)を定義する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

241

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

関数が直接 又は 間接に,その関数自身 又は その同じ副プログラム内の

ENTRY

文で定義された関数を呼び出す

[このような呼出しを,再帰的

(recursive)

であるという。]場合には,手続接頭辞

RECURSIVE

を書かなければならな

い。同様に,副プログラム内の

ENTRY

文で定義された関数が,直接 又は 間接に,その関数自身,その同じ副プロ

グラムの

ENTRY

文で定義された他の関数,又は

FUNCTION

文で定義された関数を呼び出す場合にも,手続接頭

RECURSIVE

を書かなければならない。

RESULT

句を指定した場合には,その関数の結果変数の名前は結果名とし,その有効域内の実行部の文に書いたそ

の関数名はすべてその関数自体の引用とする。

RESULT

句を指定していない場合には,結果変数は関数名とし,その

有効域内の実行部の文に書いたその関数名はすべて結果変数の引用とする。関数結果の特性(

12.2.2

参照)は,その

結果変数の特性とする。その関数によって返される値は,関数の実行の終了における結果変数の値とする。関数結果

がポインタである場合には,その関数によって返される値の形状は,その関数の実行が終了した時の結果変数の形状

によって決定される。関数結果がポインタでない場合には,その値は関数によって確定されなければならない。関数

結果がポインタである場合には,その関数は,結果変数であるポインタを指示先と結合させるか,又は そのポインタ

の結合状態を空状態にしなければならない。

注記

12.37

結果変数は,関数副プログラムに対して局所的な他の変数と同様とする。その存在は,関数の

実行が開始する時に始まり,関数の実行が終了する時に終わる。しかし結果変数の最終的な値は,関

数を呼び出した式の評価の中で継続して使用されるので,その値が式の評価に用いられた後まで,結

果変数が占める記憶場所の解放を遅らせてもよい。

手続接頭辞

PURE

又は

ELEMENTAL

を書いた場合,その副プログラムは純粋副プログラムとし,

12.6

の追加の制約

を満たさなければならない。

手続接頭辞

ELEMENTAL

を書いた場合,その副プログラムは要素別処理副プログラムとし,

12.7.1

の追加の制約を

満たさなければならない。

12.38

再帰関数

RECURSIVE FUNCTION CUMM_SUM (ARRAY) RESULT (C_SUM)

REAL, INTENT (IN), DIMENSION (:) :: ARRAY

REAL, DIMENSION (SIZE (ARRAY)) :: C_SUM

INTEGER N

N = SIZE (ARRAY)

IF (N .LE. 1) THEN

C_SUM = ARRAY

ELSE

N = N / 2

C_SUM (:N) = CUMM_SUM (ARRAY (:N))

C_SUM (N+1:) = C_SUM (N) + CUMM_SUM (ARRAY (N+1:))

END IF

END FUNCTION CUMM_SUM

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

242

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.39

BIND

属性をもつ引用仕様本体の宣言と宣言した手続の引用

USE, INTRINSIC :: ISO_C_BINDING

INTERFACE

FUNCTION JOE (I, J, R) BIND(C,NAME="FrEd")

USE, INTRINSIC :: ISO_C_BINDING

INTEGER(C_INT) :: JOE

INTEGER(C_INT), VALUE :: I, J

REAL(C_FLOAT), VALUE :: R

END FUNCTION JOE

END INTERFACE

INT = JOE(1_C_INT, 3_C_INT, 4.0_C_FLOAT)

END PROGRAM

関数

JOE

の呼出しは,束縛ラベル

FrEd

の引用となる。

FrEd

は,次の言語

C

の原型によって記

述された言語

C

の関数であってもよい。

int FrEd(int n, int m, float x);

12.5.2.2

サブルーチン副プログラム

サブルーチン副プログラム

(subroutine subprogram)

は,先頭の文が

SUBROUTINE

文である副プログラムとする。

R1231

サブルーチン副プログラム

is

SUBROUTINE

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END SUBROUTINE

R1232

SUBROUTINE

is

[

手続接頭句

]

SUBROUTINE

サブルーチン名

[

(

[

仮引数並び

]

)

[

手続言語束縛指定子

] ]

C1247

(R1232) SUBROUTINE

文の手続接頭句に,宣言型指定子を指定してはならない。

R1233

仮引数

is

仮引数名

or

*

R1234

END SUBROUTINE

is

END

[

SUBROUTINE

[

サブルーチン名

] ]

C1248

(R1234)

内部サブルーチン 及び モジュールサブルーチンの

END SUBROUTINE

文には,キーワード

SUBROUTINE

を指定しなければならない。

C1249

(R1231)

内部サブルーチン副プログラムは,

ENTRY

文を含んではならない。

C1250

(R1231)

内部サブルーチン副プログラムは,内部副プログラム部を含んではならない。

C1251

(R1234) END SUBROUTINE

文にサブルーチン名を書く場合には,それは対応する

SUBROUTINE

文のサブルーチン名と同じでなければならない。

サブルーチンの名前は,指定したサブルーチン名とする。

サブルーチンが直接 又は 間接に,そのサブルーチン自身 又は その同じ副プログラム内の

ENTRY

文で定義さ

れたサブルーチンを呼び出す場合には,手続接頭辞

RECURSIVE

を書かなければならない。同様に,副プログラム内

ENTRY

文で定義されたサブルーチンが,直接 又は 間接に,そのサブルーチン自身,その同じ副プログラムの

ENTRY

文で定義された他のサブルーチン,又は

SUBROUTINE

文で定義されたサブルーチンを呼び出す場合にも,

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

243

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

手続接頭辞

RECURSIVE

を書かなければならない。

手続接頭辞

PURE

又は

ELEMENTAL

を書いた場合,その副プログラムは純粋副プログラムであり,

12.6

の追加の制

約を満たさなければならない。

手続接頭辞

ELEMENTAL

を書いた場合,その副プログラムは要素別処理副プログラムであり,

12.7.1

の追加の制約

を満たさなければならない。

12.5.2.3

副プログラムの分身

副プログラムによって定義された関数 又は サブルーチンを呼び出すと,その副プログラムの 分身

(instance)

が生

成される。

文関数を呼び出すと,その文関数の分身が生成される。

実行系列,仮引数 及び 局所的であって

SAVE

文によって保存されないデータ実体は,それぞれの分身において独

立とする。副プログラムに含まれる内部手続

又は 文関数

が,その副プログラムのある分身から直接に,又は その分身の

実体を参照する内部手続

若しくは 文関数

から直接に呼び出された場合には,その内部手続

又は 文関数

に対して生成される分

身もまた,親副プログラムのその分身の要素を参照できる。

他のすべての要素は,副プログラムのすべての分身で共有される。

注記

12.40

ある分身に現れ,

SAVE

文によって保存されるデータ実体の値は,以前の分身の中で確定され

ていてもよいし,

DATA

文 又は 型宣言文で初期値を与えられていてもよい。

12.5.2.4 ENTRY

ENTRY

(ENTRY statement)

は,その

ENTRY

文を含む関数副プログラム内 又は サブルーチン副プログラム

内の特定の実行文から実行を開始するような手続引用を可能にする。

R1235

ENTRY

is

ENTRY

入口名

[

(

[

仮引数並び

]

)

[

手続接尾句

] ]

C1252

(R1235) RESULT

句を指定する場合には,その関数副プログラムの有効域内のいかなる単純宣言文に

も型宣言文にも,入口名を書いてはならない。

C1253

(R1235) ENTRY

文は,外部副プログラム 又は モジュール副プログラムの中にだけ書いてよい。

ENTRY

文は,実行構文の中に書いてはならない。

C1254

(R1235) RESULT

句は,

ENTRY

文が関数副プログラムに含まれている場合にだけ書いてよい。

C1255

(R1235) ENTRY

文を含む副プログラムにおいては,入口名は,

FUNCTION

文,

SUBROUTINE

文 及び

他の

ENTRY

文中の仮引数として書いてはならず,

EXTERNAL

文,

INTRINSIC

文 又は

PROCEDURE

文にも書いてはならない。

C1256

(R1235) ENTRY

文が関数副プログラムに含まれている場合,仮引数は選択戻り星印であってはならない。

C1257

(R1235) RESULT

句を指定する場合には,結果名は,

FUNCTION

文の関数名と同じであってはなら

ず,その副プログラムの

ENTRY

文の入口名と同じであってもならない。

副プログラムは,

0

個以上の

ENTRY

文をもつことができる。

ENTRY

文が関数副プログラムに含まれている場合には,その副プログラムに追加の関数が定義される。その関数

の名前は指定した入口名とし,その結果変数の名前は結果名 又は 結果名がない場合にはその入口名とする。関数結

果の特性は,結果変数の指定によって指定される。関数の仮引数は,

ENTRY

文に書いた仮引数とする。

ENTRY

に書いた関数結果の特性が,

FUNCTION

文に書いた関数結果の特性と同じである場合には,それらの結果変数は同

じ変数を識別する。ただし,それらの名前は同じでなくてもよい。それ以外の場合には,それらの結果変数は記憶域

結合され,すべてがポインタでもなく割付け変数でもないスカラでなければならず,すべてが基本整数型,基本実数

型,倍精度実数型,基本複素数型 又は 基本論理型のいずれかでなければならない。

ENTRY

文がサブルーチン副プログラムに含まれている場合には,その副プログラムに追加のサブルーチンが定義

される。そのサブルーチンの名前は,指定した入口名とする。そのサブルーチンの仮引数は,

ENTRY

文で指定した

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

244

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

仮引数とする。

ENTRY

文中の仮引数の順序,個数,型,種別型パラメタ及び 名前は,

ENTRY

文を含むプログラム内の

FUNCTION

文 又は

SUBROUTINE

文の仮引数の順序,個数,型,種別型パラメタ及び 名前と違っていてもよい。

ENTRY

文は追加の関数 又は 追加のサブルーチンを定義するので,その関数 又は サブルーチンは,他の関数 又

は サブルーチンと同じ方法で引用される(

12.4

参照)。

副プログラムにおいて,

ENTRY

文の仮引数として書いた名前は,その

ENTRY

文より前にある実行文に書いては

ならない。ただし,その名前が更に

FUNCTION

文,

SUBROUTINE

文 又は その実行文より前にある

ENTRY

文に

書いてある場合を除く。

副プログラムにおいて,

ENTRY

文の仮引数として書いた名前は,文関数定義文の式に書いてはならない。ただし,その名前が更にその文関数定義文の仮引数と

なっているか,

FUNCTION

文 若しくは

SUBROUTINE

文に書いてあるか 又は その文関数定義文より前にある

ENTRY

文に書いてある場合を除く。

関数 又は サブルーチンの引用の実行中に,仮引数が実行文に現れる場合,その実行文は,引用された手続名の仮

引数並びにその仮引数が含まれる場合にだけ,実行可能とする。

仮引数が,実体の配列の上下限 又は 実体の文字長を指定するために,宣言式中で用いられている場合,その実体

が現れる実行文は,手続引用の実行中にその仮引数が引用された手続名の仮引数並びに含まれており,かつ 実在する

場合にだけ,実行可能とする(

12.4.1.6

参照)。

ENTRY

文で定義された手続の引用を含む有効域は,その手続に対する引用仕様本体を参照することができる。引

用仕様本体における手続の先頭の文は,関数副プログラム内の入口に対しては

FUNCTION

文でなければならず,サ

ブルーチン副プログラム内の入口に対しては

SUBROUTINE

文でなければならない。

手続接頭辞

RECURSIVE

は,

ENTRY

文の中では用いない。

SUBROUTINE

文 又は

FUNCTION

文での

RECURSIVE

の有無によって,

ENTRY

文によって定義される手続がそれ自身を引用できるか否かが制御される。

手続接頭辞

PURE

は,

ENTRY

文の中では用いない。

SUBROUTINE

文 又は

FUNCTION

文で

PURE

又は

ELEMENTAL

が指定されている場合にだけ,

ENTRY

文によって定義される手続が純粋となる。

手続接頭辞

ELEMENTAL

は,

ENTRY

文の中では用いない。

SUBROUTINE

文 又は

FUNCTION

文で

ELEMENTAL

が指定されている場合にだけ,

ENTRY

文によって定義される手続が要素別処理となる。

12.5.2.5 RETURN

R1236

RETURN

is

RETURN

[

スカラ整数式

]

C1258

(R1236) RETURN

文は,関数副プログラム 又は サブルーチン副プログラムの有効域に含まれていな

ければならない。

C1259

(R1236)

スカラ整数式は,サブルーチン副プログラムの有効域内でだけ許される。

RETURN

(RETURN statement)

の実行は,その

RETURN

文を書いた副プログラムの分身の実行を終了させ

る。

スカラ整数式を指定した場合,その値

n

1

以上で,仮引数並びの星印の個数以下であると,そのサブルーチンを呼び出した

CALL

文から,実引数並びの

n

番目の選択戻り指定子によって識別される文に,制御が移行する。スカラ整数式を省略したか,スカラ整数式の値が制限された範囲の外であった場合には,選択戻りへ

の制御の移行は生じない。

END FUNCTION

文 又は

END SUBROUTINE

文の実行は,

スカラ整数式のない

RETURN

文の実行と同じ効果をもつ。

12.5.2.6 CONTAINS

R1237

CONTAINS

is

CONTAINS

CONTAINS

(CONTAINS statement)

は,主プログラム,モジュール 又は 副プログラムの本体を,それらが

含む内部副プログラム 又は モジュール副プログラムから分離するか,又は 派生型定義(

4.5.1

参照)の型束縛手続

部分を導入する。

CONTAINS

文は,非実行文とする。

12.5.3 Fortran

以外の手段による手続定義 及び 手続呼出し

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

245

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

手続は,

Fortran

以外の手段によって定義してもよい。

Fortran

以外の手段によって定義された手続の引用仕様は,

引用仕様本体 又は 手続宣言文によって指定してもよい。そのような手続の引用仕様が手続言語束縛指定子をもたな

い場合,その手続を定義する手段は処理系依存とする。そのような手続の引用は,外部副プログラムによって定義さ

れたものとして扱われる。

手続の引用仕様が手続言語束縛指定子をもつ場合,その手続は相互利用可能とする(

15.4

参照)。

言語

C

の関数との相互利用は,

15.4

で規定する。

注記

12.41

Fortran

以外の手段による手続の定義についての説明は,

C.9.2

を参照。

12.5.4

文関数

文関数は,単一の文によって定義される関数とする。

R1238

文関数定義文

is

関数名

(

[

仮引数名並び

]

) =

スカラ式

C1260

(R1238)

スカラ式の一次子は,定数表現,名前付き定数,変数引用,関数引用,仮手続関数引用 及び 組込み演算だけで構成できる。スカラ式が関

数 又は 仮手続関数の引用を含んでいる場合,その引用は明示的引用仕様を必要とするものであってはならず,その関数は,組込みである場合を除いて

明示的引用仕様を必要とするものであってはならず,変形組込み関数であってはならず,その結果はスカラでなければならない。関数 又は 仮手続関数

の引数が配列値であるとき,その引数は配列名でなければならない。スカラ式中に文関数引用を書いた場合には,その文関数は,その有効域内で前もっ

て定義されていなければならず,定義しようとする文関数の名前を引用することはできない。

C1261

(R1238)

スカラ式における名前付き定数は,その有効域において前もって宣言されているか,又は 参照結合 若しくは 親子結合によって参照できな

ければならない。スカラ式の中に配列要素が指定された場合には,その親配列はその有効域において前もって配列として宣言されているか,又は 参照

結合 若しくは 親子結合によって参照できなければならない。

C1262

(R1238)

仮引数名,変数,関数引用 又は 仮手続関数の型が暗黙の型宣言によって決められている場合,後続の型宣言文中でのこれらの出現は,暗

黙の型 及び 型パラメタを確認するものでなければならない。

C1263

(R1238)

関数名 及び それぞれの仮引数名は,明示的に 又は 暗黙的に,スカラとして指定されていなければならない。

C1264

(R1238)

ある仮引数名は,一つの仮引数並びの中では,

1

回だけ書いてもよい。

C1265

(R1238)

スカラ式中のそれぞれの変数引用は,その文関数の仮引数の引用であってもよいし,その文関数定義文を含む有効域から参照できる変数の

引用であってもよい。

文関数が親有効域中の参照可能な要素と同じ名前をもつとき,その文関数の定義より前に,その型を宣言する型宣言文がなければならない。

仮引数は,文関数定義文の有効範囲をもつ。それぞれの仮引数は,その文関数を含む有効域内の同じ名前の要素と,同じ型 及び 同じ型パラメタをもつ。

文関数は,手続の引数として使用することはできない。

文関数引用の値は,仮引数に対応した実引数の値を用いて式を評価したものとし,必要であれば関数の宣言した型 及び 型属性に合わせて結果が変換される。

スカラ式中での関数引用によって,文関数の仮引数を再確定したり不定にしたりしてはならない。

12.6

純粋手続

純粋手続

(pure procedure)

は,次のいずれかとする。

(1)

純粋組込み関数(

13.1

参照)

(2)

純粋組込みサブルーチン(

13.1

参照)

(3)

純粋副プログラムとして宣言された手続

(4)

純粋関数だけを引用する文関数

純粋副プログラム

(pure subprogram)

は手続接頭辞

PURE

又は

ELEMENTAL

をもつ副プログラムとする。純粋副プロ

グラムには,次の制約を追加して適用する。

C1266

純粋関数副プログラムの宣言部では,すべてのポインタでない仮データ実体に

INTENT(IN)

属性の指

定がなければならない。

C1267

純粋サブルーチン副プログラムの宣言部では,すべてのポインタでない仮データ実体に授受特性指定が

なければならない。

C1268

純粋副プログラムの宣言部 又は 内部副プログラム部で宣言された局所変数は,

SAVE

属性をもっては

ならない。

注記

12.42

型宣言文 及び

DATA

文での変数の初期化は,その変数が

SAVE

属性をもつこと

も意味するので許されない。

C1269

純粋副プログラムの宣言部では,すべての仮手続は純粋と指定されていなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

246

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C1270

組込み手続

又は 文関数

でない手続が,純粋であることが要求される文脈で使用される場合,その手続の引

用仕様は,使用されている有効域内で明示的でなければならない。その引用仕様は,その手続が純粋であ

ることを指定しなければならない。

C1271

純粋副プログラム中のすべての内部副プログラムは,純粋でなければならない。

C1272

共通ブロック内の基底実体,親子結合 若しくは 参照結合によって参照可能な基底実体,純粋関数の仮

引数,

INTENT (IN)

属性 をもつ純粋サブルーチンの仮引数 又は それらの変数と記憶列結合している実

体は,純粋副プログラム中の次の文脈で使用してはならない。

(1)

変数確定の文脈

(2)

ポインタ代入文のデータ指示先指定

(3)

構造体構成子のポインタ属性をもつ成分に対応する式

(4)

組込み代入文の変数がポインタ成分をもつ派生型である場合,組込み代入文の式

注記

12.43

この制約は,処理系に

PRIVATE

属性 又は 非公開成分をもつ要素がポイ

ンタ成分をもつか否かを判定する能力を要求する。

(5)

INTENT(OUT)

属性,

INTENT(INOUT)

属性 又は

POINTER

属性をもつ仮引数と結合した実

引数

C1273

純粋副プログラム中で引用される手続は,利用者定義演算 又は 利用者定義代入によって引用されるも

のも含めて,純粋でなければならない。

C1274

純粋副プログラムは,

PRINT

文,

OPEN

文,

CLOSE

文,

BACKSPACE

文,

ENDFILE

文,

REWIND

文,

FLUSH

文,

WAIT

文 及び

INQUIRE

文を含んではならない。

C1275

純粋副プログラムは,装置識別子がファイル装置番号 又は

*

である

READ

文 又は

WRITE

文を含

んではならない。

C1276

純粋副プログラムは,

STOP

文を含んではならない。

注記

12.44

上の制約は,純粋手続が副作用をもたない(データの変更はその手続の外側から可視である。)

ことを保証するために設計されており,このことは

FORALL

代入文のような評価の順序が明示的で

ない構文中で,純粋手続が安全に引用できることを意味する。

純粋副プログラムに対する制約は複雑にみえるかもしれないが,プログラマがそれを熟知する必要

はない。プログラマの視点からは,これらの制約は次のように要約される。純粋副プログラムは,共

通変数,参照結合 若しくは 親子結合によって参照可能な変数 又は

INTENT(IN)

属性をもつ仮引数

への,代入 又は ポインタ代入が実行される可能性のある操作を含んではならない。また,純粋副プ

ログラムは,外部ファイルに対する入出力 又は 実行終了の可能性のある操作を含んではならない。

ここで,

可能性

という用語は次の意味で使用している。実際には,純粋副プログラムは,単に副作

用がないというだけでは不十分である。例えば,ある関数が,大域変数への代入を含んでいるが,そ

の代入は関数のどの呼出しにおいても実行されないブロック中にあるとしても,それは純粋関数では

ない。翻訳時の検査を厳しくするために,このような性質をもつ関数を排除することにした。

ほとんどのライブラリ手続は,純粋手続に要求される制約に適合することが期待され,したがって

純粋であると宣言でき,

FORALL

文 及び

FORALL

構文中,又は 利用者定義の純粋手続から引用で

きることが期待される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

247

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

12.45

純粋サブルーチンは,純粋手続からのサブルーチン呼出しを安全に行い,

FORALL

代入文を利

用者定義代入とすることができるようにするためにある。純粋サブルーチンの制約は,

INTENT(IN)

属性,

INTENT(INOUT)

属性 及び ポインタ属性をもつ仮引数への副作用が許されることを除き,純

粋関数と同じ原則に基づいている。

12.7

要素別処理手続

12.7.1

要素別処理手続宣言 及び 引用仕様

要素別処理手続

(elemental procedure)

は,要素別処理組込み手続 又は 要素別処理副プログラムによって定義され

た手続とする。

要素別処理副プログラム

(elemental subprogram)

は,手続接頭辞

ELEMENTAL

をもつ。要素別処理副プログラムは,

純粋副プログラムとする。手続接頭辞

ELEMENTAL

は純粋であることを包含するので,手続接頭辞

PURE

を書く必要は

ない。要素別処理副プログラムには,次の制約を追加して適用する。

C1277

要素別処理手続のすべての仮引数は,スカラ仮データ実体でなければならず,ポインタ属性 又は

ALLOCATABLE

属性をもってはならない。

C1278

要素別処理関数の結果変数はスカラでなければならず,ポインタ属性も

ALLOCATABLE

属性ももっ

てはならない。

C1279

要素別処理副プログラムの有効域内では,基底実体が仮引数である実体特定子は,組込み関数

BIT SIZE

KIND

LEN

又は 数値問合せ関数のいずれかの引数として現われる場合を除き,宣言式中に現われてはな

らない(

13.5.6

参照)。

注記

12.46

要素別処理副プログラムは純粋副プログラムであり,純粋副プログラムの制約がすべて適用さ

れる。

12.47

誤った例を次に示す。

ELEMENTAL REAL FUNCTION F (A, N)

REAL, INTENT(IN) :: A

INTEGER, INTENT(IN) :: N

REAL :: WORK_ARRAY(N) !

不正

...

END FUNCTION F

正しい例を次に示す。

ELEMENTAL REAL FUNCTION F (A)

REAL, INTENT(IN) :: A

REAL (SELECTED_REAL_KIND (PRECISION (A)*2)) :: WORK

...

END FUNCTION F

12.7.2

要素別処理関数の実引数 及び 結果

要素別処理関数を総称名 又は 個別名で参照した場合,結果の形状は,最も大きい次元数をもつ引数の形状と同一

とする。実引数の指定がないか,又は すべての実引数がスカラであるとき,結果はスカラとする。二つ以上の引数を

もつ要素別処理関数の場合,すべての実引数は,形状適合していなければならない。配列の場合,結果の各要素の値

は,それぞれに対応する各引数の要素に,スカラの関数を(順序によらず)個別に適用して得られる値になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

248

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

12.48

X

及び

Y

を形状

(

M, N

)

の配列としたとき

MAX (X, 0.0, Y)

は,次の値をもつ形状

(

M, N

)

の配列式となる。

max(

X(

i

,

j

)

, 0.0,

Y(

i

,

j

)

),

i

= 1

,

2

, . . . , M

,

j

= 1

,

2

, . . . , N

12.7.3

要素別処理サブルーチンの実引数

要素別処理サブルーチン

(elemental subroutine)

は,スカラの引数に対する動作を規定してあるが,配列の引数に対

しても適用できる。要素別処理サブルーチンを引用する場合,すべての実引数がスカラであるか,又は

INTENT(OUT)

属性 若しくは

INTENT(INOUT)

属性をもつ仮引数と結合した実引数はすべて同じ形状の配列であって,他の引数は

それらと形状適合していなければならない。

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもつ仮引数と結合

した実引数が配列であって結果に要素があるとき,各要素の値は,それぞれに対応する各引数の要素にスカラ値の関

数を(順序によらず)個別に適用して得られる値になる。

組込みサブルーチン

MVBITS

の引用では,仮引数

TO

及び

FROM

に対応する実引数は同じ変数であってもよく,結合

している二つのスカラ変数 又は すべての対応する要素が結合している二つの配列変数であってもよい。これ以外の

要素別処理サブルーチンの引用における実引数は,

12.4.1.7

の制限を満たさなければならない。

13

組込み手続 及び 組込みモジュール

組込み手続

(intrinsic procedure)

は,問合せ関数,要素別処理関数,変形関数 及び サブルーチンの

4

種類とする。

組込みサブルーチンには,要素別処理のものもある。

組込みモジュールは,

Fortran

環境モジュール(

13.8.2

参照),例外処理 又は

IEEE

算術を支援するモジュール,

及び プログラム言語

C

との相互利用可能性を支援するモジュールの

3

組とする。後ろの

2

組のモジュールは,それ

ぞれ箇条

14

及び

15

で規定する。

13.1

組込み手続類

問合せ関数

(inquiry function)

は,結果が引数の値ではなく一つ以上の引数の性質に依存する。引数の値は,不定

であってもよい。要素別処理組込み関数

(elemental intrinsic function)

については,スカラ引数に対しての動作を規

定してある。しかし,

12.7

に規定するように,引数が配列である場合にも適用できる。それ以外のすべての組込み関

数は,変形関数

(transformational function)

とする。それらのほとんどすべては,一つ以上の引数の値が配列である

か,又は 結果の値が配列になる。標準組込み関数は,純粋手続とする。

サブルーチン

MOVE ALLOC

及び 要素別処理サブルーチン

MVBITS

は純粋手続とする。他のすべての標準組込みサブ

ルーチンは純粋手続ではない。

注記

13.1

利用者が書いた要素別処理サブルーチンと同様に,要素別処理組込みサブルーチンは純粋手続

とする。

MOVE ALLOC

の作用は,引数に限定される。残りの要素別処理でない組込みサブルーチンは,

すべて副作用があり(又は システムに副作用をもたらし),純粋手続ではない。

組込み関数の 総称名

(generic name)

は,

13.5

に示す。ほとんどの場合,総称関数の引数には

2

種類以上の型を指

定することができ,結果の型は引数の型と同一とする。各組込み関数の総称名に対応する 個別名

(specific name)

は,

13.6

に示す。

組込み関数をほかの手続への実引数にする場合,個別名を用いなければならず,呼び出された手続内で引用すると

きの引数は,スカラに限る。個別名をもたない組込み関数は,実引数として使ってはならない

(

12.4.1.3

)

要素別処理組込み手続の動作は,

12.7

による。

13.2

組込み手続の引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

249

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

すべての組込み手続は,順対応引数

(positional argument)

又は 引数キーワード

(argument keyword)

によって呼

び出す(

12.4

参照)。標準組込み手続の引数キーワードの名前 及び 順対応の順序は,

13.5

13.7

に規定する。

多くの組込み手続は,省略可能な引数をもつ。省略可能な引数は,引数の規則の部分では

省略可能

と記述して

区別してある。また,箇条表題 及び 手続の引数並びの部分では,省略可能な引数名を角括弧でくくってある。省略

可能な引数をもつ手続の有効な引用形式は,

12.4.1

による。

13.2

CMPLX (X

[

, Y, KIND

]

)

の表記は,

Y

及び

KIND

が共に省略可能であることを示す。この手

続の有効な引用形式は,

CMPLX(x)

CMPLX(x, y)

CMPLX(x, KIND=kind)

CMPLX(x, y, kind)

CMPLX(KIND=kind, X=x, Y=y)

などである。

13.3

省略可能な引数に対して,別の要求事項を加えている組込み手続もある。例えば,

SELECTED REAL

KIND

は,省略可能な引数のうち少なくとも一つの引数は指定しなければならないし,

RANDOM SEED

は,省略可能な引数のうち多くとも一つの引数しか指定できない。

13.6

に示す組込み手続の個別名の仮引数は,

INTENT(IN)

属性をもつ。

13.7

に示す総称組込み手続の仮引数は,

INTENT

属性が明示的に規定されていなければ,

INTENT(IN)

属性をもつ。

組込み手続の仮引数

KIND

と結合する実引数は,スカラ整数初期値式を指定して,その値によって処理系がもつ関

数結果の表現方法を指定しなければならない。

文字型の引数に値を代入する組込みサブルーチンは,組込み代入規則(

7.4.1.3

)と一致するように代入を行う。

13.2.1

配列引数の形状

特に指定しない限り,問合せ組込み関数が,受け付ける配列引数は,形状が定義されていなくてもよい。変形組込

み関数 及び 要素別処理組込み関数の配列引数の形状は,定義されていなければならない。

13.2.2

選別引数

配列組込み関数のうちには,省略できる論理型の引数

MASK

をもつものがある。この引数は,他の一つ以上の引数

について,関数が操作する配列要素を選択するために使用する。関数が呼び出された時,

MASK

によって選択されな

い要素は不定でもよい。

MASK

は関数の値だけに影響を与え,関数呼出しに先立つ配列式である引数の評価には影響を与えない。

13.3

ビットの数体系

ビット操作手続は,

10

個の要素別処理関数と

1

個の要素別処理サブルーチンとを含む。要素別処理関数

IOR

IAND

NOT

及び

IEOR

は,ビットごとの論理演算を行う。要素別処理関数

ISHFT

及び

ISHFTC

は,けた(桁)移動演算を行

う。要素別処理関数

IBITS

及び 要素別処理サブルーチン

MVBITS

は,ビット列の部分列参照を行う。要素別処理関数

BTEST

IBSET

及び

IBCLR

は,

1

個のビットを操作する。

これらの手続において,ビットとは,次の式で定義される非負整数の数体系に基づいた非負の整数型スカラ実体に

おける,位置

k

2

進数字

w

k

とする。

j

=

z

1

k

=0

w

k

×

2

k

ここで

w

k

は,

1

又は

0

の値をとる。

13.4

に示す数体系の例であれば,

z

= 32

とすることになり,

32

ビットの整数

を定義する。

数体系のパラメタ

z

の値を知りたいときは,問合せ関数

BIT SIZE

を用いる。

事実上,この数体系は,整数型の実体が右から左に向かって

0

から

z

1

という番号を付けた

z

個のビットからな

ると定義したことになる。この数体系は,ビット操作手続の引数 及び 結果について記述する場合の概念とする。そ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

250

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

のほかの場合には,

13.4

で定義する整数の数体系を参照する。

13.4

数値の数体系

数値操作関数 及び 数値問合せ関数は,処理系における数値を表現する数体系 及び 数値の振る舞いに関する結果

を返す。数体系は,プログラムが実行する機種に最も適合するように定められた数個のパラメタをもつ。

整数

i

の数体系は,次によって定義する。

i

=

s

×

q

1

k

=0

w

k

×

r

k

ここで,

r

2

以上の整数,

q

は正の整数,

w

k

r

未満の非負の整数とし,

s

+1

又は

1

とする。

実数

x

の数体系は,次によって定義する。

x

=


0

又は

s

×

b

e

×

p

k

=1

f

k

×

b

k

ここで,

b

及び

p

2

以上の整数,

f

k

b

未満の非負の整数(ただし

f

1

0

ではない。)とし,

s

+1

又は

1

とする。

e

は,ある最小値の整数

e

min

からある最大値の整数

e

max

までの間の整数とする。

x

= 0

に対しては,指数

e

及び 各けた

f

k

0

とする。整数のパラメタ

r

及び

q

は,整数の集合の数体系を定める。整数のパラメタ

b

p

e

min

及び

e

max

は,浮動小数点数の数体系を定める。整数 及び 実数の数体系のパラメタは,処理系において実現さ

れる整数型 及び 実数型のそれぞれに存在する。数体系の定義に際して,これらのパラメタは,使用可能な数値の集

合を特徴付ける。浮動小数点数操作関数

(

13.5.10

)

及び 数値問合せ関数

(

13.5.6

)

は,数体系に関連する幾つかのパ

ラメタの値 及び その他の値を返す。

注記

13.4

13.7

での関数の例には,次の数体系を用いる。

i

=

s

×

30

k

=0

w

k

×

2

k

及び

x

=


0

又は

s

×

2

e

×

(

1

2

+

24

k

=2

f

k

×

2

k

)

,

126

e

127

13.5

標準総称組込み関数

13.5.1

13.5.18

に示す標準組込み手続における引数名は,実引数を指定する場合に用いるキーワード名とする。

13.5

関数

CMPLX

の引用は,

CMPLX(A

B

M)

と書いてもよいし,

CMPLX(Y=B

KIND=M

X=A)

と書い

てもよい。

13.6

次の引数キーワードは,それぞれ右の用途を表す。

KIND

結果の種別型パラメタを指定する。

STRING, STRING A

任意の文字列。

BACK

文字列操作の方向を制御する(正順 又は 逆順)。

MASK

配列要素を選別する論理式(マスク)。

DIM

配列の次元を選択する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

251

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.5.1

数値関数

ABS (A)

絶対値

AIMAG (Z)

複素数の虚部

AINT (A

[

, KIND

]

)

整数値への切捨て

ANINT (A

[

, KIND

]

)

最も近い整数値(四捨五入)

CEILING (A)

引数以上で最小の整数

CMPLX (X

[

, Y, KIND

]

)

複素数型への変換

CONJG (Z)

共役複素数

DBLE (A)

倍精度実数型への変換

DIM (X, Y)

超過分

DPROD (X, Y)

倍精度実数型の積

FLOOR (A)

引数以下で最大の整数(ガウス記号)

INT (A

[

, KIND

]

)

整数型への変換(切捨て)

MAX (A1, A2

[

, A3, ...

]

)

最大値

MIN (A1, A2

[

, A3, ...

]

)

最小値

MOD (A, P)

余り

MODULO (A, P)

剰余

NINT (A

[

, KIND

]

)

最も近い整数(四捨五入)

REAL (A

[

, KIND

]

)

実数型への変換

SIGN (A, B)

符号の変更

13.5.2

数学関数

ACOS (X)

逆余弦

ASIN (X)

逆正弦

ATAN (X)

逆正接

ATAN2 (Y, X)

逆正接

COS (X)

余弦

COSH (X)

双曲線余弦

EXP (X)

指数

LOG (X)

自然対数

LOG10 (X)

常用対数

SIN (X)

正弦

SINH (X)

双曲線正弦

SQRT (X)

平方根

TAN (X)

正接

TANH (X)

双曲線正接

13.5.3

文字関数

ACHAR (I

[

, KIND

]

)

ASCII

大小順序における指定した番号の文字

ADJUSTL (STRING)

左詰め

ADJUSTR (STRING)

右詰め

CHAR (I

[

, KIND

]

)

処理系大小順序における指定した番号の文字

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

252

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

IACHAR (C

[

, KIND

]

)

ASCII

大小順序における文字の番号

ICHAR (C

[

, KIND

]

)

処理系大小順序における文字の番号

INDEX (STRING, SUBSTRING

[

, BACK, KIND

]

)

部分列の開始位置

LEN TRIM (STRING

[

, KIND

]

)

末尾の空白を除いた文字長

LGE (STRING A, STRING B)

辞書順で以上

LGT (STRING A, STRING B)

辞書順でより大きい

LLE (STRING A, STRING B)

辞書順で以下

LLT (STRING A, STRING B)

辞書順でより小さい

MAX (A1, A2

[

, A3, ...

]

)

最大値

MIN (A1, A2

[

, A3, ...

]

)

最小値

REPEAT (STRING, NCOPIES)

連結の繰返し

SCAN (STRING, SET

[

, BACK, KIND

]

)

集合中の文字について文字列の検索

TRIM (STRING)

末尾の空白の削除

VERIFY (STRING, SET

[

, BACK, KIND

]

)

集合中の文字についての包含の検査

13.5.4

種別関数

KIND (X)

種別型パラメタ値

SELECTED CHAR KIND (NAME)

指定した文字集合名を表現できる文字型の種別型パラメタ値

SELECTED INT KIND (R)

指定した指数範囲を表現できる整数型の種別型パラメタ値

SELECTED REAL KIND (

[

P, R

]

)

指定した精度と指数範囲を表現できる実数型の種別型パラメタ値

13.5.5

種々の型変換関数

LOGICAL (L

[

, KIND

]

)

論理型の種別型パラメタの変更

TRANSFER (SOURCE, MOLD

[

, SIZE

]

)

1

引数を第

2

引数の型として扱う

13.5.6

数値問合せ関数

DIGITS (X)

数体系の有効けた数

EPSILON (X)

1

に対してほとんど無視できる値

HUGE (X)

数体系における最大数

MAXEXPONENT (X)

数体系における最大指数

MINEXPONENT (X)

数体系における最小指数

PRECISION (X)

10

進精度

RADIX (X)

数体系の基数

RANGE (X)

10

進指数範囲

TINY (X)

数体系における正の最小数

13.5.7

配列問合せ関数

LBOUND (ARRAY

[

, DIM, KIND

]

)

配列の次元の下限

SHAPE (SOURCE

[

, KIND

]

)

配列 又は スカラの形状

SIZE (ARRAY

[

, DIM, KIND

]

)

配列要素の総数

UBOUND (ARRAY

[

, DIM, KIND

]

)

配列の次元の上限

13.5.8

その他の問合せ関数

ALLOCATED (ARRAY)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

253

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

又は

ALLOCATED (SCALAR)

割付け状態

ASSOCIATED (POINTER

[

, TARGET

]

)

結合状態問合せ 又は 比較

BIT SIZE (I)

数体系のビット数

EXTENDS TYPE OF (A, MOLD)

動的な型 又は 拡張

LEN (STRING

[

, KIND

]

)

文字型要素の長さ

NEW LINE (A)

改行文字

PRESENT (A)

引数が実在するかどうか

SAME TYPE AS (A, B)

同じ動的な型

13.5.9

ビット操作手続

BTEST (I, POS)

ビットの検査

IAND (I, J)

ビットごとの論理積

IBCLR (I, POS)

ビットの消去

IBITS (I, POS, LEN)

ビット列の取出し

IBSET (I, POS)

ビットの設定

IEOR (I, J)

ビットごとの排他的論理和

IOR (I, J)

ビットごとの論理和

ISHFT (I, SHIFT)

けた移動

ISHFTC (I, SHIFT

[

, SIZE

]

)

循環けた移動

MVBITS (FROM, FROMPOS, LEN, TO, TOPOS)

指定した整数から他の整数へのビット列の複写

NOT (I)

ビットごとの論理否定

13.5.10

浮動小数点数操作関数

EXPONENT (X)

数体系の数の指数部

FRACTION (X)

数体系の数の小数部

NEAREST (X, S)

指定した方向で最も近い処理系の数

RRSPACING (X)

指定した数の前後での数体系の数の相対間隔の逆数

SCALE (X, I)

実数と基数の整数べきとの積

SET EXPONENT (X, I)

指数部の設定

SPACING (X)

指定した数の前後での数体系の数の絶対間隔

13.5.11

ベクトル 及び 行列の乗算関数

DOT PRODUCT (VECTOR A, VECTOR B)

二つの

1

次元配列の内積

MATMUL (MATRIX A, MATRIX B)

行列積

13.5.12

配列集計関数

ALL (MASK

[

, DIM

]

)

配列要素の値がすべて真のとき真

ANY (MASK

[

, DIM

]

)

配列要素の値が一つでも真のとき真

COUNT (MASK

[

, DIM , KIND

]

)

真である配列要素の個数

MAXVAL (ARRAY, DIM

[

, MASK

]

)

又は

MAXVAL (ARRAY

[

, MASK

]

)

配列要素の最大値

MINVAL (ARRAY, DIM

[

, MASK

]

)

又は

MINVAL (ARRAY

[

, MASK

]

)

配列要素の最小値

PRODUCT (ARRAY, DIM

[

, MASK

]

)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

254

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

又は

PRODUCT (ARRAY

[

, MASK

]

)

全配列要素の積

SUM (ARRAY, DIM

[

, MASK

]

)

又は

SUM (ARRAY

[

, MASK

]

)

全配列要素の和

13.5.13

配列構成関数

CSHIFT (ARRAY, SHIFT

[

, DIM

]

)

循環移動

EOSHIFT (ARRAY, SHIFT

[

, BOUNDARY, DIM

]

)

切捨て移動

MERGE (TSOURCE, FSOURCE, MASK)

選別式に従った配列の選択的な併合

PACK (ARRAY, MASK

[

, VECTOR

]

)

選別式に従った多次元配列の

1

次元配列への詰込み

RESHAPE (SOURCE, SHAPE

[

, PAD, ORDER

]

)

配列の再構成

SPREAD (SOURCE, DIM, NCOPIES)

次元追加による配列の拡張

TRANSPOSE (MATRIX)

2

次元配列の転置

UNPACK (VECTOR, MASK, FIELD)

選別式に従った

1

次元配列の多次元配列への配布

13.5.14

配列内位置関数

MAXLOC (ARRAY, DIM

[

, MASK , KIND

]

)

又は

MAXLOC (ARRAY

[

, MASK , KIND

]

)

配列中の最大値の位置

MINLOC (ARRAY, DIM

[

, MASK , KIND

]

)

又は

MINLOC (ARRAY

[

, MASK , KIND

]

)

配列中の最小値の位置

13.5.15 NULL

関数

NULL (

[

MOLD

]

)

空状態の 又は 割り付けられていない結果 を返す

13.5.16

割付け転送手続

MOVE ALLOC (FROM, TO)

一つの割付け実体を他に移動する

13.5.17

乱数手続

RANDOM NUMBER (HARVEST)

擬似乱数を返す

RANDOM SEED (

[

SIZE, PUT, GET

]

)

擬似乱数の初期化と再始動

13.5.18

システム環境手続

COMMAND ARGUMENT COUNT ()

コマンド引数の個数を返す

CPU TIME (TIME)

処理系の時間を返す

DATE AND TIME (

[

DATE, TIME, ZONE, VALUES

]

)

日付と時刻を返す

GET COMMAND (

[

COMMAND, LENGTH, STATUS

]

)

コマンド全体を返す

GET COMMAND ARGUMENT (NUMBER

[

, VALUE, LENGTH, STATUS

]

)

コマンド引数を返す

GET ENVIRONMENT VARIABLE (NAME

[

, VALUE, LENGTH, STATUS,TRIM NAME

]

)

環境変数の値を返す

IS IOSTAT END (I)

ファイル終了値を調べる

IS IOSTAT EOR (I)

記録終了値を調べる

SYSTEM CLOCK (

[

COUNT, COUNT RATE, COUNT MAX

]

)

処理系の時刻を返す

13.6

標準組込み関数の個別名

AMAX0, AMIN0, MAX1

及び

MIN1

を除き,個別関数の結果の型は,同じ引数で対応する総称関数を呼び出したとき

の結果の型と同じとする。

個別名

総称名

引数の型

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

255

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ABS

ABS

基本実数型

ACOS

ACOS

基本実数型

AIMAG

AIMAG

基本複素数型

AINT

AINT

基本実数型

ALOG

LOG

基本実数型

ALOG10

LOG10

基本実数型

AMAX0 ( ... )

REAL (MAX ( ... ))

基本整数型

AMAX1

MAX

基本実数型

AMIN0 ( ... )

REAL (MIN ( ... ))

基本整数型

AMIN1

MIN

基本実数型

AMOD

MOD

基本実数型

ANINT

ANINT

基本実数型

ASIN

ASIN

基本実数型

ATAN

ATAN

基本実数型

ATAN2

ATAN2

基本実数型

CABS

ABS

基本複素数型

CCOS

COS

基本複素数型

CEXP

EXP

基本複素数型

CHAR

CHAR

基本整数型

CLOG

LOG

基本複素数型

CONJG

CONJG

基本複素数型

COS

COS

基本実数型

COSH

COSH

基本実数型

CSIN

SIN

基本複素数型

CSQRT

SQRT

基本複素数型

DABS

ABS

倍精度実数型

DACOS

ACOS

倍精度実数型

DASIN

ASIN

倍精度実数型

DATAN

ATAN

倍精度実数型

DATAN2

ATAN2

倍精度実数型

DCOS

COS

倍精度実数型

DCOSH

COSH

倍精度実数型

DDIM

DIM

倍精度実数型

DEXP

EXP

倍精度実数型

DIM

DIM

基本実数型

DINT

AINT

倍精度実数型

DLOG

LOG

倍精度実数型

DLOG10

LOG10

倍精度実数型

DMAX1

MAX

倍精度実数型

DMIN1

MIN

倍精度実数型

DMOD

MOD

倍精度実数型

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

256

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

DNINT

ANINT

倍精度実数型

DPROD

DPROD

基本実数型

DSIGN

SIGN

倍精度実数型

DSIN

SIN

倍精度実数型

DSINH

SINH

倍精度実数型

DSQRT

SQRT

倍精度実数型

DTAN

TAN

倍精度実数型

DTANH

TANH

倍精度実数型

EXP

EXP

基本実数型

FLOAT

REAL

基本整数型

IABS

ABS

基本整数型

ICHAR

ICHAR

基本文字型

IDIM

DIM

基本整数型

IDINT

INT

倍精度実数型

IDNINT

NINT

倍精度実数型

IFIX

INT

基本実数型

INDEX

INDEX

基本文字型

INT

INT

基本実数型

ISIGN

SIGN

基本整数型

LEN

LEN

基本文字型

LGE

LGE

基本文字型

LGT

LGT

基本文字型

LLE

LLE

基本文字型

LLT

LLT

基本文字型

MAX0

MAX

基本整数型

MAX1 ( ... )

INT (MAX ( ... ))

基本実数型

MIN0

MIN

基本整数型

MIN1 ( ... )

INT (MIN ( ... ))

基本実数型

MOD

MOD

基本整数型

NINT

NINT

基本実数型

REAL

REAL

基本整数型

SIGN

SIGN

基本実数型

SIN

SIN

基本実数型

SINH

SINH

基本実数型

SNGL

REAL

倍精度実数型

SQRT

SQRT

基本実数型

TAN

TAN

基本実数型

TANH

TANH

基本実数型

印が付いた個別組込み関数は,実引数 又は ポインタ代入文の指示先として使用してはならない。

13.7

標準組込み手続の宣言

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

257

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

この細分箇条では,標準総称組込み手続の詳細な仕様を

ABC

順に規定する。

標準組込み手続の引数 及び 関数結果の型 及び 型パラメタを,

13.7.1

13.7.126

に規定する。

引数

の項目では

手続の実引数の必要条件を定義する。

結果の特性

は,仮引数の特性から定義される場合もある。ただし,組込みモ

ジュール

IEEE ARITHMETIC

(箇条

14

参照)が参照可能であって,結果に無限大 又は 非数が返される場合には呼び

出してもよい。処理系は,サブルーチンの引数 又は 関数結果として返される値が,指定された型 及び 型パラメタの

実体で表現可能な値の範囲外になるような状況で,組込み手続を呼び出してはならない。無限大の結果を返すときは

フラグ

IEEE OVERFLOW

が発生し,非数の結果を返すときは,

IEEE DIVIDE BY ZERO

が発生する。結果に非数が返さ

れるときは,

IEEE INVALID

が発生する。すべての結果が正常ならば,これらのフラグは組込み手続が呼び出された

ときと同じ状態をもつ。

13.7.1 ABS (A)

機能

絶対値を返す。

分類

要素別処理関数。

引数

A

は,整数型,実数型 又は 複素数型でなければならない。

結果の特性

A

が複素数型の場合,結果の型は実数型とする。それ以外の場合,結果の型は

A

と同じとする。

結果の値

A

が整数型 又は 実数型の場合,結果の値は

|

A

|

とする。

A

が複素数

(

x

,

y

)

の場合,結果の値は

x

2

+

y

2

の処理系依存の近似値とする。

例示

ABS ((3.0, 4.0))

は,

5.0

(近似値)になる。

13.7.2 ACHAR (I [, KIND])

機能

ASCII

大小順序における指定した位置の文字を返す。関数

IACHAR

の逆関数である。

分類

要素別処理関数。

引数

I

整数型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

長さ

1

の文字型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

省略したとき,種別型パラメタは基本文字型のものとする。

結果の値

I

の値が

0

I

127

の範囲である場合,結果の値は

ASCII

大小順序における位置

I

の文字とする。た

だし,処理系が結果の文字型でその文字を表現できないときの結果は,処理系依存とする。基本文字型で表現できる

任意の文字

C

に対して,

ACHAR (IACHAR (C))

は,値

C

をもたなければならない。

例示

ACHAR (88)

は,

’X’

になる。

13.7.3 ACOS (X)

機能

逆余弦関数(余弦関数の逆関数)。

分類

要素別処理関数。

引数

X

は,実数型であって,

|

X

| ≤

1

を満たす値でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,ラジアンで表した

arccos (

X

)

の処理系依存の近似値とし,

0

ACOS(X)

π

の範囲とする。

例示

ACOS (0.54030231)

は,

1.0

(近似値)になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

258

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.4 ADJUSTL (STRING)

機能

先頭の空白を取り除き末尾に空白を挿入して左詰めにする。

分類

要素別処理関数。

引数

STRING

は,文字型でなければならない。

結果の特性

STRING

と同じ長さ 及び 同じ種別型パラメタの文字型とする。

結果の値

結果の値は,

STRING

の先頭の空白を削除し,同数の空白を末尾に挿入した文字列とする。

例示

ADJUSTL (’ WORD’)

の値は,

WORD

になる。

13.7.5 ADJUSTR (STRING)

機能

末尾の空白を取り除き先頭に空白を挿入して右詰めにする。

分類

要素別処理関数。

引数

STRING

は,文字型でなければならない。

結果の特性

STRING

と同じ長さ 及び 同じ種別型パラメタの文字型とする。

結果の値

結果の値は,

STRING

の末尾の空白を削除し,同数の空白を先頭に挿入した文字列とする。

例示

ADJUSTR (’WORD ’)

の値は,

’ WORD’

になる。

13.7.6 AIMAG (Z)

機能

複素数の虚部を返す。

分類

要素別処理関数。

引数

Z

は,複素数型でなければならない。

結果の特性

Z

と同じ種別型パラメタの実数型とする。

結果の値

Z

の値が

(

x, y

)

であるとき,結果の値は

y

とする。

例示

AIMAG ((2.0, 3.0))

の値は,

3

.

0

になる。

13.7.7 AINT (A [, KIND])

機能

整数値への切捨て。

分類

要素別処理関数。

引数

A

実数型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

結果の型は,実数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略したとき,種別型パラメタは,

A

と同じとする。

結果の値

|

A

|

<

1

のとき,

AINT (A)

の値は

0

とする。

|

A

| ≥

1

のとき,

AINT (A)

の値は,

A

の絶対値以下で最大

の整数値に

A

の符号を付けたものとする。

例示

AINT (2.783)

の値は,

2

.

0

になる。

AINT (-2.783)

の値は

2

.

0

になる。

13.7.8 ALL (MASK [, DIM])

機能

MASK

の第

DIM

次元の要素の値がすべて真であるかどうかを判定する。

分類

変形関数。

引数

MASK

論理型でなければならず,スカラであってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

259

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

DIM

(省略可能)

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

MASK

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

結果の特性

結果は,

MASK

と同じ種別型パラメタの論理型とする。

DIM

が省略されている場合,結果はスカラとす

る。それ以外の場合,結果は

n

1

次元の配列とし,その形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . . , d

n

)

とする。ここで

(

d

1

, d

2

, . . ., d

n

)

は,

MASK

の形状とする。

結果の値

場合

1

ALL (MASK)

の結果の値は,

MASK

のすべての要素が真であるか 又は

MASK

が大きさゼロであるとき

真とし,

MASK

のどれかの要素が偽であるとき偽とする。

場合

2

MASK

の次元数が

1

であるとき,

ALL (MASK, DIM)

ALL (MASK)

と同じとする。次元数が

2

以上

であるとき,

ALL (MASK, DIM)

の要素

(

s

1

, s

2

, . . ., s

DIM

1

, s

DIM

+1

, . . ., s

n

)

の値は,

ALL (MASK (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

))

と同じとする。

例示

場合

1

ALL ((/ .TRUE., .FALSE., .TRUE. /))

の値は,偽になる。

場合

2

B

が配列


1

3

5

2

4

6


であって,

C

が配列


0

3

5

7

4

8


であるとき,

ALL (B /= C, DIM = 1)

値は

[

,

,

]

になり,

ALL (B /= C

DIM = 2)

の値は

[

,

]

になる。

13.7.9 ALLOCATED (ARRAY)

又は

ALLOCATED (SCALAR)

機能

割付け変数が割り付けられているかどうかを示す。

分類

問合せ関数。

引数

ARRAY

割付け配列でなければならない。

SCALAR

割付けスカラでなければならない。

結果の特性

基本論理型スカラとする。

結果の値

結果の値は, 引数(

ARRAY

又は

SCALAR

)が割り付けられているとき真とし,割り付けられていないとき

偽とする。

13.7.10 ANINT (A [, KIND])

機能

最も近い整数値を返す(四捨五入)。

分類

要素別処理関数。

引数

A

実数型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

結果の型は,実数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略したとき,種別型パラメタは,

A

と同じとする。

結果の値

結果は

A

に最も近い整数とする。

A

に最も近い整数が等距離で二つある場合,結果はそれらのうち絶対

値の大きいほうとする。

例示

ANINT (2.783)

の値は,

3

.

0

になる。

ANINT (-2.783)

の値は,

3

.

0

になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

260

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.11 ANY (MASK [, DIM])

機能

MASK

の第

DIM

次元の要素の値が一つでも真であるかどうかを判定する。

分類

変形関数。

引数

MASK

論理型でなければならず,スカラであってはならない。

DIM

(省略可能)

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

MASK

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

結果の特性

結果は,

MASK

と同じ種別型パラメタの論理型とする。

DIM

を省略する場合,結果はスカラとする。そ

れ以外の場合,結果は

n

1

次元とし,その形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

とする。ここで

(

d

1

, d

2

, . . ., d

n

)

は,

MASK

の形状とする。

結果の値

場合

1

ANY (MASK)

の結果の値は,

MASK

のどれかの要素が真であるとき真とし,どの要素も真でないとき

又は

MASK

が大きさゼロであるとき偽とする。

場合

2

MASK

の次元数が

1

であるとき,

ANY (MASK, DIM)

ANY (MASK)

と同じとする。次元数が

2

以上

であるとき,

ANY (MASK, DIM)

の要素

(

s

1

, s

2

, . . ., s

DIM

1

, s

DIM

+1

, . . ., s

n

)

の値は,

ANY (MASK (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

))

と同じとする。

例示

場合

1

ANY ((/ .TRUE., .FALSE., .TRUE. /))

の値は,真になる。

場合

2

B

が配列


1

3

5

2

4

6


であって,

C

が配列


0

3

5

7

4

8


であるとき,

ANY (B /= C, DIM = 1)

値は

[

,

,

]

になり,

ANY (B /= C, DIM = 2)

の値は

[

,

]

になる。

13.7.12 ASIN (X)

機能

逆正弦関数(正弦関数の逆関数)。

分類

要素別処理関数。

引数

X

は,実数型であって,

|

X

| ≤

1

を満たす値でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,ラジアンで表した

arcsin (

X

)

の処理系依存の近似値とし,

π/

2

ASIN(X)

π/

2

の範囲

とする。

例示

ASIN (0.84147098)

の値は,

1.0

(近似値)になる。

13.7.13 ASSOCIATED (POINTER [, TARGET])

機能

ポインタ引数の結合状態を返す。すなわち,ポインタが指示先と結合しているかどうかを示す。

分類

問合せ関数。

引数

POINTER

ポインタでなければならない。任意の型でよいか 又は 手続ポインタでよい。ポインタ結

合状態が不定であってはならない。

TARGET

(省略可能)

POINTER

をデータポインタ実体 又は 手続ポインタ実体とするポインタ代入文

(

7.4.2

)

のデータ指示先 又は 手続指示先として許されるものでなければならない。

TARGET

がポイ

ンタである場合,ポインタ結合状態が不定であってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

261

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

結果の特性

基本論理型スカラとする。

結果の値

場合

1

TARGET

を省略した場合,結果の値は,

POINTER

が指示先と結合しているとき真とし,結合していな

いとき偽とする。

場合

2

TARGET

が指定されていて手続である場合,

POINTER

TARGET

と結合しているときの結果の値は真

とする。

場合

3

TARGET

が指定されていて手続ポインタである場合,

POINTER

及び

TARGET

の値が同じ手続と結合し

ているとき結果の値は真とする。

POINTER

又は

TARGET

が空状態の場合,結果は偽とする。

場合

4

TARGET

が指定されていてスカラ指示先である場合,

TARGET

が大きさゼロでない記憶列であって,

POINTER

と結合している指示先が

TARGET

と同じ記憶単位を占めているとき,結果の値は真とする。

それ以外のとき,結果の値は偽とする。

POINTER

が空状態のとき,結果の値は偽とする。

場合

5

TARGET

が指定されていて配列指示先である場合,

POINTER

TARGET

が結合している指示先とが同

じ形状であって,大きさゼロでなく,配列の要素が大きさゼロの記憶列でなく,配列要素順序で同じ

記憶単位を占めているとき,結果の値は真とする。それ以外のとき,結果の値は偽とする。

POINTER

が空状態のとき,結果の値は偽とする。

場合

6

TARGET

が指定されていてスカラポインタである場合,

POINTER

と結合している指示先と

TARGET

結合している指示先とが,大きさゼロでない記憶列であって,同じ記憶単位を占めているとき,結果

の値は真とする。それ以外のとき,結果の値は偽とする。

POINTER

又は

TARGET

が空状態であると

き,結果の値は偽とする。

場合

7

TARGET

が指定されていて配列ポインタである場合,

POINTER

と結合している指示先と

TARGET

と結

合している指示先とが,同じ形状であって,大きさゼロでなく,配列の要素が大きさゼロの記憶列で

なく,配列要素順序で同じ記憶単位を占めているとき,結果の値は真とする。それ以外のとき,結果

の値は偽とする。

POINTER

又は

TARGET

が空状態であるとき,結果の値は偽とする。

例示

CURRENT

が指示先

HEAD

と結合しているとき,

ASSOCIATED (CURRENT, HEAD)

は真になる。

A_PART

=>

A (:N)

の実行後,

N

UBOUND (A, DIM=1)

と等しく

A

の下限が

1

であるとき,

ASSOCIATED (A_PART, A)

の値は真になる。

NULLIFY (CUR); NULLIFY (TOP)

を実行すると,

ASSOCIATED (CUR, TOP)

の値は偽になる。

13.7.14 ATAN (X)

機能

逆正接関数(正接関数の逆関数)。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,ラジアンで表した

arctan (

X

)

の処理系依存の近似値とし,

π/

2

ATAN(X)

π/

2

の範囲

とする。

例示

ATAN (1.5574077)

の値は,

1.0

(近似値)になる。

13.7.15 ATAN2 (Y, X)

機能

逆正接関数(正接関数の逆関数)。結果は,

(0

.

0

,

0

.

0)

でない複素数

(

X

,

Y

)

の主偏角とする。

分類

要素別処理関数。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

262

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

引数

Y

実数型でなければならない。

X

Y

と同じ型 及び 同じ種別型パラメタでなければならない。

Y

0.0

である場合,

X

0.0

であってはな

らない。

結果の特性

X

と同じとする。

結果の値

結果の値は,ラジアンで表した複素数

(X, Y)

の偏角の主値に対する処理系依存の近似値とし,

π <

ATAN2(Y, X)

π

の範囲とする。その値は,

X

̸

= 0

である場合,

arctan (

Y

/

X

)

の値の処理系依存の近似値とする。そ

の場合,

Y

>

0

であるとき,結果の値は正とする。

Y

= 0

かつ

X

>

0

である場合,結果の値は

Y

とする。

Y

= 0

かつ

X

<

0

である場合,

Y

0.0

で符号が正 又は 処理系が

0.0

の符号の正負を区別できないとき,結果の値は

π

とし,

Y

0.0

で符号が負のとき,結果の値は

π

とする。

X

= 0

である場合,結果の絶対値は

π/

2

とする。

例示

ATAN2 (1.5574077, 1.0)

の値は,

1.0

(近似値)になる。

Y


1

1

1

1


であって,

X


1

1

1

1


あるとき,

ATAN2 (Y, X)

の値は


3

π/

4

π/

4

3

π/

4

π/

4


(近似値)になる。

13.7.16 BIT SIZE (I)

機能

13.4

の数体系で定義されているビット数

z

を返す。

分類

問合せ関数。

引数

I

は,整数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

I

と同じ種別型パラメタの整数型スカラとする。

結果の値

結果の値は,

13.3

においてビット操作のために定義した整数の数体系のビット数

z

とする。

例示

BIT_SIZE (1)

の値は,数体系の

z

32

であるとき,

32

になる。

13.7.17 BTEST (I, POS)

機能

整数値のビットを調べる。

分類

要素別処理関数。

引数

I

整数型でなければならない。

POS

整数型でなければならない。値は,

0

以上

BIT_SIZE (I)

未満でなければならない。

結果の特性

基本論理型とする。

結果の値

I

の第

POS

ビットが

1

であるとき,結果の値は真とする。

I

の第

POS

ビットが

0

であるとき,結果の値

は偽とする。整数値をビット列として解釈する数体系は,

13.3

による。

例示

BTEST (8, 3)

は,真になる。

A


1

2

3

4


であるとき,

BTEST (A, 2)



になり,

BTEST (2, A)



になる。

13.7.18 CEILING (A [, KIND])

機能

引数の値以上で最小の整数を返す。

分類

要素別処理関数。

引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

263

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

A

実数型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。

結果の値

結果の値は,

A

以上で最小の整数とする。

例示

CEILING (3.7)

の値は,

4

になる。

CEILING (-3.7)

の値は,

3

になる。

13.7.19 CHAR (I [, KIND])

機能

指定された種別型パラメタに対応する処理系大小順序における指定された位置の文字を返す。関数

ICHAR

逆関数である。

分類

要素別処理関数。

引数

I

整数型であって,値が

0

I

n

1

の範囲でなければならない。ここで

n

は,指定され

た種別型パラメタに対応する処理系大小順序における文字の個数とする。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

長さ

1

の文字型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

省略したとき,種別型パラメタは基本文字型のものとする。

結果の値

結果は,指定した種別型パラメタに対応する処理系大小順序における位置

I

の文字とする。

0

I

n

1

の範囲の

I

及び 処理系が表現可能な任意の文字

C

に対して,

ICHAR (CHAR (I, KIND (C)))

の値は

I

にならなけ

ればならず,

CHAR (ICHAR (C), KIND (C))

の値は

C

にならなければならない。

例示

CHAR (88)

の値は,

ASCII

大小順序を採用している処理系では

’X’

になる。

13.7.20 CMPLX (X [, Y, KIND])

機能

複素数型に変換する。

分類

要素別処理関数。

引数

X

整数型,実数型 若しくは 複素数型であるか,又は 非

10

進定数表現であるかでなければ

ならない

Y

(省略可能)

整数型,実数型 又は 非

10

進定数表現でなければならない。

X

が複素数型のときは,指定

してはならず,省略可能な仮引数と結合してはならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

結果の型は,複素数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略したとき,種別型パラメタは基本実数型のものとする。

結果の値

Y

を省略し,

X

が複素数でない場合,

Y

にはゼロを指定したものとみなす。

X

が複素数である場合,

X

REAL (X, KIND)

とし,

Y

AIMAG (X, KIND)

を指定したものとみなす。

CMPLX (X, Y, KIND)

の値は,実部が

REAL (X, KIND)

で虚部が

REAL (Y, KIND)

である複素数の値とする。

例示

CMPLX (-3)

の値は,

(

3

.

0

,

0

.

0)

になる。

13.7.21 COMMAND ARGUMENT COUNT ()

機能

コマンド引数の個数を返す。

分類

問合せ関数。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

264

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

引数

なし。

結果の特性

基本整数型スカラとする。

結果の値

結果の値は利用可能なコマンド引数の個数に等しい。利用可能なコマンド引数がない場合 又は 処理系が

コマンド引数を実装していない場合,結果の値はゼロとする。処理系にコマンド名の概念がある場合,コマンド名は

コマンド引数としては数えない。

例示

13.7.42

参照

13.7.22 CONJG (Z)

機能

共役複素数。

分類

要素別処理関数。

引数

Z

は,複素数型でなければならない。

結果の特性

Z

と同じとする。

結果の値

Z

の値が

(

x, y

)

であるとき,結果の値は

(

x,

y

)

とする。

例示

CONJG ((2.0, 3.0))

の値は,

(2

.

0

,

3

.

0)

になる。

13.7.23 COS (X)

機能

余弦関数。

分類

要素別処理関数。

引数

X

は,実数型 又は 複素数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

cos (

X

)

の処理系依存の近似値とする。

X

が実数型のとき,ラジアンでの値とみなされる。

X

が複素数型のとき,その実部がラジアンでの値とみなされる。

例示

COS (1.0)

の値は,

0.54030231

(近似値)になる。

13.7.24 COSH (X)

機能

双曲線余弦関数。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

cosh (

X

)

の処理系依存の近似値とする。

例示

COSH (1.0)

の値は,

1.5430806

(近似値)になる。

13.7.25 COUNT (MASK [, DIM, KIND])

機能

指定した次元における

MASK

中の真である要素の個数を数える。

分類

変形関数。

引数

MASK

論理型でなければならず,スカラであってはならない。

DIM

(省略可能)

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

MASK

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略し

たとき,種別型パラメタは基本整数型のものとする。

DIM

が省略されているときは,結果はスカラとする。

DIM

が指

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

265

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

定されているときは,

n

1

次元とし,その形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

とする。ここで

(

d

1

, d

2

, . . ., d

n

)

は,

MASK

の形状とする。

結果の値

場合

1

COUNT (MASK)

の結果の値は,

MASK

中の真である要素の個数とする。

MASK

が大きさゼロであると

き,

0

とする。

場合

2

MASK

の次元数が

1

であるとき,

COUNT (MASK, DIM)

は,

COUNT (MASK)

と同じとする。

MASK

次元数が

2

以上であるとき,

COUNT (MASK, DIM)

の要素

(

s

1

, s

2

, . . ., s

DIM

1

, s

DIM

+1

, . . ., s

n

)

の値は,

COUNT (MASK (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

))

と同じとする。

例示

場合

1

COUNT ((/ .TRUE., .FALSE., .TRUE. /))

の値は,

2

になる。

場合

2

B

が配列


1

3

5

2

4

6


であって,

C

が配列


0

3

5

7

4

8


であるとき,

COUNT (B /= C, DIM = 1)

[ 2

,

0

,

1 ]

になり,

COUNT (B /= C, DIM = 2)

[ 1

,

2 ]

になる。

13.7.26 CPU TIME (TIME)

機能

処理系の時間を返す。

分類

サブルーチン。

引数

TIME

は,実数型スカラでなければならない。

INTENT (OUT)

引数とし,処理系の時間を,処理系依存の近

似値として秒単位で返す。時間として意味のある値を設定できないときは,処理系依存の負の値を返す。

例示

次のプログラム片を実行すると,計測区間の実行に要した処理系の時間を出力する。

REAL

T1, T2

...

CALL

CPU_TIME(T1)

... !

時間を計測する処理

CALL

CPU_TIME(T2)

WRITE (*,*) ’Time taken by code was ’, T2 - T1, ’ seconds’

注記

13.7

CPU TIME

の時間が一つでは不十分であるとき(例えば,並列処理系など),処理系は時間が配

列であるような追加の機能を提供してもよい。

処理系によって異なるため,時間についての厳密な定義はしない。

CPU TIME

の主な目的は,同じ

処理系上で異なるアルゴリズムの時間を比較したり,計算に時間がかかっている部分を見つけたりす

ることである。

例示のように,

CPU TIME

はプログラムのある区間内の時間を求めるのが目的であるので,開始時

刻についても厳密な定義はしない。

多くの計算機システムは,時間について複数の概念をもっている。一つの共通的な概念は,プログ

ラムの実行に消費した処理系の時間である。この時間には,システムのオーバヘッドを含んでも含ま

なくてもよいし,実時間との明確な関係もない。

13.7.27 CSHIFT (ARRAY, SHIFT [, DIM])

機能

次元数が

1

である配列式上で要素の循環移動を行うか,又は 次元数が

2

以上である配列式の指定された次元

に沿った

1

次元の部分配列のすべてにおいて要素の循環移動を行う。部分配列の端から外にはみ出した要素は,反対

側の端に送られる。それぞれの部分配列は,異なる方向に異なる量だけ移動してもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

266

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

関数名

CSHIFT

は,

Circular Shift

(循環移動)に基づいている。

分類

変形関数。

引数

ARRAY

どの型でもよい。スカラであってはならない。

SHIFT

整数型でなければならない。

ARRAY

の次元数が

1

である場合,スカラでなければなら

ない。

ARRAY

の次元数が

2

以上である場合,スカラ 又は

n

1

次元の配列で形状が

(

d

1

, d

2

, . . ., d

DIM

1

d

DIM

+1

, . . ., d

n

)

でなければならない。ここで

(

d

1

, d

2

. . ., d

n

)

は,

ARRAY

の形状とする。

DIM

(省略可能)

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。

DIM

を省略したときは,

1

を指定したものとみなす。

結果の特性

結果の型,型パラメタ 及び 形状は,

ARRAY

と同じとする。

結果の値

場合

1

ARRAY

1

次元配列である場合,結果の

i

番目の要素は,

ARRAY (1 + MODULO (

i

+ SHIFT - 1,

SIZE (ARRAY)))

とする。

場合

2

ARRAY

2

次元以上の配列である場合,結果の部分配列

(

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

の値は,

CSHIFT (ARRAY (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

),

sh

, 1)

とする。ここ

sh

は,

SHIFT

又は

SHIFT (

s

1

,

s

2

,

. . .

,

s

DIM

1

,

s

DIM

+1

,

. . .

,

s

n

)

とする。

例示

場合

1

V

が配列

[ 1

,

2

,

3

,

4

,

5

,

6 ]

であるとき,

CSHIFT (V, SHIFT=2)

をすると,

V

を左に

2

列だけ循環移動

したものになり,値は

[ 3

,

4

,

5

,

6

,

1

,

2 ]

になる。

CSHIFT (V, SHIFT=-2)

は,右に

2

列の循環移動を

行い,

[ 5

,

6

,

1

,

2

,

3

,

4 ]

になる。

場合

2

2

次元配列の各行を,同じ量だけ循環移動することも異なる量だけ循環移動することもできる。

M

が配列


1

2

3

4

5

6

7

8

9


であるとき,

CSHIFT (M, SHIFT=-1, DIM=2)

の値は


3

1

2

6

4

5

9

7

8


になり,

CSHIFT (M, SHIFT=(/ -1, 1, 0 /), DIM=2)

の値は


3

1

2

5

6

4

7

8

9


になる。

13.7.28 DATE AND TIME ([DATE, TIME, ZONE, VALUES])

機能

実時間時計のデータ 及び

JIS X 0301

で規定された表示方法と互換性のある形式の日付を返す。

分類

サブルーチン。

引数

DATE

(省略可能)

基本文字型スカラでなければならない。

INTENT (OUT)

引数とする。

CCY Y M M DD

いう形式の値を設定する。ここで,

CC

は世紀,

Y Y

は西暦年,

M M

は月,

DD

は日と

する。年月日が利用できないときは,すべて空白とする。

TIME

(省略可能)

基本文字型スカラでなければならない。

INTENT (OUT)

引数とする。

hhmmss.sss

とい

う形式の値を設定する。ここで,

hh

は時,

mm

は分,

ss.sss

は秒 及び ミリ秒とする。時

計が利用できないときは,すべての欄に空白を設定する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

267

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ZONE

(省略可能)

基本文字型スカラでなければならない。

INTENT (OUT)

引数とする。

+hhmm

又は

hhmm

という形式の値を設定する。ここで,

hh

及び

mm

は,それぞれ時 及び 分とし,協定世

界時(

UTC

)からの時差を表す。この情報が利用できないときは,すべての欄に空白を設

定する。

VALUES

(省略可能) 基本整数型の

1

次元配列でなければならない。

INTENT (OUT)

引数とする。大きさは

8

以上でなければならない。

VALUES

に返される値は,次のとおりとする。

VALUES(1)

世紀を含む年(例えば

1990

)。ただし,年月日が利用できないときは,

-HUGE(0)

VALUES(2)

月。ただし,年月日が利用できないときは,

-HUGE(0)

VALUES(3)

日。ただし,年月日が利用できないときは,

-HUGE(0)

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)

例示

INTEGER

DATE_TIME (8)

CHARACTER (LEN = 10) BIG_BEN (3)

CALL

DATE_AND_TIME (BIG_BEN (1), BIG_BEN (2),

BIG_BEN (3), DATE_TIME)

スイスのジュネーブで

1985

4

12

15

27

35.5

秒に,システム設定を地方時として上のプログラム片を実

行すると,

BIG_BEN(1)

19850412

BIG_BEN(2)

152735.500

BIG_BEN(3)

+0100

DATE_TIME

(/1985

4

12

60

15

27

35

500/)

になる。

注記

13.8

協定世界時は,

JIS X 0301

で規定されている。

13.7.29 DBLE (A)

機能

倍精度実数型に変換する。

分類

要素別処理関数。

引数

A

は,整数型,実数型 若しくは 複素数型,又は 非

10

進定数表現でなければならない。

結果の特性

倍精度実数型とする。

結果の値

結果の値は,

REAL (A, KIND (0.0D0))

とする。

例示

DBLE (-3)

の値は,

3

.

0D0

になる。

13.7.30 DIGITS (X)

機能

引数と同じ型 及び 同じ種別型パラメタの数体系の有効けた数を返す。

分類

問合せ関数。

引数

X

は,整数型 又は 実数型でなければならない。値は,スカラ 又は 配列とする。

結果の特性

基本整数型スカラとする。

結果の値

結果の値は,

X

が整数型のとき

q

とし,

X

が実数型のとき

p

とする。ここで

q

及び

p

は,

X

と同じ型 及

び 同じ種別型パラメタの数体系における

13.4

で定義した値とする。

例示

注記

13.4

に示した数体系の実数

X

について,

DIGITS (X)

の値は,

24

になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

268

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.31 DIM (X, Y)

機能

超過分

X

Y

が正のときは

X

Y

,正でないときはゼロ。

分類

要素別処理関数。

引数

X

整数型 又は 実数型でなければならない。

Y

X

と同じ型 及び 同じ種別型パラメタでなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

X

>

Y

のとき

X

Y

とし,

X

Y

のときゼロとする。

例示

DIM (-3.0, 2.0)

の値は,

0.0

になる。

13.7.32 DOT PRODUCT (VECTOR A, VECTOR B)

機能

数値型 又は 論理型のベクトルの内積。

分類

変形関数。

引数

VECTOR_A

数値型(整数型,実数型 若しくは 複素数型)又は 論理型でなければならない。

1

次元配列でな

ければならない。

VECTOR_B

VECTOR_A

が数値型のとき数値型,

VECTOR_A

が論理型のとき論理型でなければならない。

1

次元

配列であって,

VECTOR_A

と同じ大きさでなければならない。

結果の特性

引数が数値型のとき,結果の型 及び 種別型パラメタは

7.1.4.2

に従って引数の型によって決まる式

VECTOR_A * VECTOR_B

の型 及び 種別型パラメタと同じとする。引数が論理型のとき,結果は

7.1.4.2

に従って決ま

る式

VECTOR_A .AND. VECTOR_B

の種別型パラメタをもつ論理型とする。結果はスカラとする。

結果の値

場合

1

VECTOR_A

が整数型 又は 実数型の場合,結果の値は

SUM (VECTOR_A * VECTOR_B)

とする。ベクト

ルが大きさゼロであるとき,結果の値はゼロとする。

場合

2

VECTOR_A

が複素数型の場合,結果の値は

SUM (CONJG (VECTOR_A) * VECTOR_B)

とする。ベクト

ルが大きさゼロであるとき,結果の値は

(0

.

0

,

0

.

0)

とする。

場合

3

VECTOR_A

が論理型の場合,結果の値は

ANY (VECTOR_A .AND. VECTOR_B)

とする。ベクトルが大

きさゼロであるとき,結果の値は偽とする。

例示

DOT_PRODUCT ((/ 1, 2, 3 /), (/ 2, 3, 4 /))

の値は,

20

になる。

13.7.33 DPROD (X, Y)

機能

倍精度実数型の積。

分類

要素別処理関数。

引数

X

基本実数型でなければならない。

Y

基本実数型でなければならない。

結果の特性

倍精度実数型とする。

結果の値

結果の値は,

X

Y

の積に対する処理系依存の近似値とする。

例示

DPROD (-3.0, 2.0)

の値は,

6

.

0D0

になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

269

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.34 EOSHIFT (ARRAY, SHIFT [, BOUNDARY, DIM])

機能

次元数が

1

である配列式上で要素の移動を行うか,又は 次元数が

2

以上である配列式の指定された次元に沿っ

1

次元の部分配列のすべてにおいて要素の移動を行う。部分配列の端から外にはみ出した要素は捨てられ,境界値

の複製が反対側の端に取り込まれる。それぞれの部分配列は,異なる境界値をもってもよく,異なる方向に異なる量

だけ移動してもよい。

注記

関数名

EOSHIFT

は,

End-Off Shift

(切捨て移動)に基づいている。

分類

変形関数。

引数

ARRAY

どの型でもよい。スカラであってはならない。

SHIFT

整数型でなければならない。

ARRAY

1

次元配列である場合,スカラでなければな

らない。

ARRAY

2

次元以上の配列である場合,スカラ 又は

n

1

次元の配列で形

状が

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

でなければならない。ここで

(

d

1

, d

2

, . . ., d

n

)

は,

ARRAY

の形状とする。

BOUNDARY

(省略可能)

型 及び 型パラメタは,

ARRAY

と同じでなければならない。

ARRAY

の次元数が

1

ある場合,スカラでなければならない。次元数が

2

以上である場合,スカラ 又は

n

1

次元の配列で,その形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

でなければなら

ない。

BOUNDARY

は,次表の型に対して省略可能とする。省略したときは,右のス

カラ値が指定されたものとみなす。

ARRAY

の型

BOUNDARY

の値

整数型

0

実数型

0.0

複素数型

(0.0, 0.0)

論理型

文字型(長さ

len

len

個の空白

DIM

(省略可能)

1

DIM

n

の範囲の値をもつ整数型スカラでなければならない。ここで

n

は,

ARRAY

の次元数とする。

DIM

を省略したときは,

1

が指定されたものとみなす。

結果の特性

結果の型,型パラメタ 及び 形状は,

ARRAY

と同じとする。

結果の値

結果の要素

(

s

1

, s

2

, . . ., s

n

)

の値は,

ARRAY (

s

1

,

s

2

,

. . .

,

s

DIM

1

,

s

DIM

+

sh

,

s

DIM

+1

,

. . .

,

s

n

)

とする。

ここで

sh

は,不等式

LBOUND (ARRAY, DIM)

s

DIM

+

sh

UBOUND (ARRAY, DIM)

を満たすとき

SHIFT

又は

SHIFT

(

s

1

,

s

2

,

. . .

,

s

DIM

1

,

s

DIM

+1

,

. . .

,

s

n

)

とし,満たさないとき

BOUNDARY

又は

BOUNDARY (

s

1

,

s

2

,

. . .

,

s

DIM

1

,

s

DIM

+1

,

. . .

,

s

n

)

とする。

例示

場合

1

V

が配列

[ 1

,

2

,

3

,

4

,

5

,

6 ]

であるとき,

EOSHIFT (V, SHIFT=3)

を行うと,

V

を左に

3

列だけ移動し

たものになり,値は

[ 4

,

5

,

6

,

0

,

0

,

0 ]

になる。

EOSHIFT (V, SHIFT=-2, BOUNDARY=99)

は,境界値を

99

として右に

2

列の移動を行い,

[ 99

,

99

,

1

,

2

,

3

,

4 ]

になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

270

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

2

2

次元配列の各行を,すべて同じ量だけ移動することも異なる量だけ移動することもできる。境界要素

は,同じでも異なっていてもよい。

M

が配列


A

B

C

D

E

F

G

H

I


であるとき,

EOSHIFT (M, SHIFT=-1,

BOUNDARY=’*’, DIM=2)

の値は,


*

A

B

*

D

E

*

G

H


になり,

EOSHIFT (M, SHIFT=(/ -1, 1, 0 /),

BOUNDARY=(/ ’*’, ’/’, ’?’ /), DIM=2)

の値は,


A

B

E

F

/

G

H

I


になる。

13.7.35 EPSILON (X)

機能

引数と同じ型 及び 同じ種別型パラメタの数体系における,

1

に対してほとんど無視できる正の数を返す。

分類

問合せ関数。

引数

X

は,実数型でなければならない。スカラ 又は 配列とする。

結果の特性

X

と同じ型 及び 同じ種別型パラメタのスカラとする。

結果の値

結果の値は,

b

1

p

とする。ここで

b

及び

p

は,

X

と同じ型 及び 同じ種別型パラメタの数体系における

13.4

で定義した値とする。

例示

注記

13.4

に示した数体系の実数

X

について,

EPSILON (X)

の値は,

2

23

になる。

13.7.36 EXP (X)

機能

指数関数。

分類

要素別処理関数。

引数

X

は,実数型 又は 複素数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

e

X

の処理系依存の近似値とする。

X

が複素数型のとき,虚部の値はラジアンを単位とする。

例示

EXP (1.0)

の値は,

2.7182818

(近似値)になる。

13.7.37 EXPONENT (X)

機能

引数の値を数体系の数として表現したときの指数部を返す。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

結果の特性

基本整数型とする。

結果の値

X

0.0

でなく指数部

e

が基本整数型の範囲内にあるとき,結果の値は

X

の値を,

X

の基数をもち指数

の値に限界のない数体系の数

(

13.4

)

で表現したときの指数部

e

とする。

X

0.0

の場合,結果の値は

0.0

とする。

X

IEEE

無限大 又は 非数の場合,結果の値は

HUGE(0)

とする。

例示

注記

13.4

に示した数体系の実数について,

EXPONENT (1.0)

の値は

1

になり,

EXPONENT (4.1)

の値は

3

なる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

271

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.38 EXTENDS TYPE OF (A, MOLD)

機能

A

の動的な型が

MOLD

の動的な型の拡張型(

4.5.6

)かどうかを示す。

分類

問合せ関数。

引数

A

拡張可能型の実体でなければならない。ポインタの場合,割付け状態が不定であってはならない。

MOLD

拡張可能型の実体でなければならない。ポインタの場合,割付け状態が不定であってはならない。

結果の特性

基本論理型スカラとする。

結果の値

MOLD

が無制限多相的であるか,空状態のポインタ 又は 割り付けられていない割付けのいずれかである

場合,結果は真とする。そうでない場合,

A

が無制限多相的であるか,空状態のポインタ 又は 割付け状態が未割付

けのいずれかであるとき,結果は偽とする。それ以外のとき,

A

の動的な型が

MOLD

の動的な型の拡張型であるとき,

かつ そのときに限り,結果は真とする。

注記

13.9

空状態のポインタ 又は 割付け状態が未割付けの動的な型は,その宣言時の型となる。

13.7.39 FLOOR (A [, KIND])

機能

引数の値以下で最大の整数を返す(ガウス記号)。

分類

要素別処理関数。

引数

A

実数型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。

結果の値

結果の値は,

A

以下で最大の整数とする。

例示

FLOOR (3.7)

は,

3

になる。

FLOOR (-3.7)

は,

4

になる。

13.7.40 FRACTION (X)

機能

引数の値を数体系の数として表現したときの小数部を返す。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

X

×

b

e

とする。ここで,

b

及び

e

は,

X

を,

X

の基数をもち指数の値に限界のない数体系の

数として表現したときの

13.4

で定義した値とする。

X

0.0

であるとき,結果の値は

0.0

とする。

X

IEEE

無限

大である場合,結果は無限大になる。

X

IEEE

非数である場合,結果は非数になる。

例示

注記

13.4

に示した数体系の実数について,

FRACTION (3.0)

の値は

0.75

になる。

13.7.41 GET COMMAND ([COMMAND, LENGTH, STATUS])

機能

プログラムが呼び出されたときのコマンド全体を返す。

分類

サブルーチン。

引数

COMMAND

(省略可能) 基本文字型スカラでなければならない。

INTENT (OUT)

引数とする。プログラムが呼び

出されたときのコマンド全体を設定する。コマンドが確定できない場合,すべて空白が代

入される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

272

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

LENGTH

(省略可能) 基本整数型スカラでなければならない。

INTENT (OUT)

引数とする。プログラムが呼び

出されたときの有効コマンド長を設定する。処理系がコマンドの後続空白を許す場合,有

効長には後続空白を含んでよい。コマンド長は

COMMAND

に設定するときに可能などんな

切捨ても補てんも考慮しない。実際,引数

COMMAND

を指定する必要さえない。コマンド長

が確定しない場合,長さとして

0

を設定する。

STATUS

(省略可能) 基本整数型スカラでなければならない。

INTENT (OUT)

引数とする。

COMMAND

引数を指

定して,長さが有効コマンド長より小さい場合,

1

を設定する。 コマンドが回復できな

い失敗の場合,処理系依存の正数を設定する。それ以外の場合,

0

を設定する。

13.7.42 GET COMMAND ARGUMENT (NUMBER [, VALUE, LENGTH, STATUS])

機能

コマンド引数を返す。

分類

サブルーチン。

引数

NUMBER

基本整数型スカラでなければならない。

INTENT (IN)

引数とする。他の引数が情報を与

える対象について,コマンド引数の番号を指定する。

NUMBER

で利用可能な値は,ゼロか

ら組込み手続

COMMAND_ARGUMENT_COUNT

が返す引数の個数の間の値とする。他の値でも

よいが,その場合は結果に次のエラー状態を返す。

 コマンド引数

0

は,処理系がそのような概念の場合,起動されたプログラムのコマンド

名であると定義される。処理系がコマンド名 又は 他のコマンド引数を定義しないときも,

コマンド引数

0

の手続

GET_COMMAND_ARGUMENT

を呼び出してよい。

 残りの引数は処理系の決めた順序で,

1

から引数の個数まで連続的に番号付けられる。

VALUE

(省略可能)

基本文字型スカラでなければならない。

INTENT (OUT)

引数とする。

NUMBER

によって

決められるコマンド引数の値を設定する。コマンド引数の値が決定できない場合,

VALUE

はすべて空白を設定する。

LENGTH

(省略可能) 基本整数型スカラでなければならない。

INTENT (OUT)

引数とする。

NUMBER

によって

決められるコマンド引数の有効長を設定する。処理系がコマンド引数に有意な後続空白を

許す場合,有効長は後続空白を含んでよい。コマンド長は

VALUE

引数に設定するときに可

能であるどのような切捨て,補いも考慮しない。実際,引数

VALUE

を指定する必要さえな

い。コマンド引数長が確定しない場合,長さに

0

を設定する。

STATUS

(省略可能) 基本整数型スカラでなければならない。

INTENT (OUT)

引数とする。

VALUE

引数を指定

して,

NUMBER

によって決められるコマンド引数の有効長より小さい場合,

1

を設定する。

引数が回復できない失敗の場合,処理系依存の正の値を設定する。それ以外の場合,

0

設定する。

注記

13.10

失敗が起こる一つの理由は,

NUMBER

が負であるか,

COMMAND_ARGUMENT_COUNT()

より大きい

ことである。

例示

Program echo

integer :: i

character :: command*32, arg*128

call get_command_argument(0, command)

write (*,*) "Command name is: ", command

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

273

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

do i = 1 , command_argument_count()

call get_command_argument(i, arg)

write (*,*) "Argument ", i, " is ", arg

end do

end program echo

13.7.43 GET ENVIRONMENT VARIABLE (NAME [, VALUE, LENGTH, STATUS,TRIM NAME])

機能

環境変数の値を得る。

分類

サブルーチン。

引数

NAME

基本文字型スカラでなければならない。

INTENT (IN)

引数とする。場合の解釈は処理系

依存とする。

VALUE

(省略可能)

基本文字型スカラでなければならない。

INTENT (OUT)

引数とする。

NAME

によって決め

られる環境変数の値を設定する。環境変数が存在しないか 若しくは 値をもたない場合 又

は 処理系が環境変数を実装していない場合,

VALUE

にはすべて空白を設定する。

LENGTH

(省略可能) 基本整数型スカラでなければならない。

INTENT (OUT)

引数とする。指定した環境変数

が存在し値をもつ場合,

LENGTH

には環境変数の値の長さを設定する。それ以外の場合,

LENGTH

はゼロを設定する。

STATUS

(省略可能) 基本整数型スカラでなければならない。

INTENT (OUT)

引数とする。環境変数が存在す

る場合で,値をもたないとき 又は その値が

VALUE

に正しく設定されたとき,

STATUS

には

ゼロを設定する。引数

VALUE

を指定して長さが環境変数の有効長より短い場合,

STATUS

には

1

を設定する。指定した環境変数が存在しない場合,値

1

を設定する。処理系が環

境変数を実装していない場合,

2

を設定する。他の誤り条件の場合には,

2

より大きい処理

系依存の値を返してよい。

TRIM_NAME

(省略可

能)

論理型スカラでなければならない。

INTENT (IN)

引数とする。処理系が環境変数に後続

空白を許している場合,

TRIM_NAME

を偽として指定したとき,

NAME

中の後続空白は有意

として扱う。それ以外の場合,

NAME

中の後続空白は環境変数の一部としては扱わない。

13.7.44 HUGE (X)

機能

引数と同じ型 及び 同じ種別型パラメタの数体系における最大の数値を返す。

分類

問合せ関数。

引数

X

は,整数型 又は 実数型でなければならない。スカラ 又は 配列とする。

結果の特性

X

と同じ型 及び 同じ種別型パラメタのスカラとする。

結果の値

X

が整数型のとき,結果の値は

r

q

1

とする。

X

が実数型のとき,

(1

b

p

)

b

e

max

とする。ここで

r

q

b

p

及び

e

max

は,

X

と同じ型 及び 同じ種別型パラメタの数体系における

13.4

で定義した値とする。

例示

注記

13.4

に示した数体系の実数

X

について,

HUGE (X)

の値は

(1

2

24

)

×

2

127

になる。

13.7.45 IACHAR (C [, KIND])

機能

ASCII

大小順序における文字の位置を返す。関数

ACHAR

の逆関数になる。

分類

要素別処理関数。

引数

C

長さ

1

の文字型でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

274

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略し

たとき,種別型パラメタは基本整数型のものとする。

結果の値

JIS X 0201

-1997

が規定する符号体系によって定義された大小順序(

ASCII

大小順序)中に

C

がある

場合,結果の値は,その大小順序中の文字

C

の位置とし,不等式

0

IACHAR(C)

127

を満たす。

C

ASCII

大小

順序中にない場合,処理系依存の値を返す。結果の値を大小比較した式の値は,文字列大小比較関数

LGE

LGT

LLE

及び

LLT

の結果と一致する。例えば,処理系が表現可能な任意の文字

C

D

に対して,

LLE (C, D)

が真であると

き,

IACHAR (C) <= IACHAR (D)

は真とする。

例示

IACHAR (’X’)

の値は,

88

になる。

13.7.46 IAND (I, J)

機能

ビットごとの論理積。

分類

要素別処理関数。

引数

I

整数型でなければならない。

J

I

と同じ種別型パラメタの整数型でなければならない。

結果の特性

I

と同じとする。

結果の値

結果の値は,

I

J

をビットごとに組み合わせ,次の真理値表に従って得られる値とする。

I

J

IAND (I, J)

1

1

1

1

0

0

0

1

0

0

0

0

整数値をビット列として解釈する数体系は,

13.3

による。

例示

IAND (1, 3)

の値は,

1

になる。

13.7.47 IBCLR (I, POS)

機能

一つのビットを

0

に設定する。

分類

要素別処理関数。

引数

I

整数型でなければならない。

POS

整数型でなければならず,値は

0

以上,

BIT_SIZE (I)

未満でなければならない。

結果の特性

I

と同じとする。

結果の値

結果の値は,

I

の第

POS

ビットを

0

に設定した値とする。整数値をビット列として解釈する数体系は,

13.3

による。

例示

IBCLR (14, 1)

の値は,

12

になる

3)

V

[ 1

,

2

,

3

,

4 ]

であるとき,

IBCLR (POS=V, I=31)

[ 29

,

27

,

23

,

15 ]

になる。

3)

14

2

1

= 12

に相当する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

275

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.48 IBITS (I, POS, LEN)

機能

ビットの並びを取り出す。

分類

要素別処理関数。

引数

I

整数型でなければならない。

POS

整数型でなければならず,

POS

+

LEN

BIT_SIZE (I)

以下になる非負の値でなければならない。

LEN

整数型であって,値が非負でなければならない。

結果の特性

I

と同じとする。

結果の値

結果の値は,

I

の第

POS

ビットから始まる

LEN

個のビットを右詰めし,残りのビットを

0

にした値とす

る。整数値をビット列として解釈する数体系は,

13.3

による。

例示

IBITS (14, 1, 3)

の値は,

7

になる。

13.7.49 IBSET (I, POS)

機能

一つのビットを

1

に設定する。

分類

要素別処理関数。

引数

I

整数型でなければならない。

POS

整数型であって,

BIT_SIZE (I)

未満の非負の値でなければならない。

結果の特性

I

と同じとする。

結果の値

結果の値は,

I

の第

POS

ビットを

1

に設定した値とする。整数値をビット列として解釈する数体系は,

13.3

による。

例示

IBSET (12, 1)

は,

14

になる

4)

V

[ 1

,

2

,

3

,

4 ]

であるとき,

IBSET (POS=V, I=0)

[ 2

,

4

,

8

,

16 ]

になる。

4)

12 + 2

1

= 14

に相当する。

13.7.50 ICHAR (C [, KIND])

機能

引数にした文字の種別型パラメタに対応する処理系大小順序における文字の位置を返す。関数

CHAR

の逆関数

になる。

分類

要素別処理関数。

引数

C

長さ

1

の文字型であって,値が処理系で表現可能な文字でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。

結果の値

結果の値は,

C

の種別型パラメタに対応する処理系大小順序中の

C

の位置とし,

0

ICHAR (C)

n

1

の範

囲の値とする。ここで

n

は,その処理系大小順序における文字の個数とする。処理系が表現可能な任意の文字

C

及び

D

対して,

ICHAR (C) <= ICHAR (D)

が真のとき,かつ このときに限り

C <= D

が真になり,

ICHAR (C) == ICHAR (D)

が真のとき,かつ このときに限り

C == D

が真になる。

例示

基本文字型に

ASCII

大小順序を用いている処理系では,

ICHAR (’X’)

の値は

88

になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

276

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.51 IEOR (I, J)

機能

ビットごとの排他的論理和。

分類

要素別処理関数。

引数

I

整数型でなければならない。

J

I

と同じ種別型パラメタの整数型でなければならない。

結果の特性

I

と同じとする。

結果の値

結果の値は,ビットごとに

I

J

を組み合わせ,次の真理値表に従って得られる値とする。

I

J

IEOR (I, J)

1

1

0

1

0

1

0

1

1

0

0

0

整数値をビット列として解釈する数体系は,

13.3

による。

例示

IEOR (1, 3)

は,

2

になる。

13.7.52 INDEX (STRING, SUBSTRING [, BACK, KIND])

機能

文字列中の部分列の開始位置を返す。

分類

要素別処理関数。

引数

STRING

文字型でなければならない。

SUBSTRING

STRING

と同じ種別型パラメタの文字型でなければならない。

BACK

(省略可能)

論理型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。

結果の値

場合

1

BACK

に偽を指定するか 又は 省略した場合,結果の値は,

STRING (I : I + LEN (SUBSTRING) -

1)

=

SUBSTRING

となる

I

の正の最小値とし,この値がないときは

0

とする。

LEN (STRING)

<

LEN (SUBSTRING)

であるときは

0

を返し,

LEN (SUBSTRING)

= 0

であるときは

1

を返す。

場合

2

BACK

に真を指定した場合,結果の値は,

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

を返す。

例示

INDEX (’FORTRAN’, ’R’)

の値は,

3

になる。

INDEX (’FORTRAN’, ’R’, BACK=.TRUE.)

の値は,

5

になる。

13.7.53 INT (A [, KIND])

機能

整数型に変換する(切捨て)。

分類

要素別処理関数。

引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

277

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

A

整数型,実数型 若しくは 複素数型,又は 非

10

進定数表現でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。

結果の値

場合

1

A

が整数型の場合,

INT (A)

の値は

A

とする。

場合

2

A

が実数型の場合,

|

A

|

<

1

であるとき,

INT (A)

0

とする。

|

A

| ≥

1

であるとき,

INT (A)

の値

A

の絶対値以下で最大の整数に

A

の符号を付けたものとする。

場合

3

A

が複素数型の場合,

INT (A)

の値は

= INT(REAL(A, KIND(A)))

とする。

場合

4

A

が非

10

進定数表現の場合,処理系が提供する最大の

10

進指数範囲による表現方法で規定する種別

付きの符号なし整定数表現とみなされる。

例示

INT (-3.7)

の値は,

3

になる。

13.7.54 IOR (I, J)

機能

ビットごとの論理和。

分類

要素別処理関数。

引数

I

整数型でなければならない。

J

I

と同じ種別型パラメタの整数型でなければならない。

結果の特性

I

と同じとする。

結果の値

結果の値は,ビットごとに

I

J

を組み合わせ,次の真理値表に従って得られる値とする。

I

J

IOR (I, J)

1

1

1

1

0

1

0

1

1

0

0

0

整数値をビット列として解釈する数体系は,

13.3

による。

例示

IOR (5, 3)

の値は,

7

になる。

13.7.55 ISHFT (I, SHIFT)

機能

論理けた移動。

分類

要素別処理関数。

引数

I

整数型でなければならない。

SHIFT

整数型であって,絶対値が

BIT_SIZE (I)

以下でなければならない。

結果の特性

I

と同じとする。

結果の値

結果の値は,ビットを

SHIFT

個だけけた(桁)移動して得られる値とする。

SHIFT

が正である場合,け

た移動は左方向に行う。

SHIFT

が負である場合,けた移動は右方向に行う。

SHIFT

0

である場合,けた移動は行わ

ない。左端 又は 右端から外にはみ出したビットは捨てられ,反対側の端に

0

が入る。整数値をビット列として解釈

する数体系は,

13.3

による。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

278

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

例示

ISHFT (3, 1)

の値は,

6

になる

5)

5)

3

×

2

1

= 6

に相当する。

13.7.56 ISHFTC (I, SHIFT [, SIZE])

機能

右端のビット並びの循環けた移動を行う。

分類

要素別処理関数。

引数

I

整数型でなければならない。

SHIFT

整数型であって,絶対値が

SIZE

以下でなければならない。

SIZE

(省略可能)

整数型でなければならない。

SIZE

の値は,正でなければならず,

BIT_SIZE (I)

以下でな

ければならない。

SIZE

を省略したとき,

BIT_SIZE (I)

の値を指定したものとみなす。

結果の特性

I

と同じとする。

結果の値

結果の値は,

I

の右端の

SIZE

個のビットを

SHIFT

個だけ循環けた(桁)移動して得られる値とする。

SHIFT

が正である場合,循環けた移動は左方向に行う。

SHIFT

が負である場合,循環けた移動は右方向に行う。

SHIFT

0

である場合,循環けた移動は行わない。どのビットも捨てられることはない。循環けた移動しないビットは,変

わらない。整数値をビット列として解釈する数体系は,

13.3

による。

例示

ISHFTC (3, 2, 3)

の値は,

5

になる。

13.7.57 IS IOSTAT END (I)

機能

ファイル終了条件が印付けられた値か否かを決定する。

分類

要素別処理関数。

引数

I

は,整数型でなければならない。

結果の特性

基本論理型とする。

結果の値

結果の値は,

I

がファイル終了条件を示す

IOSTAT

指定子

(

9.10.4

)

でのスカラ整変数の値であるとき,

かつ このときに限り,真とする。

13.7.58 IS IOSTAT EOR (I)

機能

記録終了条件が印付けられた値か否かを決定する。

分類

要素別処理関数。

引数

I

は,整数型でなければならない。

結果の特性

基本論理型とする。

結果の値

結果の値は,

I

が記録終了条件を示す

IOSTAT

指定子

(

9.10.4

)

でのスカラ整変数の値であるとき,かつ

このときに限り,真とする。

13.7.59 KIND (X)

機能

X

の種別型パラメタ値を返す。

分類

問合せ関数。

引数

X

は,どの組込み型でもよい。スカラ 又は 配列とする。

結果の特性

基本整数型スカラとする。

結果の値

結果の値は,

X

の種別型パラメタ値とする。

例示

KIND (0.0)

の値は,基本実数型の種別型パラメタ値になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

279

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.60 LBOUND (ARRAY [, DIM, KIND])

機能

配列のすべての次元の下限 又は 指定した次元の下限を返す。

分類

問合せ関数。

引数

ARRAY

どの型でもよい。スカラであってはならない。空状態のポインタ 又は 割り付けられてい

ない割付け実体であってはならない。

DIM

(省略可能)

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。結果は,

DIM

を指定したときスカラとし,省略したときは大きさ

n

1

次元配列とする。ここで

n

は,

ARRAY

の次元数とする。

結果の値

場合

1

ARRAY

が全体配列 又は 配列構造体成分であって,次元数

DIM

の大きさ引継ぎ配列 又は 配列

ARRAY

の第

DIM

次元の寸法が

0

でない場合,

LBOUND (ARRAY, DIM)

は,

ARRAY

の添字

DIM

の下限値とす

るそれ以外のときは,

1

とする。

場合

2

LBOUND (ARRAY)

i

番目

(

i

= 1

,

2

, . . . , n

)

の要素の値は,

LBOUND (ARRAY,

i

)

とする。ここで

n

は,

ARRAY

の次元数とする。

例示

A

が次の文で宣言されているとき,

LBOUND (A)

の値は

[ 2

,

7 ]

になり,

LBOUND (A, DIM=2)

の値は

7

になる。

REAL

A (2:3, 7:10)

13.7.61 LEN (STRING [, KIND])

機能

文字型要素の長さを返す。

分類

問合せ関数。

引数

STRING

文字型であって,スカラ 又は 配列でなければならない。空状態のポインタ 又は 割り付け

られていない割付け実体であるとき,その文字長パラメタは無指定であってはならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型スカラとする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省

略したとき,種別型パラメタは基本整数型のものとする。

結果の値

結果の値は,

STRING

がスカラである場合,

STRING

中の文字数とし,

STRING

が配列である場合,

STRING

の要素中の文字数とする。

例示

C

が次の文で宣言されているとき,

LEN (C)

の値は

11

になる。

CHARACTER (11) C (100)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

280

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.62 LEN TRIM (STRING [, KIND])

機能

末尾の空白を除いた文字引数の長さを返す。

分類

要素別処理関数。

引数

STRING

文字型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。

結果の値

結果の値は,

STRING

の末尾の空白をすべて取り除いた後,残った文字の個数とする。引数が空白以外の

文字を一つももたないとき,結果の値は

0

とする。

例示

LEN_TRIM(’ A B ’)

の値は,

4

になる。

LEN_TRIM(’

’)

の値は,

0

になる。

13.7.63 LGE (STRING A, STRING B)

機能

ASCII

大小順序に基づいて文字列が辞書順でもう一つの文字列以上であるかどうかを判定する。

分類

要素別処理関数。

引数

STRING_A

基本文字型でなければならない。

STRING_B

基本文字型でなければならない。

結果の特性

基本論理型とする。

結果の値

文字列の長さが等しくない場合,短いほうの文字列の右側に,長いほうの文字列の長さまで空白があるも

のとみなして,比較を行う。どちらかの文字列に

ASCII

文字集合に含まれない文字があったときの結果は,処理系依

存とする。結果の値は,文字列が等しいか 又は

ASCII

大小順序に基づいて辞書順で

STRING_A

STRING_B

の後に

なるとき真とし,それ以外のとき偽とする。

注記

13.11

STRING_A

及び

STRING_B

の両方とも文字列の長さが

0

である場合,結果の値は真とする。

例示

LGE (’ONE’, ’TWO’)

の値は,偽になる。

13.7.64 LGT (STRING A, STRING B)

機能

ASCII

大小順序に基づいて文字列がもう一つの文字列より辞書順で大きいかどうかを判定する。

分類

要素別処理関数。

引数

STRING_A

基本文字型でなければならない。

STRING_B

基本文字型でなければならない。

結果の特性

基本論理型とする。

結果の値

文字列の長さが等しくない場合,短いほうの文字列の右側に,長いほうの文字列の長さまで空白があるも

のとみなして,比較を行う。どちらかの文字列に

ASCII

文字集合に含まれない文字があったときの結果は,処理系依

存とする。結果の値は,

ASCII

大小順序に基づいて辞書順で

STRING_A

STRING_B

の後になるとき真とし,それ以

外のとき偽とする。

注記

13.12

STRING_A

及び

STRING_B

の両方とも文字列の長さが

0

である場合,結果の値は,偽とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

281

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

例示

LGT (’ONE’, ’TWO’)

の値は偽になる。

13.7.65 LLE (STRING A, STRING B)

機能

ASCII

大小順序に基づいて文字列が辞書順でもう一つの文字列以下かどうかを判定する。

分類

要素別処理関数。

引数

STRING_A

基本文字型でなければならない。

STRING_B

基本文字型でなければならない。

結果の特性

基本論理型とする。

結果の値

文字列の長さが等しくない場合,短いほうの文字列の右側に,長いほうの文字列の長さまで空白があるも

のとみなして,比較を行う。どちらかの文字列に

ASCII

文字集合に含まれない文字があったときの結果は,処理系依

存とする。結果の値は,文字列が等しいか 又は

ASCII

大小順序に基づいて辞書順で

STRING_A

STRING_B

の前に

なるとき真とし,それ以外のとき偽とする。

注記

13.13

STRING_A

及び

STRING_B

の両方とも文字列の長さが

0

である場合,結果の値は,真とする。

例示

LLE (’ONE’, ’TWO’)

の値は,真になる。

13.7.66 LLT (STRING A, STRING B)

機能

ASCII

大小順序に基づいて文字列がもう一つの文字列より辞書順で小さいかどうかを判定する。

分類

要素別処理関数。

引数

STRING_A

基本文字型でなければならない。

STRING_B

基本文字型でなければならない。

結果の特性

基本論理型とする。

結果の値

文字列の長さが等しくない場合,短いほうの文字列の右側に,長いほうの文字列の長さまで空白があるも

のとみなして,比較を行う。どちらかの文字列に

ASCII

文字集合に含まれない文字があったときの結果は,処理系依

存とする。結果の値は,

ASCII

大小順序に基づいて辞書順で

STRING_A

STRING_B

の前になるとき真とし,それ以

外のとき偽とする。

注記

13.14

STRING_A

及び

STRING_B

の両方とも文字列の長さが

0

である場合,結果の値は,偽とする。

例示

LLT (’ONE’, ’TWO’)

の値は真になる。

13.7.67 LOG (X)

機能

自然対数。

分類

要素別処理関数。

引数

X

は,実数型 又は 複素数型でなければならない。

X

が実数型のとき,値は正でなければならない。

X

が複素

数型のとき,値は

(0.0, 0.0)

であってはならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

log

e

X

の処理系依存の近似値とする。複素数型の結果の値は,

π < ω

π

の範囲にある虚

ω

をもつ主値とする。

X

の実部が負であって

X

の虚部がゼロである場合,

X

の虚部が正の実数ゼロ 又は 処理系が

正の実数ゼロと負の実数ゼロとを区別できないとき,結果の虚部は

π

とし,

X

の虚部が負の実数ゼロであるとき,結

果の虚部は

π

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

282

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

例示

LOG (10.0)

の値は,

2.3025851

(近似値)になる。

13.7.68 LOG10 (X)

機能

常用対数。

分類

要素別処理関数。

引数

X

は,実数型であって,値が正でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

log

10

X

の処理系依存の近似値とする。

例示

LOG10 (10.0)

の値は,

1.0

(近似値)になる。

13.7.69 LOGICAL (L [, KIND])

機能

論理型の種別型パラメタを変換する。

分類

要素別処理関数。

引数

L

論理型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

論理型。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略したとき,

種別型パラメタは,基本論理型のものとする。

結果の値

結果の値は,

L

の値とする。

例示

LOGICAL (L .OR. .NOT. L)

の結果の値は,真になる。結果は,変数

L

の種別型パラメタによらず,基本論

理型になる。

13.7.70 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

の最初(又は ただ一つ)の次元

の寸法は,

MATRIX_A

の最後(又は ただ一つ)の次元の寸法に等しくなければならない。

結果の特性

引数が数値型のとき,結果の型 及び 種別型パラメタは,

7.1.4.2

で演算子

*

に対して示したとおりに

引数の数値型によって決まる。引数が論理型のとき,結果は,

7.1.4.2

で演算子

.AND.

に対して示したとおりに引数

の種別型パラメタをもつ論理型とする。結果の形状は,次のとおり引数の形状による。

場合

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

)

とする。

結果の値

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

283

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

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(:))

とする。

例示

A

及び

B

は,行列


1

2

3

2

3

4


及び


1

2

2

3

3

4


であるとし,

X

及び

Y

は,ベクトル

[ 1

,

2 ]

及び

[ 1

,

2

,

3 ]

あるとする。

場合

1

MATMUL (A, B)

の結果は,行列と行列の積

AB

になり,値


14

20

20

29


をもつ。

場合

2

MATMUL (X, A)

の結果は,ベクトルと行列の積

XA

になり,値

[ 5

,

8

,

11 ]

をもつ。

場合

3

MATMUL (A, Y)

の結果は,行列とベクトルの積

AY

になり,値

[ 14

,

20 ]

をもつ。

13.7.71 MAX (A1, A2 [, A3, . . . ])

機能

最大値を選ぶ。

分類

要素別処理関数。

引数

引数は,すべて同じ整数型,実数型,又は 文字型でなければならず,すべて同じ種別型パラメタをもたなけ

ればならない。

結果の特性

結果の型 及び 種別型パラメタは,引数のものと同じとする。引数が文字型のとき,結果の長さは最も

長い引数の長さとする。

結果の値

結果の値は,最大の引数の値とする。引数が文字型のとき,結果は組込み関係演算子の適用によって選択

される値になる。すなわち,引数の種別型パラメタによる文字の大小順序が適用される。選択された引数が最も長い

引数より短い場合,結果は最も長い引数の長さ分だけ右に空白を詰めて広げられる。

例示

MAX (-9.0, 7.0, 2.0)

の値は,

7.0

になる。

MAX ("Z", "BB")

の値は,

"Z"

になる。

MAX ((/"A", "Z"/),

(/"BB", "Y"/))

の値は

(/"BB", "Z"/)

になる。

13.7.72 MAXEXPONENT (X)

機能

引数と同じ型 及び 同じ種別型パラメタの数体系で最大の指数を返す。

分類

問合せ関数。

引数

X

は,実数型でなければならない。スカラ 又は 配列とする。

結果の特性

基本整数型スカラとする。

結果の値

結果の値は,

X

と同じ型 及び 同じ種別型パラメタの数体系における

13.4

で定義した値

e

max

とする。

例示

注記

13.4

に示した数体系の実数

X

について,

MAXEXPONENT (X)

の値は,

127

になる。

13.7.73 MAXLOC (ARRAY, DIM [, MASK, KIND])

又は

MAXLOC (ARRAY [, MASK, KIND])

機能

MASK

によって指定した

ARRAY

の要素のうち,

DIM

番目の次元について最大の値をもっている最初の要素の位

置を調べる。

分類

変形関数。

引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

284

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ARRAY

整数型, 実数型,又は 文字型でなければならず,スカラであってはならない。

DIM

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

MASK

(省略可能)

論理型でなければならず,

ARRAY

と形状適合しなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。

DIM

を省略するときは,

ARRAY

の次元数に等しい大きさの

1

次元

配列とする。それ以外のとき,結果は

n

1

次元配列とし,その形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

とする。こ

こで

(

d

1

, d

2

, . . ., d

n

)

は,

ARRAY

の形状とする。

結果の値

場合

1

MAXLOC (ARRAY)

の結果は,

ARRAY

のすべての要素の最大値に等しい要素の各次元の添字値を要素と

する

1

次元配列とする。返された

i

番目の添字は,

1

から

e

i

の範囲の値とする。ここで

e

i

は,

ARRAY

i

番目の次元の寸法とする。

2

個以上の要素が最大値になるとき,添字が返される要素は配列要素

順序で最初の要素とする。

ARRAY

が大きさゼロであるとき,結果のすべての要素はゼロとする。

場合

2

MAXLOC (ARRAY, MASK = MASK)

の結果は,

MASK

中の真である要素に対応する

ARRAY

のすべての

要素の最大値に等しい要素の各次元の添字値を要素とする

1

次元配列とする。返された

i

番目の添字

は,

1

から

e

i

の範囲の値とする。ここで

e

i

は,

ARRAY

i

番目の次元の寸法とする。

2

個以上の要

素が最大値になるとき,添字が返される要素は配列要素順序で最初の要素とする。

ARRAY

が大きさ

ゼロであるか,又は

MASK

のすべての要素の値が偽であるとき,結果のすべての要素はゼロとする。

場合

3

ARRAY

1

次元配列のとき,

MAXLOC (ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の結果は,

MAXLOC

(ARRAY

[

, MASK = MASK

]

)

の最初の要素の値と等しいスカラとする。

2

次元以上のとき,

MAXLOC

(ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の要素

(

s

1

, s

2

, . . ., s

DIM

1

, s

DIM

+1

, . . ., s

n

)

の値は,

MAXLOC

(ARRAY (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

), DIM = 1

[

, MASK = MASK (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

]

)

とする。

ARRAY

が文字型のとき,結果の値は組込み関係演算子の適用によって選択される値になる。すなわち,引数の種別型

パラメタによる文字の大小順序が適用される。

例示

場合

1

MAXLOC ((/ 2, 6, 4, 6 /))

の値は,

[ 2 ]

になる。

場合

2

A

の値が


0

5

8

3

3

4

1

2

1

5

6

4


であるとき,

MAXLOC (A, MASK = A < 6)

の結果は

[ 3

,

2 ]

になる。

注記

A

の下限の宣言によらない。

場合

3

MAXLOC ((/ 5, -9, 3 /), DIM = 1)

の値は,

1

になる。

B

の値が


1

3

9

2

2

6


であるとき,

MAXLOC (B, DIM = 1)

の値は

[ 2

,

1

,

2 ]

になり,

MAXLOC (B, DIM = 2)

の値は

[ 2

,

3 ]

になる。

注記

B

の下限の宣言によらない。

13.7.74 MAXVAL (ARRAY, DIM [, MASK])

又は

MAXVAL (ARRAY [, MASK])

機能

DIM

番目の次元について,

MASK

中の真である要素に対応した

ARRAY

の要素の最大値を調べる。

分類

変形関数。

引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

285

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ARRAY

整数型, 実数型,又は 文字型でなければならず,スカラであってはならない。

DIM

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

MASK

(省略可能)

論理型でなければならず,

ARRAY

と形状適合しなければならない。

結果の特性

結果は,

ARRAY

と同じ型 及び 型パラメタとする。

DIM

が省略されている ときは,スカラとする。そ

れ以外のとき,結果は

n

1

次元とし,形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

とする。ここで

(

d

1

, d

2

, . . ., d

n

)

は,

ARRAY

の形状とする。

結果の値

場合

1

ARRAY

が大きさゼロでないときは,

MAXVAL (ARRAY)

の結果の値は,

ARRAY

の全要素中の最大値と

する。

ARRAY

が大きさゼロで整数型 又は 実数型であるとき結果の値は,

ARRAY

の型 及び 種別型パ

ラメタの数体系に対して処理系が定義している絶対値が最も大きい負の値とする。

ARRAY

が大きさ

ゼロで文字型であるときの結果の値は,各文字が

CHAR (0, KIND = KIND (ARRAY))

と等しい長さ

LEN (ARRAY)

の文字列の値とする。

場合

2

MAXVAL (ARRAY, MASK = MASK)

の結果の値は,

MAXVAL (PACK (ARRAY, MASK))

とする。

場合

3

MAXVAL (ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の結果の値は,

MAXVAL (ARRAY

[

, MASK = MASK

]

)

とする。

2

次元以上のとき,

MAXVAL (ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の要素

(

s

1

, s

2

, . . ., s

DIM

1

,

s

DIM

+1

, . . ., s

n

)

の 値 は ,

MAXVAL (ARRAY (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

[

, MASK =

MASK (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

]

)

とする。

ARRAY

が文字型のとき,結果の値は組込み関係演算子の適用によって選択される値になる。すなわち,引数の種別

型パラメタによる文字の大小順序が適用される。

例示

場合

1

MAXVAL ((/ 1, 2, 3 /))

の値は,

3

になる。

場合

2

MAXVAL (C, MASK = C < 0.0)

の値は,

C

の負の要素中の最大値になる。

場合

3

配列

B


1

3

5

2

4

6


であるとき,

MAXVAL (B, DIM = 1)

の値は

[ 2

,

4

,

6 ]

になり,

MAXVAL (B,

DIM = 2)

の値は

[ 5

,

6 ]

になる。

13.7.75 MERGE (TSOURCE, FSOURCE, MASK)

機能

MASK

の値に従っていずれか一方の値を選択する。

分類

要素別処理関数。

引数

TSOURCE

どの型でもよい。

FSOURCE

TSOURCE

と同じ型 及び 同じ種別型パラメタでなければならない。

MASK

論理型でなければならない。

結果の特性

TSOURCE

と同じとする。

結果の値

要素ごとに,

MASK

が真のとき,結果の値は

TSOURCE

とし,

MASK

が偽のとき,結果の値は

FSOURCE

する。

例示

TSOURCE

が配列


1

6

5

2

4

6


であり,

FSOURCE

が配列


0

3

2

7

4

8


であり,

MASK

が配列


T

.

T

.

.

T


であ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

286

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

る(ここで

T

は真を表し,

“ . ”

は偽を表すとする。)とき,

MERGE (TSOURCE, FSOURCE, MASK)

の値は,


1

3

5

7

4

6


になる。

MERGE (1.0, 0.0, K

>

0)

の値は,

K

= 5

のとき

1.0

になり,

K

=

2

のとき

0.0

になる。

13.7.76 MIN (A1, A2 [, A3, . . . ])

機能

最小値を選ぶ。

分類

要素別処理関数。

引数

引数は,すべて同じ整数型,実数型 又は 文字型でなければならず,すべて同じ種別型パラメタでなければな

らない。

結果の特性

結果の型 及び 種別型パラメタは,引数のものと同じとする。引数が文字型のとき,結果の長さは最も

長い引数の長さとする。

結果の値

結果の値は,最小の引数の値とする。引数が文字型のとき,結果は組込み関係演算子の適用によって選択

される値になる。すなわち,引数の種別型パラメタによる文字の大小順序が適用される。選択された引数が最も長い

引数より短い場合,結果は最も長い引数の長さ分だけ右に空白を詰めて広げられる。

例示

MIN (-9.0, 7.0, 2.0)

の値は,

9

.

0

になり,

MIN ("A", "YY")

の値は,

"A"

になり,

MIN ((/"Z", "A"/),

(/"YY", "B"/))

の値は,

(/"YY", "A"/)

になる。

13.7.77 MINEXPONENT (X)

機能

引数と同じ型 及び 同じ種別型パラメタの数体系で最小の(絶対値が最も大きい負の)指数を返す。最小指数

分類

問合せ関数。

引数

X

は,実数型でなければならない。スカラ 又は 配列とする。

結果の特性

基本整数型スカラとする。

結果の値

結果の値

emin

は,

X

と同じ型 及び 同じ種別型パラメタの数体系における

13.4

で定義した値

e

min

とする。

例示

注記

13.4

に示した数体系の実数

X

について,

MINEXPONENT (X)

の値は,

126

になる。

13.7.78 MINLOC (ARRAY, DIM [, MASK, KIND])

又は

MINLOC (ARRAY [, MASK, KIND])

機能

MASK

によって指定された

ARRAY

の要素のうち,

DIM

番目の次元について最小の値をもっている最初の要素の

位置を調べる。

分類

変形関数。

引数

ARRAY

整数型,実数型 又は 文字型でなければならず,スカラであってはならない。

DIM

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

MASK

(省略可能)

論理型でなければならず,

ARRAY

と形状適合しなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。

DIM

を省略するときは,

ARRAY

の次元数に等しい大きさの

1

次元

配列とする。それ以外のとき,結果は

n

1

次元配列とし,その形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

とする。こ

こで

(

d

1

, d

2

, . . ., d

n

)

は,

ARRAY

の形状とする。

結果の値

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

287

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

1

MINLOC (ARRAY)

の結果は,

ARRAY

のすべての要素の最小値に等しい要素の各次元の添字値を要素と

する

1

次元配列とする。返された

i

番目の添字は,

1

から

e

i

の範囲の値とする。ここで

e

i

は,

ARRAY

i

番目の次元の寸法とする。

2

個以上の要素が最小値になるとき,添字が返される要素は配列要素

順序で最初の要素とする。

ARRAY

が大きさゼロであるとき,結果のすべての要素はゼロとする。

場合

2

MINLOC (ARRAY, MASK = MASK)

の結果は,

MASK

中の真である要素に対応する

ARRAY

のすべての

要素の最小値に等しい要素の各次元の添字値を要素とする

1

次元配列とする。返された

i

番目の添

字は,

1

から

e

i

の範囲の値とする。ここで

e

i

は,

ARRAY

i

番目の次元の寸法とする。

2

個以上の

要素が最小値になるとき,添字が返される要素は配列要素順序で最初の要素とする。要素がないとき

(すなわち,

ARRAY

が大きさゼロであるか,又は

MASK

のすべての要素の値が偽であるとき),結果

の すべての要素はゼロとする。

場合

3

ARRAY

1

次元配列のとき,

MINLOC (ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の結果は,

MINLOC

(ARRAY

[

, MASK = MASK

]

)

の最初の要素の値と等しいスカラとする。

2

次元以上のとき,

MINLOC

(ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の要素

(

s

1

, s

2

, . . ., s

DIM

1

, s

DIM

+1

, . . ., s

n

)

の値は,

MINLOC

(ARRAY (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

), DIM = 1

[

, MASK = MASK (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

]

)

とする。

ARRAY

が文字型のとき,結果の結果は組込み関係演算子の適用によって選択される値になる。すなわち,引数の種別

型パラメタによる文字の大小順序が適用される。

例示

場合

1

MINLOC ((/ 4, 3, 6, 3 /))

の値は,

[ 2 ]

になる。

場合

2

A

の値が配列


0

5

8

3

3

4

1

2

1

5

6

4


であるとき,

MINLOC (A, MASK = A >

4

)

の結果は

[ 1

,

4 ]

なる。

注記

A

の下限が

1

以外に宣言されていてもこうなる。

場合

3

MINLOC ((/ 5, -9, 3 /), DIM = 1)

の値は,

2

になる。

B

の値が


1

3

9

2

2

6


であるとき,

MINLOC (B, DIM = 1)

の値は

[ 1

,

2

,

1 ]

になり,

MINLOC (B, DIM = 2)

の値は

[ 3

,

1 ]

になる。

注記

B

の下限が

1

以外に宣言されていてもこうなる。

13.7.79 MINVAL (ARRAY, DIM [, MASK])

又は

MINVAL (ARRAY [, MASK])

機能

DIM

番目の次元について,

MASK

中の真である要素に対応した

ARRAY

の要素の最小値を調べる。

分類

変形関数。

引数

ARRAY

整数型,実数型 又は 文字型でなければならず,スカラであってはならない。

DIM

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

MASK

(省略可能)

論理型でなければならず,

ARRAY

と形状適合しなければならない。

結果の特性

結果は,

ARRAY

と同じ型 及び 同じ型パラメタとする。

DIM

が省略されているときは,スカラとする。

それ以外のとき,結果は

n

1

次元とし,形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

とする。ここで

(

d

1

, d

2

, . . ., d

n

)

は,

ARRAY

の形状とする。

結果の値

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

288

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

1

MINVAL (ARRAY)

の結果の値は,

ARRAY

が大きさゼロでないときは,

ARRAY

の全要素中の最小値と

する。

ARRAY

が大きさゼロであって整数型 又は 実数型であるときは,結果の値は

ARRAY

の型 及び

種別型パラメタの数体系に対して処理系が定義している正の最大値とする。

場合

2

MINVAL (ARRAY, MASK = MASK)

の結果の値は,

MINVAL (PACK (ARRAY, MASK))

とする。

場合

3

ARRAY

1

次元配列のとき,

MINVAL (ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の結果の値は,

MINVAL

(ARRAY

[

, MASK = MASK

]

)

とする。

2

次元以上のとき,

MINVAL (ARRAY, DIM = DIM

[

, MASK =

MASK

]

)

の要素

(

s

1

, s

2

, . . ., s

DIM

1

, s

DIM

+1

, . . ., s

n

)

の値は,

MINVAL (ARRAY (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

[

, MASK = MASK (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

]

)

とする。

ARRAY

が文字型のとき,結果の結果は組込み関係演算子の適用によって選択される値になる。すなわち,引数の種別

型パラメタによる文字の大小順序が適用される。

例示

場合

1

MINVAL ((/ 1, 2, 3 /))

の値は,

1

になる。

場合

2

MINVAL (C, MASK = C > 0.0)

の値は,

C

の正の要素中の最小値になる。

場合

3

配列

B


1

3

5

2

4

6


であるとき,

MINVAL (B, DIM = 1)

の値は

[ 1

,

3

,

5 ]

になり,

MINVAL (B,

DIM = 2)

の値は

[ 1

,

2 ]

になる。

13.7.80 MOD (A, P)

機能

余り関数。

分類

要素別処理関数。

引数

A

整数型 又は 実数型でなければならない。

P

A

と同じ型 及び 同じ種別型パラメタでなければならない。

P

は,ゼロであってはならない。

結果の特性

A

と同じとする。

結果の値

結果の値は

A

INT (A/P)

×

P

とする。

例示

MOD (3.0, 2.0)

の値は,

1.0

(近似値)になる。

MOD (8, 5)

の値は,

3

になる。

MOD (-8, 5)

の値は,

3

になる。

MOD (8, -5)

の値は,

3

になる。

MOD (-8, -5)

の値は,

3

になる。

13.7.81 MODULO (A, P)

機能

剰余関数。

分類

要素別処理関数。

引数

A

整数型 又は 実数型でなければならない。

P

A

と同じ型 及び 同じ種別型パラメタでなければならない。

P

は,ゼロであってはならない。

結果の特性

A

と同じとする。

結果の値

場合

1

A

が整数型であって

MODULO (A, P)

の結果の値は

A

=

Q

×

P

+

R

となる値

R

とする。

Q

は,

P

>

0

とき,

0

R

<

P

を満たし,

P

<

0

のとき,

P

<

R

0

を満たす整数とする。

場合

2

A

が実数型であって

MODULO (A, P)

の結果の値は

A

FLOOR (A/P)

×

P

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

289

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

例示

MODULO (8, 5)

の値は,

3

になる。

MODULO (-8, 5)

の値は,

2

になる。

MODULO (8, -5)

の値は,

2

にな

る。

MODULO (-8, -5)

の値は,

3

になる。

13.7.82 MOVE ALLOC (FROM, TO)

機能

ある割付け実体から他の割付け実体へ割付けを移動する。

分類

純粋手続。

引数

FROM

どの型 及び どの次元数であってもよい。割付け実体でなければならない。

INTENT (INOUT)

数とする。

TO

FROM

と同じ次元数で型が適合

(

5.1.1.2

)

していなければならない。割付け実体でなければならない。

FROM

が多相的であるときは,多相的でなければならない。

INTENT (OUT)

引数とする。

TO

の宣

言時の型の無指定でない各パラメタは,

FROM

の宣言時の型の対応するパラメタと同じ値でなければ

ならない。

FROM

MOVE_ALLOC

の入口で割り付けられていないとき,

TO

の割付け状態は,未割付けとなる。それ以外のとき,

TO

は,

FROM

MOVE_ALLOC

の入口でもっている動的な型,型パラメタ,配列上下限,及び 同一の値をもって割り付

けられる。

TO

TARGET

属性をもつとき,

MOVE_ALLOC

の入口で

FROM

と結合しているどのポインタも対応して

TO

と結合

する。

TO

TARGET

属性をもたないとき,入口で

FROM

と結合しているどのポインタの結合状態も不定となる。

FROM

の割付け状態は,未割付けになる。

例示

REAL,ALLOCATABLE :: GRID(:),TEMPGRID(:)

...

ALLOCATE(GRID(-N:N))

! GRID

の初期割付け

...

!

中点をもつようにするための

GRID

再割付け

ALLOCATE(TEMPGRID(-2*N:2*N)) !

より大きい格子を割り付ける

TEMPGRID(::2)=GRID

!

新しい位置に値を配置する

CALL MOVE_ALLOC(TO=GRID,FROM=TEMPGRID)

! TO

INTENT(OUT)

なので古い格子は解放され,

! GRID

は新しい格子の割付けに引き継がれる

注記

13.15

割付け実体の実装は,割り付けた記憶域を示す記述子を典型的に含むことになる。したがっ

て,

MOVE_ALLOC

FROM

の記述子の内容を

TO

の記述子に移すこと 及び

FROM

の記述子を解放する

ことによって実装することができる。

13.7.83 MVBITS (FROM, FROMPOS, LEN, TO, TOPOS)

機能

一つのデータ実体から他のデータ実体にビット列を複写する。

分類

要素別処理サブルーチン。

引数

FROM

整数型でなければならない。

INTENT (IN)

引数とする。

FROMPOS

非負の整数型でなければならない。

INTENT (IN)

引数とする。

FROMPOS

+

LEN

は,

BIT SIZE (FROM)

以下でなければならない。整数値をビット列として解釈する数体系は,

13.3

による。

LEN

非負の整数型でなければならない。

INTENT (IN)

引数とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

290

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

TO

FROM

と同じ種別型パラメタ値をもつ整数型の変数でなければならず,

FROM

と結合されていてもよ

(

12.7.3

)

INTENT (INOUT)

引数とする。

FROM

の位置

FROMPOS

から始まる長さ

LEN

のビッ

ト列を

TO

の位置

TOPOS

に複写する。

TO

の他のどのビットも変更されない。戻る時,

TOPOS

から

始まる

TO

LEN

ビットは,呼出し時に

FROMPOS

から始まる

FROM

LEN

ビットがもっていた値

に等しくなる。整数値をビット列として解釈する数体系は,

13.3

による。

TOPOS

非負の整数型でなければならない。

INTENT (IN)

引数とする。

TOPOS

+

LEN

は,

BIT_SIZE (TO)

以下でなければならない。

例示

TO

の初期値が

6

であるとき,文

CALL MVBITS (7, 2, 2, TO, 0)

を実行すると,

TO

の値は

5

になる。

13.7.84 NEAREST (X, S)

機能

与えられた方向で最も近い(隣の)処理系が表現可能な数を返す。

分類

要素別処理関数。

引数

X

実数型でなければならない。

S

実数型でなければならず,

0.0

であってはならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

X

とは異なる,

S

と同符号の無限大の方向で最も

X

に近い,処理系が表現可能な数とする。

例示

13.4

に示した数体系の処理系では,

NEAREST (3.0, 2.0)

の値は,

3 + 2

22

になる。

注記

13.16

他の浮動小数点数操作関数と異なり,

NEAREST

は数体系ではなく処理系が表現可能な数につ

いて操作する。多くの処理系において,数体系内で隣接する

2

数の間に処理系が表現可能な数が存在

する。

13.7.85 NEW LINE (A)

機能

改行文字を返す。

分類

問合せ関数。

引数

A

は文字型でなければならない。スカラ 又は 配列であってよい。

結果の特性

A

と同じ種別型パラメタで文字長

1

の文字型スカラとする。

結果の値

場合

1

A

が基本文字型で,

ASCII

大小順序の

10

番目の位置の文字が基本文字集合で表現可能な場合,結果

ACHAR(10)

になる。

場合

2

A

ASCII

文字型 又は

ISO 10646

文字型の場合,結果は

CHAR(10,KIND(A))

になる。

場合

3

それ以外の場合,書式付き流れ出力に接続されているファイルの出力中で改行を表現する処理系依存

の文字があるとき,結果は処理系依存の文字になる。

場合

4

それ以外のとき,結果は空白文字になる。

13.7.86 NINT (A [, KIND])

機能

最も近い整数を返す(四捨五入)。

分類

要素別処理関数。

引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

291

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

A

実数型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略したと

き,種別型パラメタは基本整数型のものとする。

結果の値

結果は

A

に最も近い整数とする。

A

に最も近い整数が等距離で二つある場合,結果はそれらのうち絶対

値の大きいほうとする。

例示

NINT (2.783)

の値は,

3

になる。

13.7.87 NOT (I)

機能

ビットごとの論理否定を計算する。

分類

要素別処理関数。

引数

I

は,整数型でなければならない。

結果の特性

I

と同じとする。

結果の値

結果の値は,次の真理値表に従ってビットごとに論理否定をとることによって得られる値とする。

I

NOT (I)

1

0

0

1

整数値をビット列として解釈する数体系は,

13.3

による。

例示

I

がビット列

01010101

として表現されるとき,

NOT (I)

は,

2

進数値

10101010

になる。

13.7.88 NULL ([MOLD])

機能

空状態のポインタを返すか 又は 構造体構成子の割り付けられていない割付け成分を特定する。

分類

変形関数。

引数

MOLD

はポインタ 又は 割付けでなければならない。どの型であってもよく,手続ポインタでもよい。

MOLD

ポインタの場合,ポインタ結合状態は,不定でも,空状態でも,結合していてもよい。

MOLD

が割付けの場合,割付

け状態は割付け 又は 未割付けでよい。確定でなくてもよい。

結果の特性

MOLD

を指定した場合,特性は

MOLD

と同じとする。

MOLD

が無指定型パラメタをもつ場合,結果の型パ

ラメタは無指定とする。

MOLD

を指定しない場合,結果の特性は結合されている参照の言語要素によって決定される。

13.1

のとおり,

MOLD

は他のどの文脈でも欠けてはならない。文脈上の言語要素のどの型パラメタも無指定である場合,結果の型パラメタ

は無指定になる。文脈上の言語要素のどの型パラメタも引継ぎである場合,

MOLD

は指定しなければならない。

NULL

を参照する文脈が総称手続の実引数である場合,型,型パラメタ 又は 次元数が総称参照を解決するために必要である

ならば,

MOLD

は指定しなければならない。文字長引継ぎの仮引数と対応する実引数として参照に現れる場合も,

MOLD

を指定しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

292

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.1

NULL()

の結果の特性

NULL()

の出現位置

結果の型,型パラメタ,及び 次元数

ポインタ代入文の右辺

左辺のポインタ

宣言中の実体の初期値指定

実体

成分の暗黙的初期値指定

成分

構造体構成子中

対応する成分

実引数として

対応する仮引数

DATA

文中

対応するポインタ実体

結果

結果は,空状態のポインタ 又は割り付けられていない割付け実体とする。

例示

場合

1

REAL, POINTER, DIMENSION (:)

::

VEC => NULL ()

と宣言すると,

VEC

の初期結合状態は空

状態になる。

場合

2

引数

MOLD

は次のような場合に必要とされる。

INTERFACE GEN

SUBROUTINE S1 (J, PI)

INTEGER J

INTEGER, POINTER :: PI

END SUBROUTINE S1

SUBROUTINE S2 (K, PR)

INTEGER K

REAL, POINTER :: PR

END SUBROUTINE S2

END INTERFACE

REAL, POINTER :: REAL_PTR

CALL GEN (7, NULL (REAL_PTR) )

! S2

を呼び出す

13.7.89 PACK (ARRAY, MASK [, VECTOR])

機能

MASK

に従って,配列を

1

次元配列にする。

分類

変形関数。

引数

ARRAY

どの型でもよいが,スカラであってはならない。

MASK

論理型でなければならず,

ARRAY

と形状適合しなければならない。

VECTOR

(省略可能)

ARRAY

と同じ型 及び 同じ種別型パラメタでなければならず,

1

次元配列でなければならな

い。

VECTOR

は,少なくとも

MASK

中の真である要素と同数の要素をもたなければならな

い。

MASK

がスカラであって値が真のとき,

VECTOR

は,少なくとも

ARRAY

と同数の要素を

もたなければならない。

結果の特性

結果は,

ARRAY

と同じ型 及び 同じ種別型パラメタの

1

次元配列とする。

VECTOR

を指定した場合,結

果の大きさは

VECTOR

と同じとする。

VECTOR

を省略した場合,結果の大きさは

MASK

中の真である要素の個数

t

する。ただし,

MASK

が真の値のスカラのとき,結果の大きさは

ARRAY

の大きさとする。

結果の値

配列要素順序に従って,結果の

i

番目

(

i

= 1

,

2

, . . ., t

)

の要素は,

MASK

i

番目の真である要素に対応す

ARRAY

の要素とする。

VECTOR

を指定し,その大きさ

n

n > t

であるとき,

i

=

t

+ 1

, . . ., n

に対して,結果の

i

番目の要素の値は,

VECTOR (

i

)

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

293

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

例示

配列

M


0

0

0

9

0

0

0

0

7


であるとき,

0

でない要素を,関数

PACK

によって

収集する

ことができる。

PACK

(M, MASK = M /= 0)

の値は,

[ 9

,

7 ]

になる。

PACK (M, M /= 0, VECTOR = (/ 2, 4, 6, 8, 10, 12 /))

の値は,

[ 9

,

7

,

6

,

8

,

10

,

12 ]

になる。

13.7.90 PRECISION (X)

機能

引数と同じ種別型パラメタをもつ実数の数体系の

10

進精度を返す。

分類

問合せ関数。

引数

X

は,実数型 又は 複素数でなければならない。スカラ 又は 配列とする。

結果の特性

基本整数型スカラとする。

結果の値

結果の値は,

INT ((

p

1

)

×

LOG10(

b

))

+

k

とする。ここで

b

及び

p

は,

X

と同じ種別型パラメタ値

をもつ実数の数体系における

13.7.1

で定義した値とする。

k

は,

b

10

の整数乗のとき

1

とし,それ以外のとき

0

とする。

例示

注記

13.4

に示した数体系の実数

X

について,

PRECISION (X)

の値は,

INT (23 * LOG10(2.))

=

INT

(6.92

· · ·

)

= 6

になる。

13.7.91 PRESENT (A)

機能

省略可能な引数が実在するかどうかを判定する。

分類

問合せ関数。

引数

A

は,その

PRESENT

関数の引用を含む手続の中で参照可能な,省略可能な仮引数の名前でなければならない。

A

は,どの型でもよく,ポインタでもよい。スカラ 又は 配列とする。仮手続でもよい。仮引数

A

は,

INTENT

属性

をもたない。

結果の特性

基本論理型スカラとする。

結果の値

結果の値は,

A

が実在する

(

12.4.1.6

)

とき真とし,実在しないとき偽とする。

13.7.92 PRODUCT (ARRAY, DIM [, MASK])

又は

PRODUCT (ARRAY [, MASK])

機能

DIM

番目の次元について,

MASK

中の真である要素に対応する

ARRAY

のすべての要素の積を計算する。

分類

変形関数。

引数

ARRAY

整数型,実数型 又は 複素数型でなければならず,スカラであってはならない。

DIM

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

MASK

(省略可能)

論理型でなければならず,

ARRAY

と形状適合しなければならない。

結果の特性

結果は,

ARRAY

と同じ型 及び 同じ種別型パラメタとする。

DIM

が省略されているときは,スカラとす

る。それ以外のとき,結果は

n

1

次元とし,形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

とする。ここで

(

d

1

, d

2

, . . ., d

n

)

は,

ARRAY

の形状とする。

結果の値

場合

1

PRODUCT (ARRAY)

の結果の値は,

ARRAY

の全要素の積の処理系依存の近似値とする。ただし,

ARRAY

が大きさゼロのとき,結果の値は

1

とする。

場合

2

PRODUCT (ARRAY, MASK = MASK)

の結果の値は,

MASK

中の真である要素と対応する

ARRAY

の要素

の積の処理系依存の近似値とする。ただし,真である要素がないとき,結果の値は

1

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

294

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

3

ARRAY

1

次元配列のとき,

PRODUCT (ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の結果の値は,

PRODUCT (ARRAY [ , MASK = MASK ] )

とする。

2

次元以上のとき,

PRODUCT (ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の 要 素

(

s

1

, s

2

, . . ., s

DIM

1

, s

DIM

+1

, . . ., s

n

)

の 値 は ,

PRODUCT (ARRAY (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

[

, MASK = MASK (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

]

)

する。

例示

場合

1

PRODUCT ((/ 1, 2, 3 /))

の値は,

6

になる。

場合

2

PRODUCT (C, MASK = C > 0.0)

の値は,

C

の正の要素の積になる。

場合

3

配列

B


1

3

5

2

4

6


であるとき,

PRODUCT (B, DIM = 1)

の値は

[ 2

,

12

,

30 ]

になり,

PRODUCT

(B, DIM = 2)

の値は

[ 15

,

48 ]

になる。

13.7.93 RADIX (X)

機能

引数と同じ型 及び 同じ種別型パラメタの数体系の基数を返す。

分類

問合せ関数。

引数

X

は,整数型 又は 実数型でなければならない。スカラ 又は 配列とする。

結果の特性

基本整数型スカラとする。

結果の値

結果の値は,

X

が整数型のとき

r

とし,

X

が実数型のとき

b

とする。ここで

r

及び

b

は,

X

と同じ型 及

び 同じ種別型パラメタの数体系における

13.4

で定義した値とする。

例示

注記

13.4

に示した数体系の実数

X

について,

RADIX (X)

の値は

2

になる。

13.7.94 RANDOM NUMBER (HARVEST)

機能

0

x <

1

の範囲に一様分布する一つの擬似乱数か 又は 擬似乱数の配列を返す。

分類

サブルーチン。

引数

HARVEST

は,実数型でなければならない。

INTENT (OUT)

引数とする。スカラ変数 又は 配列変数とする。

0

x <

1

の区間に一様分布する擬似乱数が設定される。

例示

REAL X, Y (10, 10)

!

擬似乱数で

X

を初期化する。

CALL RANDOM_NUMBER (HARVEST = X)

CALL RANDOM_NUMBER (Y)

! X

及び配列

Y

は,一様乱数になる。

13.7.95 RANDOM SEED ([SIZE, PUT, GET])

機能

RANDOM_NUMBER

で使われる擬似乱数生成器を再始動するか 又は 問い合わせる。

分類

サブルーチン。

引数

引数は,

1

個だけ 又は

0

個でなければならない。

SIZE

(省略可能)

基本整数型スカラでなければならない。

INTENT (OUT)

引数とする。処理系が種子

(seed)

の値を保持するのに用いる整数の個数

N

が返される。

PUT

(省略可能)

1

次元で大きさが

N

以上の基本整数型配列でなければならない。

INTENT (IN)

引数とす

る。擬似乱数生成器が参照する種子の値を,処理形依存の方法で計算するために用いる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

295

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

GET

(省略可能)

1

次元で大きさが

N

以上の基本整数型配列でなければならない。

INTENT (OUT)

引数と

する。現在の種子の値が返される。

引数を省略すると,処理系は種子を処理系依存の値に設定する。

RANDOM_NUMBER

で使われる擬似乱数生成器は,種子の値を保存する。種子の値は,

RANDOM_NUMBER

の実行によっ

て更新されたり,

RANDOM_SEED

によって設定 又は 参照されたりする。引数

PUT

から種子を計算する方法は,処理系

依存とする。引数

GET

に返される値は,直前に引用した

RANDOM_SEED

の引数

PUT

によって指定した値と同じである

必要はない。

CALL RANDOM_SEED (PUT = SEED1)

CALL RANDOM_SEED (GET = SEED2)

この例の実行によって,

SEED2

の値が

SEED1

と一致する必要はない。

SEED1

SEED2

の値が異なっている場合は,

次に

RANDOM_SEED

を呼び出すとき,引数

PUT

としてどちらの値を使用しても,生成される擬似乱数列は等しくなる。

CALL RANDOM_SEED (PUT = SEED1)

CALL RANDOM_SEED (GET = SEED2)

CALL RANDOM_NUMBER (X1)

CALL RANDOM_SEED (PUT = SEED2)

CALL RANDOM_NUMBER (X2)

この例の実行によって,

X2

の値は

X1

と一致する。

例示

SIZE

の値が未知である場合の使用例

CALL RANDOM_SEED

!

処理系が初期化する。

CALL RANDOM_SEED (SIZE = K)

!

K

N

が返される。

CALL RANDOM_SEED (PUT = SEED (1 : K))

!

利用者の種子を設定する。

CALL RANDOM_SEED (GET = OLD (1 : K))

!

現在の種子を読む。

SIZE

の値が

1

であることが既知である場合に,同一の擬似乱数列を使用する例

INTEGER, DIMENSION(1) ::

IR

CALL

SYSTEM CLOCK(COUNT=IC)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

処理系の時計の現在値

CALL

RANDOM SEED (PUT=(/IC/))

. . . . . . . . . . . . . . . . . . . . . . . . . .

擬似乱数列の位置を初期設定

処理

1

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

サブルーチン

RANDOM NUMBER

によって乱数を使用

CALL

RANDOM SEED (GET=IR)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

擬似乱数列の現在位置を保存

処理

2

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

乱数を何回か使用

CALL

RANDOM SEED (PUT=IR)

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

擬似乱数列の位置を復帰

処理

2

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

処理

2

と同じ擬似乱数列を使用

13.7.96 RANGE (X)

機能

引数と同じ種別型パラメタとなる整数 又は 実数の数体系の

10

進指数範囲を返す。

分類

問合せ関数。

引数

X

は,整数型,実数型 又は 複素数型でなければならない。スカラ 又は 配列とする。

結果の特性

基本整数型スカラとする。

結果の値

場合

1

整数型の引数の場合,結果の値は,

INT (LOG10 (HUGE(X)))

とする。

場合

2

実数型の引数の場合,結果の値は,

INT (MIN (LOG10 (HUGE(X))

-LOG10 ( TINY(X))))

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

296

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

3

引数が複素数のとき,結果の値は

RANGE (REAL(X))

とする。

例示

注記

13.4

に示した数体系の実数

X

について,

RANGE(X)

の値は,

38

になる。このとき,

HUGE(X)

= (1

2

24

)

×

2

127

及び

TINY(X)

= 2

127

である。

13.7.97 REAL (A [, KIND])

機能

実数型に変換する。

分類

要素別処理関数。

引数

A

整数型,実数型 若しくは 複素数型,又は 非

10

進定数表現でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

実数型。

場合

1

A

が整数型 又は 実数型の場合,

KIND

を指定したとき,種別型パラメタは

KIND

値の指定に従う。

KIND

を省略したとき,種別型パラメタは基本実数型に対するとする。

場合

2

A

が複素数型の場合,

KIND

を指定したとき,種別型パラメタは

KIND

の指定に従う。

KIND

を省略し

たとき,種別型パラメタは

A

の種別型パラメタとする。

場合

3:

A

が非

10

進定数表現の場合,

KIND

を指定したとき,種別型パラメタは

KIND

値の指定に従う。

KIND

を省略したとき,種別型パラメタは基本実数型のものとする。

結果の値

場合

1

A

が整数型 又は 実数型の場合,結果の値は

A

に対する処理系依存の近似値とする。

場合

2

A

が複素数型の場合,結果の値は

A

の実部に対する処理系依存の近似値とする。

場合

3:

A

が非

10

進定数表現の場合,結果の値は非

10

進定数表現によって指定されたビット様式である値を

結果とする同じ型 及び 種別型パラメタの変数の値と等しくなる。ビット様式の値の実装は,処理系

依存とする。

例示

REAL (-3)

の値は,

3

.

0

になる。

REAL (Z)

の値は,複素変数

Z

の実部と同じ種別型パラメタ 及び 値になる。

13.7.98 REPEAT (STRING, NCOPIES)

機能

指定した文字列の複写を幾つか連結する。

分類

変形関数。

引数

STRING

スカラ文字型でなければならない。

NCOPIES

スカラ整数型でなければならず,値は負であってはならない。

結果の特性

STRING

と同じ種別型パラメタ値の文字型スカラとする。その文字長は,

STRING

の文字長の

NCOPIES

倍とする。

結果の値

結果の値は,

STRING

NCOPIES

回だけ複写したものを連結した値とする。

例示

REPEAT (’H’, 2)

の値は,

HH

になる。

REPEAT (’XYZ’, 0)

の値は,長さ

0

の文字列になる。

13.7.99 RESHAPE (SOURCE, SHAPE [, PAD, ORDER])

機能

与えられた配列の要素から,指定された形状の配列を構成する。

分類

変形関数。

引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

297

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

SOURCE

どの型でもよい。スカラであってはならない。

PAD

が省略されているか 又は 大きさゼロ

のとき,

SOURCE

の大きさは

PRODUCT (SHAPE)

の値以上でなければならない。

SHAPE

整数型の

1

次元配列であって,大きさは定数でなければならない。大きさは,

1

7

の正の

数でなければならない。どの要素の値も負であってはならない。

PAD

(省略可能)

SOURCE

と同じ型 及び 同じ種別型パラメタでなければならない。

PAD

スカラであってはな

らない。

ORDER

(省略可能)

整数型でなければならず,

SHAPE

と同じ形状でなければならない。その値は,

(1

,

2

, . . ., n

)

を並べ替えたものでなければならない。ここで

n

は,

SHAPE

の大きさとする。

ORDER

を省

略したとき,値

(1

,

2

, . . ., n

)

を指定したかのように働く。

結果の特性

結果は,

SOURCE

と同じ型 及び 同じ種別型パラメタであって形状が

SHAPE

である[すなわち

SHAPE

(RESHAPE (SOURCE, SHAPE, PAD, ORDER))

SHAPE

に等しい]配列とする。結果の大きさは,

SHAPE

の要素の値

の積とする。

結果の値

結果の要素を置換した添字順序

ORDER(1)

...

ORDER(

n

)

で並べ替えたものは,

SOURCE

の要素を通常

の配列要素順序で並べ,足りなければ

PAD

の要素を配列要素順序で続け,更に足りなければ

PAD

の要素を配列要素

順序で必要な回数だけ繰り返したものと等しい。

例示

RESHAPE ((/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))

の値は

,


1

3

5

2

4

6


になる。

RESHAPE ((/ 1, 2, 3,

4, 5, 6 /), (/ 2, 4 /), (/ 0, 0 /), (/ 2, 1 /))

の値は,


1

2

3

4

5

6

0

0


になる。

13.7.100 RRSPACING (X)

機能

X

の数体系における引数値前後の相対的な間隔の逆数を返す。

注記

関数名

RRSPACING

は,

Reciprocal of the Relative Spacing

(相対的な間隔の逆数)に基づいている。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

|

X

×

b

e

b

p

とする。ここで

b

e

及び

p

は,

X

の種別型パラメタをもつ実数に対する数体系

の数での

X

の直近の値に対して

13.4

で定義した値とする。そのような値が二つあるときは,絶対値の大きいほうの値

とする。

X

IEEE

無限大である場合,結果の値はゼロとする。

X

IEEE

非数である場合,結果の値は非数とする。

例示

注記

13.4

に示した数体系の実数について,

RRSPACING (-3.0)

の値は,

0

.

75

×

2

24

になる。

13.7.101 SAME TYPE AS (A, B)

機能

A

の動的な型が

B

の動的な型と同じかどうかを問い合わせる。

分類

問合せ関数。

引数

A

拡張可能型の実体でなければならない。ポインタの場合,結合状態は不定であってはならない。

B

拡張可能型の実体でなければならない。ポインタの場合,結合状態は不定であってはならない。

結果の特性

基本論理型スカラとする。

結果の値

結果の値は

A

の動的な型が

B

の動的な型と同じであるとき,かつ このときに限り真とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

298

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

13.17

空状態のポインタの動的な型 又は 割り付けられていない割付けの型は,その宣言時の型と

する。

13.7.102 SCALE (X, I)

機能

X

×

b

I

を返す。ここで

b

は,

X

の数体系の基数とする。

分類

要素別処理関数。

引数

X

実数型でなければならない。

I

整数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果が範囲の中にあるとき,結果の値は

X

×

b

I

とする。ここで

b

は,

X

の数体系における

13.4

で定義し

た値とする。範囲を超えたとき,結果は処理系依存とする。

例示

注記

13.4

に示した数体系の実数について,

SCALE (3.0, 2)

の値は,

12.0

になる。

13.7.103 SCAN (STRING, SET [, BACK, KIND])

機能

文字列を走査して,指定した文字集合中の文字があるかどうかを判定する。

分類

要素別処理関数。

引数

STRING

文字型でなければならない。

SET

STRING

と同じ種別型パラメタの文字型でなければならない。

BACK

(省略可能)

論理型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略したとき,

種別型パラメタは基本整数型のものとする。

結果の値

場合

1

BACK

に偽を指定するか 又は 省略してあって,

STRING

SET

中の文字を少なくとも一つ含む場合,

結果の値は両方にある文字の

STRING

中での最も左の文字位置とする。

場合

2

BACK

に真を指定してあって,

STRING

SET

中の文字を少なくとも一つ含む場合,結果の値は両方

にある文字の

STRING

中での最も右の文字位置とする。

場合

3

STRING

中のどの文字も

SET

中にないか,又は

STRING

若しくは

SET

の文字長が

0

の場合,結果の

値は

0

とする。

例示

場合

1

SCAN (’FORTRAN’, ’TR’)

の値は,

3

になる。

場合

2

SCAN (’FORTRAN’, ’TR’, BACK = .TRUE.)

の値は,

5

になる。

場合

3

SCAN (’FORTRAN’, ’BCD’)

の値は,

0

になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

299

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.104 SELECTED CHAR KIND (NAME)

機能

引数によって名前付けられた文字集合の種別型パラメタ値を返す。

分類

変形関数

引数

NAME

は基本文字型スカラでなければならない。

結果の特性

基本整数型スカラ。

結果の値

NAME

が値

DEFAULT

の場合,結果の値は基本文字型の種別型パラメタの値とする。

NAME

が値

ASCII

の場

合,処理系が

ASCII

文字型を実装しているとき,結果の値はその文字型の種別型パラメタの値とする。そうでないと

き,結果の値は

1

とする。

NAME

が値

ISO_10646

の場合,処理系が

JIS X 0221-1

: 2001

での

UCS-4

の文字型を

実装しているとき,結果の値はその文字型の種別型パラメタの値とする。そうでないとき,結果の値は

1

とする。

NAME

が,処理系に実装されている他の文字型の処理系定義の名称の場合,結果の値はその文字型の種別型パラメタ

のものと同じ値とする。

NAME

が実装している文字型の名称でない場合,結果の値は

1

とする。

NAME

の解釈は,大

小文字 又は 後続空白によらない。

例示

ASCII

文字集合の種別型パラメタとして

1

を使用する処理系において,

SELECTED_CHAR_KIND (’ASCII’)

値は

1

になる。次のサブルーチンは,日本の日付印を生じる。

SUBROUTINE create_date_string(string)

INTRINSIC date_and_time,selected_char_kind

INTEGER,PARAMETER :: ucs4 = selected_char_kind("ISO_10646")

CHARACTER(1,UCS4),PARAMETER :: nen=CHAR(INT(Z’5e74’),UCS4), &

!

gatsu=CHAR(INT(Z’6708’),UCS4), &

!

nichi=CHAR(INT(Z’65e5’),UCS4)

!

CHARACTER(len= *, kind= ucs4) string

INTEGER values(8)

CALL date_and_time(values=values)

WRITE(string,1) values(1),nen,values(2),gatsu,values(3),nichi

1 FORMAT(I0,A,I0,A,I0,A)

END SUBROUTINE

13.7.105 SELECTED INT KIND (R)

機能

10

R

< n <

10

R

の範囲にあるすべての整数値

n

を表現できる整数型の種別型パラメタ値を返す。

分類

変形関数。

引数

R

は,整数型のスカラでなければならない。

結果の特性

基本整数型スカラ。

結果の値

結果の値は,

10

R

< n <

10

R

の範囲内のすべての値

n

を表現できる整数型の種別型パラメタ値とする。

ただし,そのような種別型パラメタがその処理系上で利用できない場合,結果の値は

1

とする。二つ以上の種別型

パラメタが条件を満足する場合,最も小さい

10

進指数範囲を表現する種別型パラメタ値とする。同じ

10

進指数範囲

を表現するものが複数あるときは,最も小さい種別型パラメタ値とする。

例示

表現方法が

r

= 2

及び

q

= 31

である整数種別

32

,及び 表現方法が

r

= 2

及び

q

= 63

である整数種

64

の二つを,処理系が実装しているとする。この処理系において,

SELECTED INT KIND(9)

の値は

32

になり,

SELECTED INT KIND(10)

の値は

64

になる。

13.7.106 SELECTED REAL KIND ([P, R])

機能

10

進精度が

P

けた以上で

10

進指数範囲が

R

以上である実数型の種別型パラメタ値を返す。

分類

変形関数。

引数

少なくとも一つの引数は,指定しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

300

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

P

(省略可能)

整数型スカラでなければならない。

R

(省略可能)

整数型スカラでなければならない。

結果の特性

基本整数型スカラ。

結果の値

P

又は

R

が指定されない場合,結果の値は値

0

が指定された場合と同じになる。結果の値は,関数

PRECISION

によって返されるような

P

けた以上の

10

進精度と,関数

RANGE

によって返されるような

R

以上の

10

指数範囲をもつ実数型の種別型パラメタ値とする。ただし,そのような種別型パラメタが処理系上で利用できない場

合の結果の値は,

P

けた以上の

10

進精度が利用不可能であって

R

けた以上の指数範囲の実数型を実装するとき

1

とし,

R

以上の

10

進指数範囲が利用不可能であって

P

けた以上の精度の実数型を実装するとき

2

とし,どちらも

利用不可能なとき

3

とする。処理系がそれらの実数型をそれぞれ単独では実装していても同時には実装してない場

合の結果の値は,

4

とする。二つ以上の種別型パラメタが条件を満足する場合,最も小さい

10

進指数範囲を表現す

る種別型パラメタ値とする。同じ

10

進指数範囲を表現するものが複数あるときは,最も小さい種別型パラメタ値と

する。

例示

SELECTED REAL KIND (6, 70)

は,基本実数型の近似方法が

b

= 16

p

= 6

e

min

=

64

及び

e

max

= 63

あって,より精度の低い近似方法をもたない処理系では,

KIND (0.0)

の値になる。

13.7.107 SET EXPONENT (X, I)

機能

小数部が

X

の数表現の小数部であって,指数部が

I

である数表現の実数を返す。

分類

要素別処理関数。

引数

X

実数型でなければならない。

I

整数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果が表現可能な範囲の中にあるとき,結果の値は,

X

×

b

I

e

とする。ここで

b

及び

e

は,

X

の,

X

の基

数をもち指数の値に限界のない数表現に対して

13.4

で定義した値とする。

X

の値が

0.0

であるとき,結果の値は

0

する。

例示

注記

13.4

に示した数体系の実数について,

SET EXPONENT (3.0, 1)

の値は,

1.5

になる。

13.7.108 SHAPE (SOURCE[, KIND])

機能

配列 又は スカラの形状を返す。

分類

問合せ関数。

引数

SOURCE

どの型でもよい。配列 又は スカラとする。空状態のポインタ 又は 割り付けられていない

割付け実体であってはならず,大きさ引継ぎ配列であってはならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略したとき,

種別型パラメタは基本整数型のものとする。 結果は,大きさが

SOURCE

の次元数に等しい

1

次元配列とする。

結果の値

結果の値は,

SOURCE

の形状とする。

例示

SHAPE ((2 : 5, -1 : 1))

の値は,

[ 4

,

3 ]

になる。

SHAPE (3)

の値は,大きさゼロの

1

次元配列になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

301

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.109 SIGN (A, B)

機能

A

の絶対値に

B

の符号を付けた値。

分類

要素別処理関数。

引数

A

整数型 又は 実数型でなければならない。

B

A

と同じ型 及び 同じ種別型パラメタでなければならない。

結果の特性

A

と同じとする。

結果の値

場合

1

B

>

0

の場合,結果の値は

|

A

|

とする。

場合

2

B

<

0

の場合,結果の値は

−|

A

|

とする。

場合

3

B

が整数型で

B

= 0

の場合,結果の値は

|

A

|

とする。

場合

4

B

が実数型で値が

0.0

の場合,結果の値は次のとおりとする。

(1)

処理系が値

0.0

の符号の正負を区別できないときは,

|

A

|

とする。

(2)

B

の値が

0.0

で符号が正のときは,

|

A

|

とする。

(3)

B

の値が

0.0

で符号が負のときは,

−|

A

|

とする。

例示

SIGN (-3.0, 2.0)

の値は,

3.0

になる。

13.7.110 SIN (X)

機能

正弦関数。

分類

要素別処理関数。

引数

X

は,実数型 又は 複素数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

sin (

X

)

の処理系依存の近似値とする。

X

が実数型であるとき,ラジアンでの値とみなされ

る。

X

が複素数型であるとき,その実部がラジアンでの値とみなされる。

例示

SIN (1.0)

の値は,

0.84147098

(近似値)になる。

13.7.111 SINH (X)

機能

双曲線正弦関数。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

sinh (

X

)

の処理系依存の近似値とする。

例示

SINH (1.0)

の値は,

1.1752012

(近似値)になる。

13.7.112 SIZE (ARRAY [, DIM, KIND])

機能

配列の要素の総数 又は 指定した次元の寸法を返す。

分類

問合せ関数。

引数

ARRAY

どの型でもよい。スカラであってはならない。空状態のポインタ 又は 割り付けられてい

ない割付け実体であってはならない。

ARRAY

が大きさ引継ぎ配列であるときは,

DIM

は省

略できず,

ARRAY

の次元数より小さい値を指定しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

302

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

DIM

(省略可能)

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型スカラとする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省

略したとき,種別型パラメタは基本整数型のものとする。

結果の値

結果の値は,

ARRAY

DIM

番目の次元の寸法とし,

DIM

を省略したとき,

ARRAY

の要素の総数とする。

例示

SIZE ((2 : 5, -1 : 1), DIM = 2)

の値は,

3

になる。

SIZE (A(2 : 5, -1 : 1))

の値は,

12

になる。

13.7.113 SPACING (X)

機能

X

の数体系における引数の値付前後の間隔の絶対値を返す。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

結果の特性

X

と同じとする。

結果の値

X

の値が

0.0

でないとき,結果の値は

b

max(

e

p, e

min

1)

とする。ここで

b

e

及び

p

は,

X

の種別型パラ

メタをもつ実数に対する数体系の数での

X

の直近の値に対して

13.4

で定義した値とする。そのような値が二つある

ときは,絶対値の大きいほうの値とする。

X

がゼロのとき,結果の値は

TINY (X)

と同じとする。

X

IEEE

無限大

のとき,結果の値は正の無限大とする。

X

IEEE

非数のとき,結果の値は非数とする。

例示

注記

13.4

に示した数体系の実数について,

SPACING (3.0)

の値は

2

22

になる。

13.7.114 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

が形状

(

d

1

, d

2

, . . ., d

n

)

の配列である場合,結果の形状は

(

d

1

, d

2

, . . ., d

DIM

1

,

max(

NCOPIES

,

0)

, d

DIM

, . . ., d

n

)

とする。

結果の値

場合

1

SOURCE

がスカラである場合,結果の各要素は

SOURCE

に等しい値とする。

場合

2

SOURCE

が配列である場合,添字が

(

r

1

, r

2

, . . . , r

n

+1

)

である結果の要素は,

SOURCE (

r

1

,

r

2

,

. . .

,

r

DIM

1

,

r

DIM

+1

,

. . .

,

r

n

+1

)

に等しい値とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

303

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

例示

A

が配列

[ 2

,

3

,

4 ]

である場合,

SPREAD (A, DIM = 1, NCOPIES = NC)

の値は,

NC

の値が

3

であるとき配列


2

3

4

2

3

4

2

3

4


になり,

NC

の値が

0

であるとき大きさゼロの配列になる。

13.7.115 SQRT (X)

機能

平方根。

分類

要素別処理関数。

引数

X

は,実数型 又は 複素数型でなければならない。

X

が実数型であるとき,値は

0.0

以上でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

X

の平方根の処理系依存の近似値とする。複素数型の結果は,実部が

0.0

以上である主値と

する。結果の実部が

0.0

であるとき,虚部は

X

の虚部と同じ符号をもつ。

例示

SQRT (4.0)

の値は,

2.0

(近似値)になる。

13.7.116 SUM (ARRAY, DIM [, MASK])

又は

SUM (ARRAY [, MASK])

機能

MASK

中の真である要素に対応する

ARRAY

の要素を,

DIM

番目の次元について合計する。

分類

変形関数。

引数

ARRAY

整数型,実数型 又は 複素数型でなければならず,スカラであってはならない。

DIM

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

MASK

(省略可能)

論理型でなければならず,

ARRAY

と形状適合しなければならない。

結果の特性

結果は,

ARRAY

と同じ型 及び 同じ種別型パラメタとする。

DIM

を省略するときは,スカラとする。そ

れ以外のとき,結果は

n

1

次元とし,その形状は

(

d

1

, d

2

, . . ., d

DIM

1

, d

DIM

+1

, . . ., d

n

)

とする。ここで

(

d

1

, d

2

, . . ., d

n

)

は,

ARRAY

の形状とする。

結果の値

場合

1

SUM (ARRAY)

の結果の値は,

ARRAY

のすべての要素の合計の処理系依存の近似値とする。

ARRAY

大きさゼロであるとき,値はゼロとする。

場合

2

SUM (ARRAY, MASK = MASK)

の結果の値は,

MASK

中の真である要素に対応している

ARRAY

の要素

の合計の処理系依存の近似値とする。ただし,

MASK

中に真である要素がないとき,値はゼロとする。

場合

3

ARRAY

1

次元配列のとき,

SUM (ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の結果の値は,

SUM

(ARRAY

[

, MASK = MASK

]

)

とする。

2

次元以上のとき,

SUM (ARRAY, DIM = DIM

[

, MASK = MASK

]

)

の要素

(

s

1

, s

2

, . . ., s

DIM

1

, s

DIM

+1

, . . ., s

n

)

の値は,

SUM (ARRAY (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

[

, MASK = MASK (

s

1

,

s

2

,

. . .

,

s

DIM

1

, :,

s

DIM

+1

,

. . .

,

s

n

)

]

)

とする。

例示

場合

1

SUM ((/ 1, 2, 3 /))

の値は,

6

になる。

場合

2

SUM (C, MASK = C > 0.0)

の値は,

C

の正の要素の合計になる。

場合

3

B

が配列


1

3

5

2

4

6


であるとき,

SUM (B, DIM = 1)

の値は

[ 3

,

7

,

11 ]

になり,

SUM (B, DIM = 2)

の値は

[ 9

,

12 ]

になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

304

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.117 SYSTEM CLOCK ([COUNT, COUNT RATE, COUNT MAX])

機能

実時間時計から数値データを返す。

分類

サブルーチン。

引数

COUNT

(省略可能)

整数型スカラでなければならない。

INTENT (OUT)

引数とする。処理系の時計の

現在値に基づく処理系依存の値に設定される。時計がないときは,

-HUGE(COUNT)

に設定される。処理系依存の値は,時計の刻みごとに

1

ずつ増加し,値

COUNT_MAX

に達すると,次の刻みで

0

に再設定される。時計があるときは,

0

以上,

COUNT_MAX

以下の値になる。

COUNT_RATE

(省略可能)

整数型 又は 実数型のスカラでなければならない。

INTENT (OUT)

引数とする。処

理系の時計が

1

秒間に刻む回数の処理系依存の近似値に設定される。ただし,時計

がないときは,

0

に設定される。

COUNT_MAX

(省略可能)

整数型スカラでなければならない。

INTENT (OUT)

引数とする。

COUNT

がとりう

る最大値に設定される。ただし,時計がないときは,

0

に設定される。

例示

処理系の時計が

24

時間時計で,毎秒約

18.20648193

刻みで時間を設定しているとき,

CALL SYSTEM_CLOCK (COUNT = C, COUNT_RATE = R, COUNT_MAX = M)

という引用を午前

11

30

分にすると,

C

= (11

×

3600 + 30

×

60)

×

18

.

20648193 = 753748

R

= 18

.

20648193

及び

M

= 24

×

3600

×

18

.

20648193

1 = 1573039

に設定される。

13.7.118 TAN (X)

機能

正接関数。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

tan (

X

)

の処理系依存の近似値とする。

X

は,ラジアンでの値とみなされる。

例示

TAN (1.0)

の値は,

1.5574077

(近似値)になる。

13.7.119 TANH (X)

機能

双曲線正接関数。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

結果の特性

X

と同じとする。

結果の値

結果の値は,

tanh (

X

)

の処理系依存の近似値とする。

例示

TANH (1.0)

の値は,

0.76159416

(近似値)になる。

13.7.120 TINY (X)

機能

引数と同じ型 及び 同じ種別型パラメタの数体系で最小の正の数を返す。

分類

問合せ関数。

引数

X

は,実数型でなければならない。スカラ 又は 配列とする。

結果の特性

X

と同じ型 及び 同じ種別型パラメタのスカラとする。

結果の値

結果の値は,

b

e

min

1

とする。ここで

b

及び

e

min

は,

X

と同じ型 及び 同じ種別型パラメタの数体系にお

ける

13.4

で定義した値とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

305

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

例示

注記

13.4

に示した数体系の実数

X

について,

TINY (X)

の値は

2

127

になる。

13.7.121 TRANSFER (SOURCE, MOLD [, SIZE])

機能

物理表現は

SOURCE

と同一であるが,型 及び 型パラメタを

MOLD

のものにした結果を返す。

分類

変形関数。

引数

SOURCE

どの型でもよい。スカラ 又は 配列とする。

MOLD

どの型でもよい。スカラ 又は 配列とする。変数の場合確定でなくてもよい。

SIZE

(省略可能)

整数型スカラでなければならない。対応する実引数は,省略可能な仮引数であってはなら

ない。

結果の特性

結果は,

MOLD

と同じ型 及び 同じ型パラメタとする。

場合

1

SIZE

を省略し,

MOLD

がスカラである場合,結果はスカラとする。

場合

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

の値でなければならない。

例示

場合

1

TRANSFER (1082130432, 0.0)

の値は,

4.0

及び

1082130432

の値がどちらも

2

進数

0100 0000 1000

0000 0000 0000 0000 0000

で表される処理系では,

4.0

になる。

場合

2

TRANSFER ((/ 1.1, 2.2, 3.3 /), (/ (0.0, 0.0) /))

の値は,大きさが

2

である複素数型の

1

次元配列になる。その

1

番目の要素は

(1.1, 2.2)

になり,

2

番目の要素は実部の値が

3.3

になる。

2

目の要素の虚部は, 処理系依存になる。

場合

3

TRANSFER ((/ 1.1, 2.2, 3.3 /), (/ (0.0, 0.0) /), 1)

の値は,大きさが

1

である複素数型

1

次元配列になる。その要素は

(1.1, 2.2)

になる。

13.7.122 TRANSPOSE (MATRIX)

機能

2

次元配列を転置する。

分類

変形関数。

引数

MATRIX

は,どの型でもよいが,

2

次元配列でなければならない。

結果の特性

結果は,

MATRIX

と同じ型 及び 同じ種別型パラメタの

2

次元配列とし,

MATRIX

の形状が

(

m, n

)

であ

るとき,結果の形状は,

(

n, m

)

とする。

結果の値

結果の要素

(

i, j

)

, i

= 1

,

2

, . . ., n

;

j

= 1

,

2

, . . ., m

の値は,

MATRIX (

j

,

i

)

とする。

例示

配列

A


1

2

3

4

5

6

7

8

9


のとき,

TRANSPOSE (A)

の値は


1

4

7

2

5

8

3

6

9


になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

306

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

13.7.123 TRIM (STRING)

機能

引数の後ろの空白を削除したものを返す。

分類

変形関数。

引数

STRING

は,文字型スカラでなければならない。

結果の特性

STRING

と同じ種別型パラメタ値の文字型とし,その文字長は,

STRING

の文字長から

STRING

の後ろ

の空白の個数を引いた長さとする。

結果の値

結果の値は,後ろの空白がない点を除いて

STRING

と同じとする。

STRING

が空白以外の文字を含まない

とき,結果の文字長は

0

とする。

例示

TRIM (’ A B ’)

の値は,

A B

になる。

13.7.124 UBOUND (ARRAY [, DIM, KIND])

機能

配列のすべての次元の上限 又は 指定した次元の上限を返す。

分類

問合せ関数。

引数

ARRAY

どの型でもよい。スカラであってはならない。空状態のポインタ 又は 割り付けられていな

い割付け実体であってはならない。

ARRAY

が大きさ引継ぎ配列のとき,

DIM

には,

ARRAY

の次元数未満の値を指定しなければならない。

DIM

(省略可能)

整数型スカラであって,

1

DIM

n

の範囲の値でなければならない。ここで

n

は,

ARRAY

の次元数とする。対応する実引数は,省略可能な仮引数であってはならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型とする。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略した

とき,種別型パラメタは基本整数型のものとする。

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

の次元数とする。

例示

A

が次の文によって宣言されているとき,

REAL A (2:3, 7:10)

UBOUND (A)

の値は

[ 3

,

10 ]

になり,

UBOUND (A, DIM = 2)

の値は

10

になる。

13.7.125 UNPACK (VECTOR, MASK, FIELD)

機能

1

次元配列の要素を

MASK

に従って配列に配布する。

分類

変形関数。

引数

VECTOR

どの型でもよい。

1

次元配列でなければならない。大きさは,

MASK

の真である要素の個数

t

以上で

なければならない。

MASK

論理型配列でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

307

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

FIELD

VECTOR

と同じ型 及び 同じ種別型パラメタでなければならず,

MASK

と形状適合しなければならな

い。

結果の特性

結果は,

VECTOR

と同じ型 及び 同じ種別型パラメタであって

MASK

と同じ形状の配列とする。

結果の値

配列要素順序に従って,

MASK

の真である要素の

i

番目

(

i

= 1

,

2

, . . ., t

)

に対応する結果の要素の値は,

VECTOR(

i

)

とする。ここで

t

は,

MASK

中の真である要素の個数とする。他の要素は,

FIELD

がスカラであるとき,そ

れぞれ

FIELD

に等しい値とし,

FIELD

が配列であるとき,

FIELD

の対応する要素と等しい値とする。

例示

UNPACK

を使うことによって,特定の値を配列の特定の位置に

配布する

ことができる。

M

が配列


1

0

0

0

1

0

0

0

1


であり,

V

が配列

[ 1

,

2

,

3 ]

であり,

Q

が論理型配列


.

T

.

T

.

.

.

.

T


である(ここで

T

は真を表し,

“ . ”

は,偽を表すと

する。)とき,

UNPACK (V, MASK = Q, FIELD = M)

の値は


1

2

0

1

1

0

0

0

3


になり,

UNPACK (V, MASK=Q, FIELD=0)

の値は


0

2

0

1

0

0

0

0

3


になる。

13.7.126 VERIFY (STRING, SET [, BACK, KIND])

機能

文字列中の文字が,指定した文字集合中に含まれているか否かを調べ,文字集合に含まれない文字列中の最初

の文字の位置を返す。

分類

要素別処理関数。

引数

STRING

文字型でなければならない。

SET

STRING

と同じ種別型パラメタの文字型でなければならない。

BACK

(省略可能)

論理型でなければならない。

KIND

(省略可能)

スカラ整数初期値式でなければならない。

結果の特性

整数型。

KIND

を指定したとき,種別型パラメタは指定された

KIND

値とする。

KIND

を省略したとき,

種別型パラメタは基本整数型のものとする

結果の値

場合

1

BACK

に偽を指定するか 又は 省略してあって,

STRING

SET

中にない文字を少なくとも一つ含む

場合,結果の値は

SET

中にない文字の

STRING

中での最も左の文字位置とする。

場合

2

BACK

に真を指定してあって,

STRING

SET

中にない文字を少なくとも一つ含む場合,結果の値は

SET

中にない文字の

STRING

中での最も右の文字位置とする。

場合

3

STRING

中のすべての文字が

SET

中にあるか,又は

STRING

の文字長が

0

である場合,結果の値は

0

とする。

例示

場合

1

VERIFY (’ABBA’, ’A’)

の値は,

2

になる。

場合

2

VERIFY (’ABBA’, ’A’, BACK = .TRUE.)

の値は,

3

になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

308

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

3

VERIFY (’ABBA’, ’AB’)

の値は,

0

になる。

13.8

標準組込みモジュール

この規格は,幾つかの組込みモジュールを規定する。処理系は,標準組込みモジュールを拡張して,この規格で規

定された組込みモジュールのほかに公開要素を提供してもよい。

注記

13.18

プログラム言語要素の名前の衝突を避けるために,標準組込みモジュールを参照するどの

USE

文にも

ONLY

句をプログラムに使用することを推奨する。

13.8.1 IEEE

モジュール

組込みモジュール

IEEE EXCEPTIONS

IEEE ARITHMETIC

,及び

IEEE FEATURES

は,箇条

14

で規定する。

13.8.2

組込みモジュール

ISO FORTRAN ENV

組込みモジュール

ISO FORTRAN ENV

は,

Fortran

環境に公開要素を提供する。処理系は,

13.8.2.1

13.8.2.8

名前付き定数を提供しなければならない。

13.8.2.1 CHARACTER STORAGE SIZE

基本整数型スカラ定数

CHARACTER STORAGE SIZE

の値は,文字記憶単位

(

16.4.3.1

)

の大きさのビット数とする。

13.8.2.2 ERROR UNIT

基本整数型スカラ定数

ERROR UNIT

の値は,誤りの通知

(

9.4

)

に使うために事前接続された外部装置を指定する。

この装置は処理系依存とし,

OUTPUT UNIT

と同じであってよい。値は

1

であってはならない。

13.8.2.3 FILE STORAGE SIZE

基本整数型スカラ定数

FILE STORAGE SIZE

の値は,ファイル記憶単位

(

9.2.4

)

のビット数を表す。

13.8.2.4 INPUT UNIT

基本整数型スカラ定数

INPUT UNIT

の値は,

READ

文中の

*

” (

9.4

)

によって指定されるものと同じ事前接続され

た外部装置を指定する。この装置は処理系依存とし,値は

1

であってはならない。

13.8.2.5 IOSTAT END

基本整数型スカラ定数

IOSTAT END

の値は,入出力文の実行中に誤り条件が発生せずにファイル終了条件が発生す

る場合に

IOSTAT

指定子

(

9.10.4

)

で指定された変数に代入される。この値は負数でなければならない。

13.8.2.6 IOSTAT EOR

基本整数型スカラ定数

IOSTAT EOR

の値は,入出力文の実行中に誤り条件 又は ファイル終了条件が発生せず,かつ

記録終了条件が発生する場合に

IOSTAT

指定子

(

9.10.4

)

で規定された変数に代入される。この値は,

IOSTAT END

の値と異なる負数でなければならない。

13.8.2.7 NUMERIC STORAGE SIZE

基本整数型スカラ定数

NUMERIC STORAGE SIZE

の値は,数値記憶単位

(

16.4.3.1

)

のビット数を表す。

13.8.2.8 OUTPUT UNIT

基本整数型スカラ定数

OUTPUT UNIT

の値は,

WRITE

文中の

*

” (

9.4

)

によって指定されるものと同じ事前接続さ

れた外部装置を指定する。この装置は処理系依存とし,値は

-1

であってはならない。

13.8.3

モジュール

ISO C BINDING

ISO C BINDING

組込みモジュールは箇条

15

で記述する。

14

例外 及び

IEEE

算術

組込みモジュール

IEEE EXCEPTIONS

IEEE ARITHMETIC

及び

IEEE FEATURES

は,例外 及び

IEEE

算術を用意す

る。これらのモジュールが提供されるかどうかは,処理系依存とする。モジュール

IEEE FEATURES

が提供されている場

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

309

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

合,この規格で定義した名前付き定数のうちどれが提供されるかは,処理系依存とする。モジュール

IEEE ARITHMETIC

は,

IEEE EXCEPTIONS

USE

文で使用するのと同じ振る舞いをし,

IEEE EXCEPTIONS

で公開のものはすべて

IEEE ARITHMETIC

で公開とする。

注記

14.1

上記のモジュールで定義する型 及び 手続自体は,組込みとはしない。

IEEE EXCEPTIONS

又は

IEEE ARITHMETIC

が参照可能である有効域では,例外

IEEE OVERFLOW

及び

IEEE DIVIDE BY ZERO

が実数型 及び 複素数型のすべての種別のデータに対して用意されている。他の例外のうち,用

意されているものは,関数

IEEE SUPPORT FLAG

(

14.10.26

)

で知ることができる。更に停止制御が用意されるかどうか

は,関数

IEEE SUPPORT HALTING

で知ることができる。その他の例外が用意される範囲は,モジュール

IEEE FEATURES

中の名前付き定数

IEEE INEXACT FLAG

IEEE INVALID FLAG

及び

IEEE UNDERFLOW FLAG

が参照できるかどうかに

よる。有効域中で

IEEE FEATURES

中の

IEEE UNDERFLOW FLAG

が参照できるとき,そこでは処理系は,下位けたあ

ふれを用意し,最低

1

種類の実数型に対して関数

IEEE SUPPORT FLAG (IEEE UNDERFLOW, X)

が真を返す。同様に,

IEEE INEXACT FLAG

又は

IEEE INVALID FLAG

が参照できるとき,処理系は,その有効域中で対応する例外を用意し,

更に最低

1

種類の実数型に対して対応する問合せ関数が真を返さなければならない。

IEEE HALTING

が参照できると

き,処理系は,その有効域中で実行停止を用意し,対応するフラグに対し,関数呼出し

IEEE SUPPORT(FLAG)

は真を

返さなければならない。

注記

14.2

IEEE EXCEPTIONS

が参照可能であるとき,

IEEE INVALID

を用意する必要はない。これは,非

IEEE

処理系にけたあふれ 及び ゼロ除算に対する用意を提供できるようにするためである。

IEEE

格を実装する計算機では,無効はこれらと同等に深刻な状態である。

注記

14.3

モジュール

IEEE FEATURES

は,

IEEE

算術の用意において,プログラマと処理系との間の連携

を適切に制御するために提供されている。処理系によっては,幾つかの

IEEE

の機能は処理系自身が

本来用意しているし,別の機能は実行時に非効率であるかもしれないし,また,別のものは本質的に

用意できないかもしれない。

IEEE FEATURES

が利用できない場合,処理系は自身が本来もっている命

令だけを用意することになるだろう。

IEEE FEATURES

を使うことで,処理系は処理時間のかかる機能

に対応した名前付き定数

(

14.1

)

を(完全性のために処理系自身の命令と同様に)定義し,不可能な機

能に対応した名前付き定数を定義しないようにできる。プログラマが

IEEE FEATURES

を参照すると

き,処理系は合理的に利用可能である

IEEE FEATURES

のすべてを用意しなければならない。プログ

ラマが,特定の機能名を参照するために

USE

文で

ONLY

句を使用した場合,処理系は対応する機能

を用意していることが望ましいが,用意していないときはそのモジュールに定義されていない名前で

あるというエラーメッセージを発生する。

IEEE FEATURES

の名前付き定数は,コンパイラにとってコマンドラインスイッチと呼ばれるものに

似ている。上のような方法で,合理的に移植可能な方法で翻訳時オプションを指定することができる。

有効域中で

IEEE FEATURES

IEEE EXCEPTIONS

又は

IEEE ARITHMETIC

が参照できない場合の用意の程度は処理系

依存とし,例外を用意する必要はない。そのような有効域に入る場合にフラグが例外通知状態のとき,処理系は,そ

こから出るときにも例外通知状態であることを保証する。逆に,入るときにフラグが例外通知状態でない場合,出る

ときにフラグが例外通知状態であるかどうかは,処理系依存とする。

IEEE ARITHMETIC

を利用することによって

IEEE

の機能が更に利用可能となる。用意の範囲は,モジュール

IEEE FEATURES

中の名前付き定数への参照可能性による。有効域中で

IEEE FEATURES

中の

IEEE DATATYPE

が参照で

きるとき,処理系は,その有効域では

IEEE

算術を用意し,最低

1

種類の実数型に対して関数呼出し

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

310

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

IEEE SUPPORT DATATYPE(X)

14.10.23

)は真を返さなければならない。同様に,有効域中で

IEEE DENORMAL

IEEE DIVIDE

IEEE INF

IEEE NAN

IEEE ROUNDING

又は

IEEE SQRT

が参照できるとき,処理系は,その有効域中で

対応する機能を用意し,最低

1

種類の実数型に対し,対応する問合せ関数は真を返さなければならない。

IEEE ROUNDING

の場合,

IEEE NEAREST

IEEE TO ZERO

IEEE UP

及び

IEEE DOWN

のすべての丸めモードに対して真を返さなければ

ならない。

用意する機能によって,処理系の処理速度が低下することもある。

IEEE EXCEPTIONS

又は

IEEE ARITHMETIC

が参

照でき,

IEEE FEATURES

が参照できないとき,用意される機能は処理系依存とする。処理系が機能を完全に提供する

のは,

IEEE FEATURES

のすべてが次の文で参照できるときとする。

USE, INTRINSIC :: IEEE_ARITHMETIC; USE, INTRINSIC :: IEEE_FEATURES

しかし,不要な機能があることによって,処理系の処理速度が低下する可能性はある。すべての場合について,用意

の範囲は問合せ関数によって知ることができる。

14.1

モジュール中で定義されている派生型 及び 定数

モジュール

IEEE EXCEPTIONS

IEEE ARITHMETIC

及び

IEEE FEATURES

では,

5

種類の派生型を定義する。ただし,

その成分はすべて非公開とする。

モジュール

IEEE EXCEPTIONS

では,次のものを定義する。

IEEE FLAG TYPE

 例外を表すフラグを識別するために定める。これが取りうる値は,モジュール内で定義され

た次の名前付き定数だけとする。

IEEE INVALID

IEEE OVERFLOW

IEEE DIVIDE BY ZERO

IEEE UNDERFLOW

及び

IEEE INEXACT

。このモジュールでは,更に名前付き配列定数として

IEEE USUAL = (/ IEEE OVERFLOW,

IEEE DIVIDE BY ZERO, IEEE INVALID /)

及び

IEEE ALL = (/ IEEE USUAL, IEEE UNDERFLOW, IEEE INEXACT

/)

を定義する。

IEEE STATUS TYPE

 現在の浮動小数点数状態を退避する。

モジュール

IEEE ARITHMETIC

では,次のものを定義する。

IEEE CLASS TYPE

 浮動小数点数の値の種類を識別するために定める。これが取りうる値は,モジュール内で定義

された次の名前付き定数だけとする。

IEEE SIGNALING NAN

IEEE QUIET NAN

IEEE NEGATIVE INF

IEEE NEGATIVE NORMAL

IEEE NEGATIVE DENORMAL

IEEE NEGATIVE ZERO

IEEE POSITIVE ZERO

IEEE POSITIVE DENORMAL

IEEE POSITIVE NORMAL

IEEE POSITIVE INF

及び

IEEE OTHER VALUE

IEEE ROUND TYPE

 丸めモードを識別するために定める。これが取りうる値は,モジュール内で定義された次の名

前付き定数だけとする。

IEEE

モードでは

IEEE NEAREST

IEEE TO ZERO

IEEE UP

及び

IEEE DOWN

。その他の

モードでは

IEEE OTHER

要素別処理演算子

==

 二つの値が同じときに真,そうでないときに偽を返す。

要素別処理演算子

/=

 二つの値が異なるときに真,そうでないときに偽を返す。

モジュール

IEEE FEATURES

では,次のものを定義する。

IEEE FEATURES TYPE

IEEE

の機能で必要とされるものを表す。これが取りうる値は,モジュール内で定義された次

の名前付き定数だけとする。

IEEE DATATYPE

IEEE DENORMAL

IEEE DIVIDE

IEEE HALTING

IEEE INEXACT FLAG

IEEE INF

IEEE INVALID FLAG

IEEE NAN

IEEE ROUNDING

IEEE SQRT

及び

IEEE UNDERFLOW FLAG

14.2

例外

ここで定める例外は,次のとおりとする。

IEEE OVERFLOW

実数の組込み演算 若しくは 組込み代入の結果が処理系依存の制限より大きな絶対値をもつ場合,又は 複素数

の組込み演算 若しくは 組込み代入の実部 若しくは 虚部が処理系依存の制限より大きな絶対値をもつ場合に起

こる。

IEEE DIVIDE BY ZERO

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

311

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

実数 又は 複素数の被除数がゼロ以外であり,かつ 除数がゼロである場合に起こる。

IEEE INVALID

実数 又は 複素数の演算 又は 代入が無効である場合に起こる。例として,実数

X

がゼロより小さい場合の

SQRT(X)

,及び 実数から整数への代入,組込み手続 又は 組込みモジュール中で定義された手続による変換にお

いて結果が表現できないほど大きい場合がある。

IEEE UNDERFLOW

実数の組込み演算 若しくは 組込み代入の結果が,処理系依存の制限より小さな絶対値をもち精度が失われる

ことが検出された場合,又は 複素数の組込み演算 若しくは 組込み代入の実部 若しくは 虚部が処理系依存の制

限より小さな絶対値をもち精度が失われることが検出された場合に起こる。

IEEE INEXACT

実数型 又は 複素数型の演算 又は 代入が厳密でない場合に起こる。

それぞれの例外は対応するフラグをもち,それらのフラグは,値として例外通知

(signaling)

又は 例外非通知

(quiet)

を取る。この値は,関数

IEEE GET FLAG

を呼び出して得ることができる。いずれの場合も初期値は例外非通知とし,

対応する例外が発生したとき例外通知になる。フラグの状態は,サブルーチン

IEEE SET FLAG

又は

IEEE SET STATUS

で変更できる。手続中でいったん状態が例外通知になったとき,サブルーチン

IEEE SET FLAG

又は

IEEE SET STATUS

で例外非通知に設定されるまで状態は例外通知のままとする。

IEEE GET FLAG

でも

IEEE GET STATUS

でもない手続に入った時点でフラグが例外通知であるとき,処理系は,入っ

た時点でフラグを例外非通知に設定し,復帰の時点で例外通知に戻す。

注記

14.4

手続の実行中にフラグが例外通知になった場合,処理系は復帰の時点で例外非通知に設定して

はならない。

宣言式の評価によって,例外が発生してもよい。

IEEE EXCEPTIONS

又は

IEEE ARITHMETIC

を参照する有効域中では,組込み手続 又は 組込みモジュール内で定義

された手続が正常に実行された場合,フラグ

IEEE OVERFLOW

IEEE DIVIDE BY ZERO

及び

IEEE INVALID

の値は,た

とえその手続の計算中にこれらのいずれかが発生したときでも,その手続に入った時点での値と同じとする。ただし,

実数 又は 複素数の結果が手続が扱うには大き過ぎる場合,

IEEE OVERFLOW

が発生する可能性がある。また,無効な

演算によって実数 又は 複素数の結果が非数になったとき(例えば

LOG(-1.0)

),

IEEE INVALID

が発生する可能性が

ある。書式の処理と組込み演算でも同様である。すなわち,最終結果に影響しない中間結果の計算を原因として,フ

ラグが例外通知の場合,それを例外非通知に設定してはならず,フラグが例外非通知の場合にそれを例外通知に設定

してはならない。

注記

14.5

実装では,組込み手続の別の版を提供してもよい。例えば,

IEEE EXCEPTIONS

又は

IEEE ARITHMETIC

を参照する有効域からの呼出しに対応する場合と他の場合で版を分けることが実用

例として考えられる。

文の列が

IEEE GET FLAG

IEEE SET FLAG

IEEE GET STATUS

IEEE SET HALTING MODE

及び

IEEE SET STATUS

呼び出さず,ある演算を実行することで例外が発生し,かつ その文の列の実行後にある変数の値もその演算に依存し
ないときに,例外通知になるかどうかは,処理系依存とする。例えば

Y

の値がゼロであるとき,次のコードにおいて

IEEE DIVIDE BY ZERO

が発生するかどうかは,処理系依存である。

X = 1.0/Y

X = 3.0

別の例を示す。

REAL, PARAMETER :: X=0.0, Y=6.0

IF (1.0/X == Y) PRINT *,

Hello world

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

312

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ここでは,処理系は

IF

文を実行しないコードを生成してもよい。これは,条件式が真になりえず,どの変数の値も

それに依存していないからである。

例外は,この規格が要求するか許容するもの以外の演算の実行中にだけ発生する可能性があるときには,発生して

はならない。例えば,次の文

IF (F(X)>0.0) Y = 1.0/Z

は,

F(X)

及び

Z

の両方がゼロである場合は,

IEEE DIVIDE BY ZERO

を発生させてはならない。また,

WHERE(A>0.0) A = 1.0/A

では,

IEEE DIVIDE BY ZERO

を発生させてはならない。一方,

X

の値が

1.0

Y

の値が

0.0

のときに次の式

X>0.00001 .OR. X/Y>0.00001

IEEE DIVIDE BY ZERO

を発生することは許される。

処理系は,

IEEE INVALID

IEEE UNDERFLOW

及び

IEEE INEXACT

を用意していなくてもよい。例外のうちに用意さ

れていないものがあるとき,対応するフラグは常に例外非通知とする。関数

IEEE SUPPORT FLAG

は,フラグが用意さ

れているかどうかを問い合わせるために用いる。

14.3

丸めモード

IEEE

国際規格で定める丸めモードは,次の四つがある。

IEEE NEAREST

。厳密な値を,表現できる最も近い値に丸める(直近丸め)。

IEEE TO ZERO

。厳密な値を,ゼロに向かう方向で表現できる最も近い値に丸める(切捨て)。

IEEE UP

。厳密な値を,

+

に向かう方向で表現できる最も近い値に丸める(切上げ)。

IEEE DOWN

。厳密な値を,

−∞

に向かう方向で表現できる最も近い値に丸める(切下げ)。

現在どのモードであるかは,関数

IEEE GET ROUNDING MODE

を用いて問い合わせることができる。結果の値は,上

の四つのうちのいずれかとし,丸めモードが

IEEE

国際規格と合致していないときは

IEEE OTHER

とする。

処理系が実行時の丸めモードの変更を用意するとき,サブルーチン

IEEE SET ROUNDING MODE

を用いて変更できる。

この機能があるモードで利用可能であるかどうかは,関数

IEEE SUPPORT ROUNDING

を用いて問い合わせることがで

きる。また関数

IEEE SUPPORT IO

を用いて書式付き入出力

(

9.4.5.13

9.5.1.12

10.6.1.2.6

)

の基数変換のときの

丸めが

IEEE

国際規格で定めたものと同じかどうかを問い合わせることができる。

IEEE SET ROUNDING MODE

及び

IEEE SET STATUS

以外の手続では,処理系はそこに入った時点での丸めモードを変

更してはならず,更に復帰の時点では丸めモードが入った時点と同じであることを保証しなければならない。

注記

14.6

一つのプログラム内では,同じ形式をもつすべての定数表現は同じ値をもつ

(

4.1.2

)

。したがっ

て,定数表現の値は,丸めモードによって影響されない。

14.4

下位けたあふれモード

処理系の中には,下位けたあふれが

IEEE

国際規格に従って準正規数となる(漸次下位けたあふれ)か,そうでは

なくてゼロになる(急衰下位けたあふれ)のかを実行時に制御できるものがある。処理系によっては,漸次下位けた

あふれモードより急衰下位けたあふれモードのほうが,通常は浮動小数点数の実行効率がよい。

下位けたあふれモードの制御は,

IEEE SET UNDERFLOW MODE

の呼出しによって行える。どちらの下位けたあふれ

モードが有効になっているかは,関数

IEEE GET UNDERFLOW MODE

を用いて問い合わせることができる。この機能が

用意されているかどうかは,関数

IEEE SUPPORT UNDERFLOW MODE

を用いて問い合わせることができる。初期状態で

の下位けたあふれモードは,処理系依存とする。

IEEE SET UNDERFLOW MODE

及び

IEEE SET STATUS

以外の手続では,

処理系はそこに入った時点での下位けたあふれモードを変更してはならず,更に復帰の時点では下位けたあふれモー

ドが入った時点と同じであることを保証しなければならない。

下位けたあふれモードは,

IEEE SUPPORT UNDERFLOW CONTROL

が真を返す型の浮動小数点数演算にだけ影響する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

313

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

14.5

停止

処理系の中には,例外が発生した後のプログラムの実行を中断するか続行するかを実行時に制御ができるものが

ある。この制御は,サブルーチン

IEEE SET HALTING MODE

の呼出しによって行える。停止時点は精密ではなく,例

外が発生した後ならいつ起こってもよい。停止の機能が用意されているかどうかは,関数

IEEE SUPPORT HALTING

用いて問い合わせることができる。初期状態での停止モードは,処理系依存とする。

IEEE SET HALTING MODE

及び

IEEE SET STATUS

以外の手続では,処理系はそこに入った時点での停止モードを変更してはならず,更に復帰の時点

では停止モードが入った時点と同じであることを保証しなければならない。

14.6

浮動小数点数状態

例外,丸めモード,下位けたあふれモード 及び 停止のそれぞれに対応して用意されているフラグ全体の値を,

浮動小数点数状態と呼ぶ。浮動小数点数状態は,型

TYPE(IEEE STATUS TYPE)

のスカラ変数に対し,サブルーチン

IEEE GET STATUS

を用いて退避し,サブルーチン

IEEE SET STATUS

を用いて設定することができる。その変数の

うち,ある特定のフラグの値を見つける機能はない。浮動小数点数状態の一部は,サブルーチン

IEEE GET FLAG

IEEE GET HALTING MODE

及び

IEEE GET ROUNDING MODE

を用いて退避し,サブルーチン

IEEE SET FLAG

IEEE SET HALTING MODE

及び

IEEE SET ROUNDING MODE

を用いて回復することができる。

注記

14.7

処理系によっては,これらのフラグを浮動小数点数状態レジスタに保持することによって全体

として退避し回復するほうが,すべてのフラグを個別に退避し回復するよりも速くなる。これらの手

続は,この機能を有効に利用するために用意されている。

注記

14.8

処理系は,例外フラグを例外通知状態に設定する以外では,

Fortran

手続の呼出しが浮動小数

点数状態を変更しないことを保証しなければならない。

14.7

例外値

IEEE

国際規格では,次のとおり,例外的な浮動小数点数の値を規定している。

準正規数は,絶対値がごく小さな数であって,精度は低い。

無限大(

+

及び

−∞

)は,けたあふれ 又は ゼロでの除算によって発生する。

非数

(NaN) (Not-a-Number)

は,未定義の値であるか,又は 無効な演算の結果生じた値とする。

この規格では,上の例外値でない値を正規

(normal)

の値と呼ぶ。

関数

IEEE IS FINITE

IEEE IS NAN

IEEE IS NEGATIVE

及び

IEEE IS NORMAL

は,それぞれ値が有限か,非数か,

負か,正規かを確かめる。関数

IEEE VALUE

は,

IEEE

国際規格が定めるそれぞれの種類の数を生成する。これには,

無限大 及び 非数を含む。また,関数

IEEE SUPPORT DENORMAL

IEEE SUPPORT INF

及び

IEEE SUPPORT NAN

を用い

て,特定の種別の実数型についてそれぞれの機能が利用可能かどうかを問い合わせることができる。

14.8 IEEE

算術

関数

IEEE SUPPORT DATATYPE

を用いて,各実数の種別について

IEEE

算術が用意されているかどうかを問い合わせ

ることができる。

IEEE

国際規格に完全に合致していることは要求しないが,正規数は厳密に

IEEE

国際規格の浮動小

数点数の正規数になっていなければならず,加算,減算 及び 乗算は少なくとも

1

種類の

IEEE

丸めモードで実装して

いなければならない。更に,

IEEE

で定める演算

rem

は関数

IEEE REM

が提供していなければならず,

IEEE

で定める

関数

copysign

scalb

logb

nextafter

及び

unordered

は,それぞれ関数

IEEE COPY SIGN

IEEE SCALB

IEEE LOGB

IEEE NEXT AFTER

及び

IEEE UNORDERED

が提供していなければならない。問合せ関数

IEEE SUPPORT DIVIDE

は,処

理系が

IEEE

国際規格で定める精度で除算を用意しているかどうかを問い合わせるためにある。加算,減算 及び 乗

算のそれぞれについて,浮動小数点数の場合,演算対象 及び 結果が正規数である限り,結果は

IEEE

国際規格で規

定するものでなければならず,浮動小数点数でない場合,結果は正しくて範囲内に収まっていなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

314

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

問合せ関数

IEEE SUPPORT NAN

は,処理系が

IEEE

非数を用意しているかどうかを問い合わせるためにある。非数

が用意されている場合,単項演算 及び

2

項演算の振る舞いは,組込み関数 及び 組込みモジュールの中の関数で定め

られたものを含めて,

IEEE

国際規格の規定と整合していなければならない。

問合せ関数

IEEE SUPPORT INF

は,処理系が

IEEE

無限大を用意しているかどうかを問い合わせるためにある。無

限大が用意されている場合,単項演算 及び

2

項演算の振る舞いは,組込み関数 及び 組込みモジュールの中の関数で

定められたものを含めて,

IEEE

国際規格の規定と整合していなければならない。

問合せ関数

IEEE SUPPORT DENORMAL

は,処理系が

IEEE

準正規数を用意しているかどうかを問い合わせるために

ある。用意している場合,単項演算 又は

2

項演算の振る舞いは,組込み関数 及び 組込みモジュールの関数で定義さ

れているものも含めて,

IEEE

国際規格の規定と整合していなければならない。

IEEE

国際規格が定める平方根関数は,

0

.

0

に対して平方根

0

.

0

を返し,精度に関する特定の要求がある。関数

IEEE SUPPORT SQRT

を用いて,特定の種別の実数に対して

SQRT

IEEE

国際規格に基づいて実装されているかどう

かを問い合わせることができる。

問合せ関数

IEEE SUPPORT STANDARD

は,実数の種別それぞれに対して,処理系が上の

IEEE

の機能をすべて用意

しているかどうかを問い合わせるためにある。

14.9

手続の表

次に示すモジュール内で定義されているすべての手続について,示されている仮引数名は,実引数のキーワード指

定をするとき,引数キーワードとして使える名前とする。

手続を分類する用語

問合せ関数

及び

変形関数

は,箇条

14

でも

13.1

と同じ意味で用いる。

14.9.1

問合せ関数

モジュール

IEEE EXCEPTIONS

は,次の問合せ関数をもつ。

IEEE SUPPORT FLAG(FLAG

[

, X

]

)

: 例外を用意しているか?

IEEE SUPPORT HALTING(FLAG)

: 

IEEE

の停止制御を用意しているか?

モジュール

IEEE ARITHMETIC

は,次の問合せ関数をもつ。

IEEE SUPPORT DATATYPE(

[

X

]

)

: 

IEEE

算術を用意しているか?

IEEE SUPPORT DENORMAL(

[

X

]

)

: 

IEEE

準正規数を用意しているか?

IEEE SUPPORT DIVIDE(

[

X

]

)

: 

IEEE

の除算を用意しているか?

IEEE SUPPORT INF(

[

X

]

)

: 

IEEE

無限大を用意しているか?

IEEE SUPPORT IO(

[

X

]

)

: 

IEEE

の書式処理を用意しているか?

IEEE SUPPORT NAN(

[

X

]

)

: 

IEEE

非数を用意しているか?

IEEE SUPPORT ROUNDING(ROUND VALUE

[

, X

]

)

: 

IEEE

丸めモードを用意しているか?

IEEE SUPPORT SQRT(

[

X

]

)

: 

IEEE

の平方根を用意しているか?

IEEE SUPPORT STANDARD(

[

X

]

)

: 

IEEE

の機能をすべて用意しているか?

IEEE SUPPORT UNDERFLOW CONTROL ([X])

: 

IEEE

の下位けたあふれ制御を用意しているか?

14.9.2

要素別処理関数

モジュール

IEEE ARITHMETIC

は,次の要素別処理関数をもつ。ただし,これらは

IEEE SUPPORT DATATYPE(X)

IEEE SUPPORT DATATYPE(Y)

が両方とも真である実数

X

及び

Y

に対して適用される。

IEEE CLASS (X)

IEEE

実数の種類。

IEEE COPY SIGN (X,Y)

IEEE

の関数

copysign

IEEE IS FINITE (X)

 値が有限かどうかを判定する。

IEEE IS NAN (X)

 値が

IEEE

非数かどうかを判定する。

IEEE IS NORMAL (X)

 値が正規かどうか,すなわち無限大,非数 又は 準正規数でないかどうかを判定する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

315

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

IEEE IS NEGATIVE (X)

 値が負かどうかを判定する。

IEEE LOGB (X)

IEEE

浮動小数点数のかさ上げ分をはずした指数部。

IEEE NEXT AFTER (X,Y)

Y

方向で

X

の隣にある表現可能な数を返す。

IEEE REM (X,Y)

IEEE

の関数

rem

。すなわち

X-Y*N

を返す。ただし,

N

X/Y

の厳密な値に最も近い整数と

する。

IEEE RINT (X)

 現在の丸めモードに従って整数に変換する。

IEEE SCALB (X,I)

X

×

2

I

を返す。

IEEE UNORDERED (X,Y)

IEEE

の関数

unordered

X

又は

Y

が非数のときに真,それ以外のときは偽。

IEEE VALUE (X,CLASS)

IEEE

浮動小数点数を生成する。

14.9.3

種別関数

モジュール

IEEE ARITHMETIC

は,次の変形関数をもつ。

IEEE SELECTED REAL KIND(

[

P, R

]

)

 精度と指数範囲が与えられた

IEEE

実数の種別型パラメタ値。

14.9.4

要素処理サブルーチン

モジュール

IEEE EXCEPTIONS

は,次の要素処理サブルーチンをもつ。

IEEE GET FLAG (FLAG,FLAG VALUE)

 例外フラグを取得する。

IEEE GET HALTING MODE (FLAG,HALTING)

 例外に対する停止モードを取得する。

14.9.5

非要素処理サブルーチン

モジュール

IEEE EXCEPTIONS

は,次の非要素処理サブルーチンをもつ。

IEEE GET STATUS (STATUS VALUE)

 浮動小数点数環境の現在の状態を取得する。

IEEE SET FLAG (FLAG,FLAG VALUE)

 例外フラグを設定する。

IEEE SET HALTING MODE (FLAG,HALTING)

 例外が発生したときに続行するか停止するかを制御する。

IEEE SET STATUS (STATUS VALUE)

 浮動小数点数環境の状態を回復させる。

要素別処理でないサブルーチン

IEEE SET FLAG

及び

IEEE SET HALTING MODE

は純粋とする。

IEEE EXCEPTIONS

含まれる要素別処理でないサブルーチンには,他に純粋のものはない。

モジュール

IEEE ARITHMETIC

は,次の要素別処理でないサブルーチンをもつ。

IEEE GET ROUNDING MODE (ROUND VALUE)

 現在の

IEEE

丸めモードを取得する。

IEEE GET UNDERFLOW MODE (GRADUAL)

 現在の下位けたあふれモードを取得する。

IEEE GET ROUNDING MODE (ROUND VALUE)

IEEE

丸めモードを取得する。

IEEE SET UNDERFLOW MODE (GRADUAL)

 下位けたあふれモードを設定する。

IEEE ARITHMETIC

に含まれる要素別処理でないサブルーチンには,純粋のものはない。

14.10

手続の要求事項

この箇条では,手続の詳細を規定する。手続名は総称名とし,個別名は記さない。関数は,すべて純粋とする。

14.9.1

14.9.2

及び

14.9.3

における組込みモジュール手続の仮引数は,

INTENT(IN)

属性をもつ。

14.9.4

及び

14.9.5

にお

ける組込みモジュール手続の仮引数は,授受特性が明示されていない場合,

INTENT(IN)

属性をもつ。例では,処理

系が基本実数型の

IEEE

算術を用意していると仮定する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

316

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

14.9

処理系は

制約

で規定された条件を翻訳時に調べるのが望ましく,その条件違反に対する処理

系の呼出しが避けられるよう,プログラマが次のようなコードを書くことに期待するのがよい。

IF (IEEE_SUPPORT_DATATYPE(X)) THEN

C = IEEE_CLASS(X)

ELSE

.

.

ENDIF

14.9.2

で一覧にした

IEEE ARITHMETIC

の要素別処理関数の実引数

X

又は

Y

が無限大 又は 非数の値をもつ場合,

その結果は

IEEE

国際規格の

6.1

及び

6.2

における一般的な規則と整合しなければならない。例えば,無限大に対す

る結果は,任意に大きな絶対値の値をもつ結果を制限したかのように構成しなければならない(そのような制限があ

るとき)。

14.10.1 IEEE CLASS (X)

機能

IEEE

実数の種類を返す。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

が偽になるとき,この手続を呼び出してはならない。

結果の特性

TYPE(IEEE CLASS TYPE)

結果の値

IEEE SUPPORT NAN(X)

が真であって,

X

の値が例外通知非数

(signaling NaN)

又は 例外非通知非数

(quiet

NaN)

であるとき,結果の値は,それぞれ

IEEE SIGNALING NAN

又は

IEEE QUIET NAN

とする。

IEEE SUPPORT INF(X)

が真であって,

X

の値が負の無限大 又は 正の無限大であるとき,結果の値は,それぞれ

IEEE NEGATIVE INF

又は

IEEE POSITIVE INF

とする。

IEEE SUPPORT DENORMAL(X)

が真であって,

X

の値が負の準正規数 又は 正の準正規数であ

るとき,結果の値は,それぞれ

IEEE NEGATIVE DENORMAL

又は

IEEE POSITIVE DENORMAL

とする。

X

の値が負の正規数,

負のゼロ,正のゼロ 又は 正の正規数であるとき,結果の値は,それぞれ

IEEE NEGATIVE NORMAL

IEEE NEGATIVE ZERO

IEEE POSITIVE ZERO

又は

IEEE POSITIVE NORMAL

とする。それ以外の場合,結果の値は

IEEE OTHER VALUE

とする。

例示

IEEE CLASS(-1.0)

は,値

IEEE NEGATIVE NORMAL

になる。

注記

14.10

結果の値

IEEE OTHER VALUE

は基本的には

IEEE

処理系であるが,そのすべてを実装しない処

理系でモジュールを実装するために必要とされる。例えば,書式付けされていないファイルに,漸次

下位けたあふれを実行できるプログラムが書き,漸次下位けたあふれを不能とするプログラムで読ん

だ場合である。

14.10.2 IEEE COPY SIGN (X, Y)

機能

IEEE

の関数

copysign

分類

要素別処理関数。

引数

引数は,実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

又は

IEEE SUPPORT DATATYPE(Y)

が偽になるとき,この手続を呼び出してはな

らない。

結果の特性

X

と同じ。

結果の値

結果の値は,絶対値として

X

のものをもち,符号は

Y

と同一とする。非数や無限大のような

IEEE

の特

殊な値についても,処理系がこれらを用意していれば,適用される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

317

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

例示

IEEE COPY SIGN(X, 1.0)

は,

ABS(X)

と同一とする。これは,

X

が非数であっても同じとする。

14.10.3 IEEE GET FLAG (FLAG, FLAG VALUE)

機能

例外フラグを取得する。

分類

要素別処理サブルーチン。

引数

FLAG

TYPE(IEEE FLAG TYPE)

でなければならない。情報を得る

IEEE

フラグを指定する。

FLAG VALUE

基本論理型でなければならない。授受特性

INTENT(OUT)

をもつ。

FLAG

の値が

IEEE INVALID

IEEE OVERFLOW

IEEE DIVIDE BY ZERO

IEEE UNDERFLOW

又は

IEEE INEXACT

の場合,結果の

値は,対応する例外フラグが例外通知のときに真,それ以外のときは偽とする。

例示

CALL IEEE GET FLAG(IEEE OVERFLOW,FLAG VALUE)

によって,

FLAG VALUE

は,フラグ

IEEE OVERFLOW

が例

外通知のときに真,例外非通知のときに偽になる。

14.10.4 IEEE GET HALTING MODE (FLAG, HALTING)

機能

例外に対する停止モードを取得する。

分類

要素別処理サブルーチン。

引数

FLAG

TYPE(IEEE FLAG TYPE)

でなければならない。情報を得る

IEEE

フラグを指定する。

IEEE INVALID

IEEE OVERFLOW

IEEE DIVIDE BY ZERO

IEEE UNDERFLOW

又は

IEEE INEXACT

のいずれかでなければならない。

HALTING

基本論理型でなければならない。授受特性

INTENT(OUT)

をもつ。

FLAG

で指定した例外が停止

を引き起こすときは真,それ以外のときは偽とする。

例示

IEEE OVERFLOW

に対する停止モードを退避し,停止しないで計算を行い,その後で停止モードを回復する例。

USE, INTRINSIC :: IEEE_ARITHMETIC

LOGICAL HALTING

...

CALL IEEE_GET_HALTING_MODE(IEEE_OVERFLOW,HALTING) !

停止モードを退避

CALL IEEE_SET_HALTING_MODE(IEEE_OVERFLOW,.FALSE.) !

停止モードを偽にする

... !

停止せずに計算を実行する

CALL IEEE_SET_HALTING_MODE(IEEE_OVERFLOW,HALTING) !

停止モードを回復

14.10.5 IEEE GET ROUNDING MODE (ROUND VALUE)

機能

現在の

IEEE

丸めモードを取得する。

分類

サブルーチン。

引数

ROUND VALUE

は,型

TYPE(IEEE ROUND TYPE)

のスカラでなければならない。授受特性

INTENT(OUT)

をも

つものとし,浮動小数点数の丸めモードを返す。返す値は,丸めモードが

IEEE NEAREST

IEEE TO ZERO

IEEE UP

又は

IEEE DOWN

のいずれかの場合はそれ,それ以外の場合は

IEEE OTHER

とする。

例示

丸めモードを退避し,丸めモードを直近丸めに設定して計算を行い,その後,丸めモードを回復する例。

USE, INTRINSIC :: IEEE_ARITHMETIC

TYPE( IEEE_ROUND_TYPE ) ROUND_VALUE

...

CALL IEEE_GET_ROUNDING_MODE(ROUND_VALUE) !

丸めモードを退避

CALL IEEE_SET_ROUNDING_MODE(IEEE_NEAREST)

... !

丸めモードを

NEAREST

にして計算を実行する

CALL IEEE_SET_ROUNDING_MODE(ROUND_VALUE) !

丸めモードを回復

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

318

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

14.10.6 IEEE GET STATUS (STATUS VALUE)

機能

浮動小数点数状態

(

14.6

)

の現在の値を取得する。

分類

サブルーチン。

引数

STATUS VALUE

は,型

TYPE(IEEE STATUS TYPE)

のスカラでなければならない。授受特性

INTENT(OUT)

もつものとし,浮動小数点数の状態を返す。

例示

例外フラグをすべて退避し,例外処理を含む計算を行い,その後,例外フラグを回復する例。

USE, INTRINSIC :: IEEE_ARITHMETIC

TYPE( IEEE_STATUS_TYPE ) STATUS_VALUE

...

CALL IEEE_GET_STATUS(STATUS_VALUE) !

フラグを退避

CALL IEEE_SET_STATUS(IEEE_ALL,.FALSE.) !

フラグを例外非通知に設定

... !

例外処理を含む計算を実行する

CALL IEEE_SET_STATUS(STATUS_VALUE) !

フラグを回復

14.10.7 IEEE GET UNDERFLOW MODE (GRADUAL)

機能

現在の下位けたあふれモード

(

14.4

)

を取得する。

分類

サブルーチン。

引数

GRADUAL

は基本論理型スカラでなければならない。授受特性

INTENT(OUT)

をもつ。その値は,現在の下位

けたあふれモードが漸次下位けたあふれである場合に真とし,現在の下位けたあふれモードが急衰下位けたあふれの

場合に偽とする。

制約

IEEE SUPPORT UNDERFLOW CONTROL(X)

がある

X

に対して真でない場合には,

IEEE GET UNDERFLOW MODE

呼び出してはならない。

例示

CALL IEEE SET UNDERFLOW MODE(.FALSE.)

の後で

CALL IEEE GET UNDERFLOW MODE(GRADUAL)

を実行する

と,

GRADUAL

に偽を設定する。

14.10.8 IEEE IS FINITE (X)

機能

値が有限かどうかを判定する。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

が偽になるとき,

IEEE IS FINITE(X)

を呼び出してはならない。

結果の特性

基本論理型。

結果の値

結果の値は,

X

が有限のとき真とする。すなわち,

IEEE CLASS(X)

IEEE NEGATIVE NORMAL

IEEE NEGATIVE DENORMAL

IEEE NEGATIVE ZERO

IEEE POSITIVE ZERO

IEEE POSITIVE DENORMAL

又は

IEEE POSITIVE NORMAL

のいずれかのときは真,それ以外のときは偽とする。

例示

IEEE IS FINITE(1.0)

は,真になる。

14.10.9 IEEE IS NAN (X)

機能

値が

IEEE

非数かどうかを判定する。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

制約

IEEE SUPPORT NAN(X)

が偽になるとき,

IEEE IS NAN(X)

を呼び出してはならない。

結果の特性

基本論理型。

結果の値

結果の値は,

X

IEEE

非数のとき真,それ以外のとき偽とする。

例示

IEEE SUPPORT SQRT(1.0)

が真になるとき,

IEEE IS NAN(SQRT(-1.0))

は真になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

319

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

14.10.10 IEEE IS NEGATIVE (X)

機能

値が負かどうかを判定する。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

が偽になるとき,

IEEE IS NEGATIVE(X)

を呼び出してはならない。

結果の特性

基本論理型。

結果の値

結果の値は,

IEEE CLASS(X)

IEEE NEGATIVE NORMAL

IEEE NEGATIVE DENORMAL

IEEE NEGATIVE ZERO

又は

IEEE NEGATIVE INF

のいずれかのときは真,それ以外のときは偽とする。

例示

IEEE IS NEGATIVE(0.0)

は,偽になる。

14.10.11 IEEE IS NORMAL (X)

機能

値が正規かどうか,すなわち無限大,非数 又は 準正規数のいずれでもないかどうかを判定する。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

が偽になるとき,

IEEE IS NORMAL(X)

を呼び出してはならない。

結果の特性

基本論理型。

結果の値

結果の値は,

IEEE CLASS(X)

IEEE NEGATIVE NORMAL

IEEE NEGATIVE ZERO

IEEE POSITIVE ZERO

又は

IEEE POSITIVE NORMAL

のいずれかのときは真,それ以外のときは偽とする。

例示

IEEE SUPPORT SQRT(1.0)

が真のとき,

IEEE IS NORMAL(SQRT(-1.0))

は偽になる。

14.10.12 IEEE LOGB (X)

機能

IEEE

浮動小数点数のかさ上げ分をはずした指数部。

分類

要素別処理関数。

引数

X

は,実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

が偽になるとき,

IEEE LOGB(X)

を呼び出してはならない。

結果の特性

X

と同じ。

結果の値

場合

1

X

の値が

0

,無限大 又は 非数のいずれでもない場合,結果は,

X

のかさ上げ分をはずした指数部と

する。この値は,

EXPONENT(X)-1

に等しい。

場合

2

X==0

の場合,

IEEE SUPPORT INF(X)

が真のとき

−∞

とする。それ以外のときは

-HUGE(X)

とし,

IEEE DIVIDE BY ZERO

が発生する。

例示

IEEE LOGB(-1.1)

は,

0.0

になる。

14.10.13 IEEE NEXT AFTER (X, Y)

機能

Y

方向で

X

の隣にある表現可能な数を返す。

分類

要素別処理関数。

引数

実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

又は

IEEE SUPPORT DATATYPE(Y)

が偽になるとき,

IEEE NEXT AFTER(X,Y)

呼び出してはならない。

結果の特性

X

と同じ。

結果の値

場合

1

X==Y

の場合,結果は

X

とする。この場合に,例外は発生しない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

320

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

2

X/=Y

の場合,結果は

Y

方向に

X

の隣にある表現可能な値とする。

0

の直近の値は,符号にかかわ

らず

0

以外の値とする。

X

が有限で

IEEE NEXT AFTER(X,Y)

が無限大のとき,

IEEE OVERFLOW

が発

生する。

IEEE NEXT AFTER(X,Y)

が準正規数のとき,

IEEE UNDERFLOW

が発生する。どちらのときも

IEEE INEXACT

が発生する。

例示

IEEE NEXT AFTER(1.0,2.0)

は,

1

.

0 +

EPSILON

(

X

)

になる。

14.10.14 IEEE REM (X, Y)

機能

IEEE

の関数

REM

分類

要素別処理関数。

引数

実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

又は

IEEE SUPPORT DATATYPE(Y)

が偽になるとき,

IEEE REM(X,Y)

を呼び出し

てはならない。

結果の特性

二つの引数のうち精度の高いほうの種別型パラメタをもつ実数型。

結果の値

結果の値は,丸めモードに関係なく厳密に

X-Y*N

でなければならない。ただし,

N

X/Y

の厳密な値に

最も近い整数とする。

|

N

X

/

Y

|

= 1

/

2

の場合,

N

は偶数でなければならない。結果がゼロになる場合そのゼロの符号

は,

X

と同じでなければならない。

例示

IEEE REM(4.0, 3.0)

1.0

IEEE REM(3.0, 2.0)

1

.

0

IEEE REM(5.0, 2.0)

1.0

になる。

14.10.15 IEEE RINT (X)

機能

現在の丸めモードに従って整数に変換する。

分類

要素別処理関数。

引数

実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

が偽になるとき,

IEEE RINT(X)

を呼び出してはならない。

結果の特性

X

と同じ。

結果の値

結果の値は,現在の丸めモードに従って

X

を整数に丸めた値とする。結果がゼロをとるときそのゼロの符

号は,

X

と同じでなければならない。

例示

現在の丸めモードが直近丸めのとき,

IEEE RINT(1.1)

1.0

になる。現在の丸めモードが切上げのとき,

IEEE RINT(1.1)

2.0

になる。

14.10.16 IEEE SCALB (X, I)

機能

X

×

2

I

を返す。

分類

要素別処理関数。

引数

X

実数型でなければならない。

I

整数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

が偽になるとき,

IEEE SCALB(X,I)

を呼び出してはならない。

結果の特性

X

と同じ。

結果の値

場合

1

X

×

2

I

が正規数として表現できる場合は,その値とする。

場合

2

X

が有限であって

X

×

2

I

が大き過ぎる場合は,

IEEE OVERFLOW

が発生する。

IEEE SUPPORT INF(X)

が真を返すとき,結果の値は無限大とする。ただし,その符号は

X

のものとする。それ以外のとき

は,

SIGN(HUGE(X),X)

とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

321

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

3

X

×

2

I

が小さ過ぎ,精度が落ちる場合は,

IEEE UNDERFLOW

が発生する。結果の値は,絶対値が

2

I

に最も近く,符号が

X

と同一の表現可能な数とする。

場合

4

X

が無限大のときは,結果は

X

と同じとする。例外は発生しない。

例示

IEEE SCALB(1.0,2)

は,

4.0

になる。

14.10.17 IEEE SELECTED REAL KIND ([P, R])

機能

最低

P

けたの

10

進精度と最低

R

10

進指数範囲が与えられた

IEEE

実数の種別型パラメタ値を返す。この

型をもつデータ実体

X

に対しては,

IEEE SUPPORT DATATYPE(X)

が真を返す。

分類

変形関数。

引数

最低

1

個の引数がなければならない。

P

(省略可能)

整数型スカラでなければならない。

R

(省略可能)

整数型スカラでなければならない。

結果の特性

基本整数型のスカラ。

結果の値

結果の値は,関数

PRECISION

の返す最低

P

けたの

10

進精度 及び 関数

RANGE

の返す最低

R

10

進指数範囲が与

えられた

IEEE

実数の種別型パラメタ値に等しい。処理系中でその種別型パラメタが利用できない場合,精度が利用

できないとき

1

,指数範囲が利用できないとき

2

,両方とも利用できないとき

3

とする。複数の種別型パラメタ

が条件を満たす場合,最小の

10

進精度をもつものの値を返す。それが複数あるときは,その中で最小のものを返す。

例示

IEEE SELECTED REAL KIND(6,30)

は,暗黙の実数近似法として

IEEE

単精度算術を用意している処理系では,

KIND(0.0)

の値になる。

14.10.18 IEEE SET FLAG (FLAG, FLAG VALUE)

機能

例外フラグに値を設定する。

分類

純粋サブルーチン。

引数

FLAG

TYPE(IEEE FLAG TYPE)

でなければならない。スカラ 又は 配列であってよい。

FLAG

の値が

IEEE INVALID

IEEE OVERFLOW

IEEE DIVIDE BY ZERO

IEEE UNDERFLOW

又は

IEEE INEXACT

の場合,対応する例外フラグに値を設定する。

FLAG

中の二つの要素が同じ値であってはならな

い。

FLAG VALUE

基本論理型でなければならない。スカラ 又は 配列であってよい。

FLAG

と形状適合していなけれ

ばならない。要素の値が真のとき,対応するフラグを例外通知に設定し,それ以外のときは例外

非通知に設定する。

例示

CALL IEEE SET FLAG(IEEE OVERFLOW,.TRUE.)

は,フラグ

IEEE OVERFLOW

を例外通知に設定する。

14.10.19 IEEE SET HALTING MODE (FLAG, HALTING)

機能

例外が発生した後,続行するか停止するかを制御する。

分類

純粋サブルーチン。

引数

FLAG

TYPE(IEEE FLAG TYPE)

で な け れ ば な ら な い 。ス カ ラ 又 は 配 列 で あって よ い 。値 は ,

IEEE INVALID

IEEE OVERFLOW

IEEE DIVIDE BY ZERO

IEEE UNDERFLOW

又は

IEEE INEXACT

のいずれかでなければならない。

FLAG

中の二つの要素が同じ値であってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

322

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

HALTING

基本論理型でなければならない。スカラ 又は 配列であってよい。

FLAG

と形状適合していなけれ

ばならない。要素の値が真のとき,対応する

FLAG

の要素で指定した例外が発生すると実行は停

止し,それ以外のときは実行を続行する。

制約

IEEE SUPPORT HALTING(FLAG)

が偽になるとき,この手続を呼び出してはならない。

例示

CALL IEEE SET HALTING MODE(IEEE DIVIDE BY ZERO,.TRUE.)

を実行し,ゼロによる除算が発生すると,プ

ログラムの実行が停止する。

注記

14.11

最初の停止モードは処理系依存である。停止時点は厳密には決まらず,例外が発生した後のあ

る時点で起こる。

14.10.20 IEEE SET ROUNDING MODE(ROUND VALUE)

機能

現在の

IEEE

丸めモードを設定する。

分類

サブルーチン。

引数

ROUND VALUE

は,型

TYPE(IEEE ROUND TYPE)

のスカラでなければならない。浮動小数点数の丸めモードを指

定する。

制約

IEEE SUPPORT DATATYPE(X)

が真になる

X

に対して

IEEE SUPPORT ROUNDING(ROUND VALUE,X)

が真にならな

ければ,

IEEE SET ROUNDING MODE(ROUND VALUE)

を呼び出してはならない。

例示

丸めモードを退避し,丸めモードを直近丸めに設定して計算を行い,その後で丸めモードを回復する例。

USE, INTRINSIC :: IEEE_ARITHMETIC

TYPE( IEEE_ROUND_TYPE ) ROUND_VALUE

...

CALL IEEE_GET_ROUNDING_MODE(ROUND_VALUE) !

丸めモードを退避

CALL IEEE_SET_ROUNDING_MODE(IEEE_NEAREST)

... !

丸めモードを直近丸めにした計算を実行する

CALL IEEE_SET_ROUNDING_MODE(ROUND_VALUE) !

丸めモードを回復

14.10.21 IEEE SET STATUS (STATUS VALUE)

機能

浮動小数点数状態

(

14.6

)

の値を回復する。

分類

サブルーチン。

引数

STATUS VALUE

は,型

TYPE(IEEE STATUS TYPE)

のスカラでなければならない。浮動小数点数の状態を返す。

値は,実行前に

IEEE GET STATUS

を呼び出して得た値でなければならない。

例示

例外フラグをすべて退避し,例外処理を含む計算を行い,その後,回復する例。

USE, INTRINSIC :: IEEE_EXCEPTIONS

TYPE( IEEE_STATUS_TYPE ) STATUS_VALUE

...

CALL IEEE_GET_STATUS(STATUS_VALUE) !

フラグを退避

CALL IEEE_SET_FLAGS(IEEE_ALL,.FALSE.) !

フラグを例外非通知に設定

... !

例外処理を含む計算を実行する

CALL IEEE_SET_STATUS(STATUS_VALUE) !

フラグを回復

注記

14.12

処理系によっては,この処理にはかなり時間がかかる。

14.10.22 IEEE SET UNDERFLOW MODE (GRADUAL)

機能

現在の下位けたあふれモードを設定する。

分類

サブルーチン。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

323

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

引数

GRADUAL

は基本論理型スカラとする。これが真のとき,現在の下位けたあふれモードを漸次下位けたあふれに

設定する。これが偽のとき,現在の下位けたあふれモードを急衰下位けたあふれに設定する。

制約

ある

X

に対して

IEEE SUPPORT UNDERFLOW CONTROL(X)

が偽になるとき,

IEEE SET UNDERFLOW MODE

を呼び

出してはならない。

例示

急衰下位けたあふれで計算を実行し,以前のモードに回復する例。

USE,INTRINSIC :: IEEE_ARITHMETIC

LOGICAL SAVE_UNDERFLOW_MODE

...

CALL IEEE_GET_UNDERFLOW_MODE(SAVE_UNDERFLOW_MODE)

CALL IEEE_SET_UNDERFLOW_MODE(GRADUAL=.FALSE.)

... !

急衰下位けたあふれで計算を実行する

CALL IEEE_SET_UNDERFLOW_MODE(SAVE_UNDERFLOW_MODE)

14.10.23 IEEE SUPPORT DATATYPE ()

又は

IEEE SUPPORT DATATYPE (X)

機能

処理系が

IEEE

算術を用意しているかどうかを問い合わせる。

分類

問合せ関数

引数

X

は,実数型のスカラ 又は 配列でなければならない。

結果の特性

基本論理型のスカラ

結果の値

引数なしで呼び出された場合はすべての実数型に対して,引数が与えられた場合はそれと同じ種別型パ

ラメタの実数型の変数に対して,処理系が

IEEE

算術を用意しているとき,結果の値は真,それ以外のときは偽とす

る。ここで

用意

とは,

14.8

の最初の段落にあるとおりとする。

例示

IEEE SUPPORT DATATYPE(1.0)

は,基本実数型が

IEEE

国際規格のものとして実装されている場合,真とな

る。ただし,下位けたあふれが起こったとき,準正規数にせずにゼロにする実装の場合でも,真となる。

14.10.24 IEEE SUPPORT DENORMAL ()

又は

IEEE SUPPORT DENORMAL (X)

機能

処理系が準正規数を用意しているかどうかを問い合わせる。

分類

問合せ関数

引数

X

は,実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

場合

1

IEEE SUPPORT DENORMAL(X)

は,

IEEE SUPPORT DATATYPE(X)

の値が真であって,

X

と同じ種別型パ

ラメタの実数型に対して処理系が準正規数(かさ上げの指数

e

= 0

及び 小数部

f

̸

= 0

をもつ。

IEEE

国際規格の

3.2

を参照)の算術演算と代入を用意している場合に結果の値は真,それ以外の場合は偽

とする。

場合

2

IEEE SUPPORT DENORMAL()

は,すべての実数型の変数

X

に対して

IEEE SUPPORT DENORMAL(X)

の値

が真であるとき,かつ そのときに限り,真とする。

例示

IEEE SUPPORT DENORMAL(X)

は,処理系が

X

に対して準正規数を用意している場合に真となる。

注記

14.13

準正規数は,実数に対する

13.4

に記した数体系に含まれず,不等式

ABS(X) < TINY(X)

を満

たす。算術演算の厳密な結果が

TINY(X)

より小さいときに通常使われる。そのような演算は,結果が

厳密でない場合,

IEEE UNDERFLOW

が発生することになる。処理系が算術演算の結果として準正規数

を返さない場合,

IEEE SUPPORT DENORMAL(X)

は偽となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

324

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

14.10.25 IEEE SUPPORT DIVIDE ()

又は

IEEE SUPPORT DIVIDE (X)

機能

処理系が

IEEE

国際規格で規定する精度をもつ除算を用意しているかどうかを問い合わせる。

分類

問合せ関数

引数

X

は,実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

場合

1

IEEE SUPPORT DIVIDE(X)

は,

X

と同じ種別型パラメタの実数型に対して,処理系が

IEEE

国際規格

で規定した精度をもつ除算を用意している場合に結果の値は真,それ以外の場合は偽とする。

場合

2

IEEE SUPPORT DIVIDE()

は,すべての実数型の変数

X

に対して

IEEE SUPPORT DIVIDE(X)

の値が真

であるとき,かつ そのときに限り,真とする。

例示

IEEE SUPPORT DIVIDE(X)

は,処理系が

X

に対して

IEEE

で規定する除算を用意している場合に真となる。

14.10.26 IEEE SUPPORT FLAG (FLAG)

又は

IEEE SUPPORT FLAG (FLAG, X)

機能

処理系が例外を用意しているかどうかを問い合わせる。

分類

問合せ関数

引数

FLAG

TYPE(IEEE FLAG TYPE)

のスカラでなければならない。

FLAG

の値は,

IEEE INVALID

IEEE OVERFLOW

IEEE DIVIDE BY ZERO

IEEE UNDERFLOW

又は

IEEE INEXACT

のいずれかでなければならない。

X

実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

場合

1

IEEE SUPPORT FLAG(FLAG,X)

は,

X

と同じ種別型パラメタの実数型に対して,指定された例外を処

理系が用意しているときに結果の値は真,それ以外のときは偽とする。

場合

2

IEEE SUPPORT FLAG(FLAG)

は,すべての実数型の変数

X

に対して

IEEE SUPPORT FLAG(FLAG,X)

値が真であるとき,かつ そのときに限り,真とする。

例示

IEEE SUPPORT FLAG(IEEE INEXACT)

は,処理系が名前付き定数

IEEE INEXACT

に対応する例外を用意してい

る場合に真となる。

14.10.27 IEEE SUPPORT HALTING (FLAG)

機能

処理系が例外の発生後にその後のプログラム実行を中断するか続行するかについての制御能力を用意している

かどうかを問い合わせる。

分類

問合せ関数

引数

FLAG

は,型

TYPE(IEEE FLAG TYPE)

のスカラでなければならない。

FLAG

の値は,

IEEE INVALID

IEEE OVERFLOW

IEEE DIVIDE BY ZERO

IEEE UNDERFLOW

又は

IEEE INEXACT

のいずれかでなければならない。

結果の特性

基本論理型のスカラ

結果の値

処理系が

FLAG

で指定した例外の発生後に,その後のプログラム実行を中断するか続行するかについての制

御能力を用意しているときは真,それ以外のときは偽とする。ここでいう用意には,

CALL IEEE SET HALTING(FLAG)

の実行によって停止モードを変更する能力を含んでいなければならない。

例示

IEEE SUPPORT HALTING(IEEE OVERFLOW)

は,処理系がけたあふれを発生した後で停止する制御能力を用意し

ているとき,真になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

325

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

14.10.28 IEEE SUPPORT INF ()

又は

IEEE SUPPORT INF (X)

機能

処理系が

IEEE

無限大の機能を用意しているかどうかを問い合わせる。

分類

問合せ関数

引数

X

は,実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

場合

1

IEEE SUPPORT INF(X)

は,

X

と同じ種別型パラメタの実数型に対して,処理系が

IEEE

の正負いず

れの無限大も用意している場合に結果の値は真,それ以外の場合は偽とする。

場合

2

IEEE SUPPORT INF()

は,すべての実数型の変数

X

に対して

IEEE SUPPORT INF(X)

の値が真である

とき,かつ そのときに限り,真とする。

例示

IEEE SUPPORT INF(X)

は,処理系が

X

に対して

IEEE

の正負の無限大を用意している場合に真となる。

14.10.29 IEEE SUPPORT IO ()

又は

IEEE SUPPORT IO (X)

機能

処理系が書式付き入出力において

IEEE

の基数変換丸め(

9.4.5.13

9.5.1.12

及び

10.6.1.2.6

参照)を用意

しているかどうかを問い合わせる。

分類

問合せ関数

引数

X

は,実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

場合

1

IEEE SUPPORT IO(X)

は,書式付き入出力(

9.4.5.13

9.5.1.12

及び

10.6.1.2.6

参照)において,

X

と同じ種別型パラメタの実数型について,処理系が

IEEE

国際規格で規定されたとおりのモード

UP

DOWN

ZERO

及び

NEAREST

に対する基数変換を用意しているときに結果の値は真,それ以外のとき

は偽とする。

場合

2

IEEE SUPPORT IO()

は,すべての実数型の変数

X

に対して

IEEE SUPPORT IO(X)

の値が真であると

き,かつ そのときに限り,真とする。

例示

IEEE SUPPORT IO(X)

は,処理系が

X

に対して

IEEE

の基数変換丸めを用意している場合に真となる。

14.10.30 IEEE SUPPORT NAN ()

又は

IEEE SUPPORT NAN (X)

機能

処理系が

IEEE

非数の機能を用意しているかどうかを問い合わせる。

分類

問合せ関数

引数

X

は,実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

場合

1

IEEE SUPPORT NAN(X)

は,

X

と同じ種別型パラメタの実数型について,処理系が

IEEE

国際規格の

非数を用意しているときに結果の値は真,それ以外のときは偽とする。

場合

2

IEEE SUPPORT NAN()

は,すべての実数型の変数

X

に対して

IEEE SUPPORT NAN(X)

の値が真である

とき,かつ そのときに限り,真とする。

例示

IEEE SUPPORT NAN(X)

は,処理系が

X

に対して

IEEE

非数を用意している場合に真となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

326

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

14.10.31

IEEE SUPPORT ROUNDING (ROUND VALUE)

又は

IEEE SUPPORT ROUNDING

(ROUND VALUE, X)

機能

処理系がそれぞれの丸めモードを用意しているかどうかを問い合わせる。

分類

問合せ関数

引数

ROUND VALUE

TYPE(IEEE ROUND TYPE)

でなければならない。

X

実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

場合

1

IEEE SUPPORT ROUNDING(ROUND VALUE,X)

は,

X

と同じ種別型パラメタの実数型に対して,

ROUND VALUE

で指定した丸めモードを処理系が用意しているときに結果の値は真,それ以外のときは

偽とする。ここでいう用意には,

CALL IEEE SET ROUNDING(ROUND VALUE)

の実行によって丸めモー

ドを変更する能力を含む。

場合

2

IEEE SUPPORT ROUNDING(ROUND VALUE)

は,すべての実数型の変数

X

に対して

IEEE SUPPORT ROUNDING(ROUND VALUE, X)

の値が真であるとき,かつ そのときに限り,真とする。

例示

IEEE SUPPORT ROUNDING(IEEE TO ZERO)

は,処理系がすべての実数に対してゼロ方向への丸めを用意してい

る場合に真になる。

14.10.32 IEEE SUPPORT SQRT ()

又は

IEEE SUPPORT SQRT (X)

機能

処理系が

IEEE

国際規格の平方根を実装しているかどうかを問い合わせる。

分類

問合せ関数

引数

X

は,実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

場合

1

IEEE SUPPORT SQRT(X)

は,

X

と同じ種別型パラメタの実数型に対して,処理系が

IEEE

国際規格の

SQRT

を実装している場合に真,それ以外は偽とする。

場合

2

IEEE SUPPORT SQRT()

は,すべての実数型の変数

X

に対して

IEEE SUPPORT SQRT(X)

の値が真であ

るとき,かつ そのときに限り,真とする。

例示

IEEE SUPPORT SQRT(X)

は,処理系が

IEEE

国際規格に従って

SQRT(X)

を実装している場合に真となる。こ

の場合,

SQRT(-0.0)

は,

0

.

0

になる。

14.10.33 IEEE SUPPORT STANDARD ()

又は

IEEE SUPPORT STANDARD (X)

機能

処理系がこの規格で定義された

IEEE

の機能をすべて用意しているかどうかを問い合わせる。

分類

問合せ関数

引数

X

は,実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

327

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合

1

IEEE SUPPORT STANDARD(X)

は,関数群

IEEE SUPPORT DATATYPE(X)

IEEE SUPPORT DENORMAL(X)

IEEE SUPPORT DIVIDE(X)

,有 効 な

FLAG

に 対 す る

IEEE SUPPORT FLAG(FLAG,X)

,有 効 な

FLAG

に対する

IEEE SUPPORT HALTING(FLAG)

IEEE SUPPORT INF(X)

IEEE SUPPORT NAN(X)

,有効な

ROUND VALUE

に対する

IEEE SUPPORT ROUNDING(ROUND VALUE,X)

及び

IEEE SUPPORT SQRT(X)

結果の値がすべて真のときに真,それ以外のとき偽とする。

場合

2

IEEE SUPPORT STANDARD()

は,すべての実数型の変数

X

に対して

IEEE SUPPORT STANDARD(X)

の値

が真であるとき,かつ そのときに限り,真とする。

例示

IEEE SUPPORT STANDARD()

は,処理系が

IEEE

国際規格 及び 非

IEEE

国際規格の両方の実数を用意してい

る場合,偽となる。

14.10.34

IEEE SUPPORT UNDERFLOW CONTROL ()

又は

IEEE SUPPORT UNDERFLOW

CONTROL (X)

機能

プログラムの実行中に,処理系が下位けたあふれモードを制御する機能を用意しているかどうかを問い合わ

せる。

分類

問合せ関数

引数

X

は,実数型でなければならない。スカラ 又は 配列であってよい。

結果の特性

基本論理型のスカラ

結果の値

場合

1

IEEE SUPPORT UNDERFLOW CONTROL(X)

は,

X

と同じ型についての浮動小数点演算に対して処理系が

下位けたあふれモードを制御する機能を用意しているときに真,それ以外のとき偽とする。

場合

2

IEEE SUPPORT UNDERFLOW CONTROL()

は,すべての浮動小数点演算に対して処理系が下位けたあふ

れモードを制御する機能を用意しているときに真,それ以外のとき偽とする。

例示

IEEE SUPPORT UNDERFLOW CONTROL(2.5)

は,基本実数型の演算に対して処理系が下位けたあふれモードを制

御する機能を用意しているときに真となる。

14.10.35 IEEE UNORDERED (X, Y)

機能

IEEE

の関数

unordered

X

又は

Y

が非数のときに真,それ以外のときは偽とする。

分類

要素別処理関数

引数

実数型でなければならない。

制約

IEEE SUPPORT DATATYPE(X)

又は

IEEE SUPPORT DATATYPE(Y)

が偽になるとき,

IEEE UNORDERED(X,Y)

を呼

び出してはならない。

結果の特性

基本論理型のスカラ

結果の値

X

若しくは

Y

,又は 両方とも非数のときに真,それ以外のときは偽とする。

例示

IEEE UNORDERED(0.0,SQRT(-1.0))

は,

IEEE SUPPORT SQRT(1.0)

が真のとき,真になる。

14.10.36 IEEE VALUE (X, CLASS)

機能

IEEE

浮動小数点数を生成する。

分類

要素別処理関数

引数

X

実数型でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

328

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

CLASS

TYPE(IEEE CLASS TYPE)

で な け れ ば な ら な い 。値 と し て ,

IEEE SUPPORT NAN(X)

が 真 の と き

IEEE SIGNALING NAN

又は

IEEE QUIET NAN

を取ることができ,

IEEE SUPPORT INF(X)

が真のとき

IEEE NEGATIVE INF

又は

IEEE POSITIVE INF

を取ることができ,

IEEE SUPPORT DENORMAL(X)

が真

のとき

IEEE NEGATIVE DENORMAL

又は

IEEE POSITIVE DENORMAL

を取ることができ,更に

IEEE NEGATIVE NORMAL

IEEE NEGATIVE ZERO

IEEE POSITIVE ZERO

又は

IEEE POSITIVE NORMAL

取ることができる。

制約

IEEE SUPPORT DATATYPE(X)

が偽になるとき,

IEEE VALUE(X,CLASS)

を呼び出してはならない。

結果の特性

X

と同じ。

結果の値

CLASS

で指定した

IEEE

実数とする。ほとんどの場合に処理系依存の値となるが,

X

の種別型パラメタ 及

CLASS

の値を固定した場合に,返る値が呼出しごとに異なっていてはならない。

例示

IEEE VALUE(1.0,IEEE NEGATIVE INF)

は,

−∞

になる。

14.11

14.14

実数型配列の内積。

MODULE DOT

!

二つの実数型

1

次元配列の内積を計算するモジュール。

!

呼出し側は,例外が停止を引き起こさないことを保証する必要がある。

USE, INTRINSIC :: IEEE_EXCEPTIONS

LOGICAL :: MATRIX_ERROR = .FALSE.

INTERFACE OPERATOR(.dot.)

MODULE PROCEDURE MULT

END INTERFACE

CONTAINS

REAL FUNCTION MULT(A,B)

REAL, INTENT(IN) :: A(:),B(:)

INTEGER I

LOGICAL OVERFLOW

IF (SIZE(A)/=SIZE(B)) THEN

MATRIX_ERROR = .TRUE.

RETURN

END IF

!

処理系は

IEEE_OVERFLOW

が例外非通知であることを保証する

MULT = 0.0

DO I = 1, SIZE(A)

MULT = MULT + A(I)*B(I)

END DO

CALL IEEE_GET_FLAG(IEEE_OVERFLOW,OVERFLOW)

IF (OVERFLOW) MATRIX_ERROR = .TRUE.

END FUNCTION MULT

END MODULE DOT

このモジュールは,

1

次元の二つの実数型配列の内積を計算する。もし配列の大きさが異なる場合,

MATRIX ERROR

に真を返す。もしけたあふれが実際の計算で起こった場合,フラグ

IEEE OVERFLOW

発生し,

MATRIX ERROR

が真となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

329

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

14.15

例外によるアルゴリズムの切替え。

USE, INTRINSIC :: IEEE_EXCEPTIONS

USE, INTRINSIC :: IEEE_FEATURES, ONLY: IEEE_INVALID_FLAG

! IEEE_USUAL

以外の例外(

IEEE_OVERFLOW

及び

IEEE_DIVIDE_BY_ZERO

!

は,常に

IEEE_EXCEPTIONS

とともに利用できる

TYPE(IEEE_STATUS_TYPE) STATUS_VALUE

LOGICAL, DIMENSION(3) :: FLAG_VALUE

...

CALL IEEE_GET_STATUS(STATUS_VALUE)

CALL IEEE_SET_HALTING_MODE(IEEE_USUAL,.FALSE.) !

処理系の初期状態

!

での設定が例外に対して停止である場合に必要となる

CALL IEEE_SET_FLAG(IEEE_USUAL,.FALSE.)

!

逆行列を求める

速い

アルゴリズムを最初に試す

MATRIX1 = FAST_INV(MATRIX) ! MATRIX

を変更しない

CALL IEEE_GET_FLAG(IEEE_USUAL,FLAG_VALUE)

IF (ANY(FLAG_VALUE)) THEN

!

速い

アルゴリズムで失敗したら

遅い

アルゴリズムを試す

CALL IEEE_SET_FLAG(IEEE_USUAL,.FALSE.)

MATRIX1 = SLOW_INV(MATRIX)

CALL IEEE_GET_FLAG(IEEE_USUAL,FLAG_VALUE)

IF (ANY(FLAG_VALUE)) THEN

WRITE (*, *)

Cannot invert matrix

STOP

END IF

END IF

CALL IEEE_SET_STATUS(STATUS_VALUE)

この例では,関数

FAST INV

は例外が発生する条件を引き起こすかもしれない。その場合,別の試

みが

SLOW INV

で行われる。それも失敗した場合,メッセージを印字してプログラムは終了する。

2

目の試みの前に,フラグを例外非通知に設定することが重要である。すべてのフラグの状態は,退避

し回復する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

330

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

14.16

フラグの試験

USE, INTRINSIC :: IEEE_EXCEPTIONS

LOGICAL FLAG_VALUE

...

CALL IEEE_SET_HALTING_MODE(IEEE_OVERFLOW,.FALSE.)

!

最初に逆行列を求める速いアルゴリズムを試す

CALL IEEE_SET_FLAG(IEEE_OVERFLOW,.FALSE.)

DO K = 1, N

...

CALL IEEE_GET_FLAG(IEEE_OVERFLOW,FLAG_VALUE)

IF (FLAG_VALUE) EXIT

END DO

IF (FLAG_VALUE) THEN

! K-1

回までが正常に実行された場合のコード

...

END IF

ここでは逆行列を求めるコードが直接に書かれ,フラグの試験を追加することによって,変換の精

度が高くなる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

331

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

14.17

高速の処理 及び その後の例外処理

REAL FUNCTION HYPOT(X, Y)

!

まれな環境において,これは例外

IEEE_OVERFLOW

を発生することがある。

!

呼出し側は例外が停止を引き起こさないことを保証する必要がある。

USE, INTRINSIC :: IEEE_ARITHMETIC

USE, INTRINSIC :: IEEE_FEATURES, ONLY: IEEE_UNDERFLOW_FLAG

! IEEE_OVERFLOW

はいつも

IEEE_ARITHMETIC

で利用できる。

REAL X, Y

REAL SCALED_X, SCALED_Y, SCALED_RESULT

LOGICAL, DIMENSION(2) :: FLAGS

TYPE(IEEE_FLAG_TYPE), PARAMETER, DIMENSION(2) :: &

OUT_OF_RANGE = (/ IEEE_OVERFLOW, IEEE_UNDERFLOW /)

INTRINSIC SQRT, ABS, EXPONENT, MAX, DIGITS, SCALE

!

処理系は入った時点でフラグを消去する。

!

最初に速いアルゴリズムを試す。

HYPOT = SQRT( X**2 + Y**2 )

CALL IEEE_GET_FLAG(OUT_OF_RANGE,FLAGS)

IF ( ANY(FLAGS) ) THEN

CALL IEEE_SET_FLAG(OUT_OF_RANGE,.FALSE.)

IF ( X==0.0 .OR. Y==0.0 ) THEN

HYPOT = ABS(X) + ABS(Y)

ELSE IF ( 2*ABS(EXPONENT(X)-EXPONENT(Y)) > DIGITS(X)+1 ) THEN

HYPOT = MAX( ABS(X), ABS(Y) )! X

又は

Y

のどちらかが無視される

ELSE !

スケーリングされて

ABS(X)

1

に近くなる。

SCALED_X = SCALE( X, -EXPONENT(X) )

SCALED_Y = SCALE( Y, -EXPONENT(X) )

SCALED_RESULT = SQRT( SCALED_X**2 + SCALED_Y**2 )

HYPOT = SCALE( SCALED_RESULT, EXPONENT(X) ) !

けたあふれを

!

引き起こすかもしれない

END IF

END IF

!

処理系は入った時点で例外通知状態であったすべてのフラグをリセットする。

END FUNCTION HYPOT

この関数は,できるだけ最速の方法で直接評価するように試みている。これはほとんどいつでもう

まくいくが,この速い計算の間に例外が起こったら,安全だがより遅い方法でこの関数を評価する。

このより遅い評価では,スケーリングをするかもしれず,しないかもしれない。極端な(とてもまれ

な)場合には,スケーリングをしないとけたあふれを引き起こす(結局のところ,

X

Y

が共にけた

あふれの限界に近いとき,真の結果はけたあふれするかもしれない。)。フラグ

IEEE OVERFLOW

又は

IEEE UNDERFLOW

が入った時点で発生していると,復帰するときに処理系によって再設定され,以前

の例外が失われる。

15 C

との相互利用可能性

Fortran

は,プログラム言語

C

の手段によって定義されている手続,及び 言語

C

の国際規格の

6.7.5.3

に規定さ

れている言語

C

の原型で定義できる手続を,実際には言語

C

の手段によって記述されていなくても引用できる手段

を用意する。逆に,言語

C

の手段によって定義された関数から

Fortran

副プログラムによって定義された手続を引用

する手段もある。更に,言語

C

の国際規格の

6.2.2

に規定されている外部結合をもつ言語

C

の変数と結合された大

域変数を宣言する手段がある。

モジュール

ISO C BINDING

は,言語

C

の型と互換性があるデータ表現の種別型パラメタを表す名前付き定数を参

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

332

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

照可能にしている。

Fortran

は,言語

C

の型に対応する派生型

(

4.5

)

及び 列挙型

(

4.6

)

を定義するための機能も用意

している。

15.1

組込みモジュール

ISO C BINDING

処理系は,組込みモジュール

ISO C BINDING

を用意しなければならない。このモジュールは,次の言語要素を参照

可能にする。

15.2

の第

2

列 及び

15.1

の第

1

列に挙げた名前をもつ名前付き定数

15.1.2

に規定する手続

C PTR

C FUNPTR

C NULL PTR

及び

C NULL FUNPTR

処理系は,これらに加えて他の公開要素を,組込みモジュール

ISO C BINDING

に用意してもよい。

注記

15.1

プログラム言語要素の名前の衝突を避けるために,組込みモジュール

ISO C BINDING

を参照す

るどの

USE

文にも

ONLY

句を使用することを推奨する。

15.1.1

モジュールにおける名前付き定数 及び 派生型

15.2

の第

2

列に挙げた言語要素は,基本整数型の名前付き定数とする。

C INT

の値は,処理系における整数型の種別型パラメタとして有効な値とする。

C SHORT

,

C LONG

,

C LONG LONG

,

C SIGNED CHAR

,

C SIZE T

,

C INT8 T

,

C INT16 T

,

C INT32 T

,

C INT64 T

,

C INT LEAST8 T

,

C INT LEAST16 T

,

C INT LEAST32 T

,

C INT LEAST64 T

,

C INT FAST8 T

,

C INT FAST16 T

,

C INT FAST32 T

,

C INT FAST64 T

,

C INTMAX T

,

C INTPTR T

の値は,処理系における整数型の種別型パラメタとして有効な値とする。連携する言語

C

処理系が対応する言語

C

の型を定義し,相互利用可能な

Fortran

種別がない場合,これらの値は

1

とする。もし言

C

処理系が対応する言語

C

の型を定義していない場合,

2

とする。

C FLOAT

C DOUBLE

及び

C LONG DOUBLE

の値は,それぞれ処理系における実数型の種別型パラメタとして有効な

値とする。言語

C

処理系の型の精度が

Fortran

処理系の実数種別のいずれかの精度と等しくない場合,

1

とする。言

C

処理系の型の範囲が

Fortran

処理系の実数種別のいずれかの範囲と等しくない場合,

2

とする。言語

C

処理系

の型の精度 及び 範囲のいずれも

Fortran

処理系の実数種別と等しくない場合,

3

とする。他の理由で相互利用可能

Fortran

処理系の種別がない場合,

4

とする。

C FLOAT COMPLEX

C DOUBLE COMPLEX

C LONG DOUBLE COMPLEX

の値は,それぞれ

C FLOAT

C DOUBLE

及び

C LONG DOUBLE

の値と同じとする。

注記

15.2

もし言語

C

処理系が

float

double

又は

long double

に二つ以上の種類を用意しているならば,

Fortran

処理系は処理系依存の手段によって,二つ以上の

ISO C BINDING

の中から選択してもよいか

もしれない。

C BOOL

の値は,処理系での論理型の種別型パラメタの有効な値 又は

1

とする。

C CHAR

の値は,処理系での文字型の種別型パラメタの有効な値 又は

1

とする。

C CHAR

の値を,

C

文字種別

(C

character kind)

という。

15.1

の言語要素は,長さパラメタが

1

である文字型の名前付き定数とする。種別型パラメタの値は,

C CHAR

1

以外の場合,

C CHAR

の値と等しくなる。その場合には,種別型パラメタの値は,基本種別のものと同じとする。

これらの定数の値を,

15.1

に示す。

C CHAR

1

以外の場合,その値は言語

C

の構文を用いて表している。これ

らの値の意味は,言語

C

の国際規格の

5.2.1

及び

5.2.2

で規定されている。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

333

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

15.1

特別な意味をもつ言語

C

の文字の名前

名前

言語

C

の規定

C CHAR

=

1

C CHAR

̸

=

1

C NULL CHAR

ナル文字

CHAR(0)

\

0’

C ALERT

警報

ACHAR(7)

\

a’

C BACKSPACE

後退

ACHAR(8)

\

b’

C FORMFEED

書式送り

ACHAR(12)

\

f’

C NEW LINE

改行

ACHAR(10)

\

n’

C CARRIAGE RETURN

復帰

ACHAR(13)

\

r’

C HORIZONTAL TAB

水平タブ

ACHAR(9)

\

t’

C VERTICAL TAB

垂直タブ

ACHAR(11)

\

v’

注記

15.3

NEW LINE(C NEW LINE)

の値は,

C NEW LINE

である

(

13.7.85

)

言語要素

C PTR

及び

C FUNPTR

は,

15.2.2

で規定する。

言語要素

C NULL PTR

は,

C PTR

型の名前付き定数とする。

C NULL PTR

の値は,言語

C

における

NULL

と同じと

する。言語要素

C NULL FUNPTR

は,

C FUNPTR

型の名前付き定数とする。

C NULL FUNPTR

の値は,言語

C

における

空ポインタの値と同じとする。

15.1.2

モジュールにおける手続

この箇条における手続名は,総称名とする(個別名ではない。)。

言語

C

の手続の引数は,

C

アドレス

(C address)

によって定義されることがある。関数

C LOC

及び

C FUNLOC

によっ

て,

Fortran

プログラムは言語

C

の機能を使うための適切な値が決定できる。関数

C ASSOCIATED

によって,

Fortran

プログラムは

C

アドレスを比較できる。サブルーチン

C F POINTER

及び

C F PROC POINTER

は,

Fortran

のポインタ

を言語

C

のポインタの指示先に関連付ける手段を提供する。

15.1.2.1 C ASSOCIATED (C PTR 1 [,C PTR 2])

機能

C PTR 1

の結合状態を示すか 又は

C PTR 1

C PTR 2

が同じ要素と結合しているかどうかを示す。

分類

問合せ関数。

引数

C PTR 1

C PTR

型 又は

C FUNPTR

型のスカラでなければならない。

C PTR 2

(省略可能)

C PTR 1

と同じ型のスカラでなければならない。

結果の特性

基本論理型スカラとする。

結果の値

場合

1

結果の値は,

C PTR 2

が省略されている場合,

C PTR 1

が言語

C

の空ポインタであるとき偽,それ以

外のときは真とする。

場合

2

結果の値は,

C PTR 2

が存在する場合,

C PTR 1

が言語

C

の空ポインタであるとき偽とする。それ以

外のとき,結果の値は,言語

C

の国際規格の

6.3.2.3

及び

6.5.9

の意味で

C PTR 1

C PTR 2

に等

しければ真,そうでなければ偽とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

334

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

15.4

C LOC

及び

C ASSOCIATED

の利用例。

USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_PTR, C_FLOAT, C_ASSOCIATED, C_LOC

INTERFACE

SUBROUTINE FOO(GAMMA) BIND(C)

IMPORT C_PTR

TYPE(C_PTR), VALUE :: GAMMA

END SUBROUTINE FOO

END INTERFACE

REAL(C_FLOAT), TARGET, DIMENSION(100) :: ALPHA

TYPE(C_PTR) :: BETA

...

IF (.NOT. C_ASSOCIATED(BETA)) THEN

BETA = C_LOC(ALPHA)

ENDIF

CALL FOO(BETA)

15.1.2.2 C F POINTER (CPTR, FPTR [,SHAPE])

機能

データポインタと

C

ポインタの対象とを結合し,その形状を指定する。

分類

サブルーチン

引数

CPTR

C PTR

型のスカラでなければならない。

INTENT(IN)

引数とする。その値は,次のいず

れかでなければならない。

(1)

相互利用可能なデータ要素の

C

アドレス

(2)

相互利用可能ではない引数をもった

C LOC

への引用の結果

CPTR

の値は,

TARGET

属性をもたない

Fortran

変数の

C

アドレスであってはならない。

FPTR

ポインタでなければならない。

INTENT(OUT)

引数とする。

(1)

CPTR

の値が相互利用可能なデータ要素の

C

アドレスである場合,

FPTR

はその要素の

型 及び 相互利用可能な型 及び 型パラメタをもつデータポインタでなければならな

い。この場合,

FPTR

CPTR

の指示先とポインタ結合する。

FPTR

が配列のとき,そ

の形状は

SHAPE

によって指定され,その下限は

1

とする。

(2)

CPTR

の値が,相互利用可能ではない引数

X

による

C LOC(X)

の引用の結果である場合,

FPTR

は,

X

と同じ型 及び 型パラメタをもった非多相的なスカラポインタでなければ

ならない。この場合,

X

又は

X

がポインタであるときその指示先は,開放されていて

はならず,その引用に対する

RETURN

文 又は

END

文の実行によって不定になって

いてはならない。

FPTR

は,

X

又は その指示先とポインタ結合する。

SHAPE

(省略可能)

整数型の

1

次元配列とする。

INTENT(IN)

引数とする。

FPTR

が配列のときに限り,

SHAPE

は存在しなければならない。その大きさは,

FPTR

の次元と等しくなければならない。

15.1.2.3 C F PROCPOINTER (CPTR, FPTR)

機能

手続ポインタを言語

C

の関数ポインタの指示先と結合する。

分類

サブルーチン

引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

335

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

CPTR

C FUNPTR

型のスカラでなければならない。

INTENT(IN)

引数とする。その値は,相互

利用可能である手続の

C

アドレスでなければならない。

FPTR

手続ポインタでなければならない。

INTENT(OUT)

引数とする。

FPTR

に対する引用仕様

は,

CPTR

の指示先を記述する原型と相互利用可能でなければならない。

FPTR

は,

CPTR

指示先とポインタ結合する。

注記

15.5

C F POINTER

及び

C F PROCPOINTER

の機能における

指示先

とは,言語

C

の国際規格の

6.2.5

で規定しているとおり,

C

ポインタによって参照される要素を意味する。

15.1.2.4 C FUNLOC (X)

機能

引数の

C

アドレスを返す。

分類

問合せ関数

引数

X

は,相互利用可能な手続 又は 相互利用可能な手続と結合した手続ポインタのいずれかでなければならない。

結果の特性

C FUNPTR

型のスカラとする。

結果の値

結果の値を,結果名

CPTR

を用いて記述する。この結果は,

C FUNPTR

が暗黙的引用仕様の手続ポイン

タ成分

PX

をもつ派生型であって,ポインタ代入

CPTR%PX => X

が実行されたかのように決定される。

この結果は,

C F PROCPOINTER

の呼出しにおける実引数

CPTR

として使うことができる。そのときの

FPTR

は,ポ

インタ代入

FPTR => X

ができる属性をもつ。そのような

C F PROCPOINTER

の呼出しは,ポインタ代入

FPTR => X

の効

果をもつ。

15.1.2.5 C LOC (X)

機能

引数の

C

アドレスを返す。

分類

問合せ関数

引数

X

(1)

又は

(2)

のいずれかでなければならない。

(1)

相互利用可能な型 及び 型パラメタをもち,次のいずれかでなければならない。

(a)

TARGET

属性をもち,相互利用可能な変数

(b)

TARGET

属性をもち,大きさゼロの配列でない割り付けられている割付け変数

(c)

結合したスカラポインタ

(2)

非多相的なスカラであり,長さ型パラメタをもたず,次のいずれかでなければならない。

(a)

TARGET

属性をもち,割付け変数でなくポインタでない変数

(b)

TARGET

属性をもち,割り付けられている割付け変数

(c)

結合したポインタ

結果の特性

C PTR

型のスカラとする。

結果の値

結果の値を,結果名

CPTR

を用いて記述する。

(1)

X

がスカラ型データ要素の場合,その結果は,

C PTR

型が

X

の型 及び 型パラメタと一致するスカラポインタ要

PX

をもつ派生型であって,ポインタ代入

CPTR%PX => X

が実行されたかのように決定される。

(2)

X

が配列データ要素の場合,その結果は,

C PTR

型が

X

の型 及び 型パラメタと一致するスカラポインタ要素

PX

をもつ派生型であって,

CPTR%PX

X

の第

1

要素にポインタ代入されたかのように決定される。

X

が相互利用可能,又は 相互利用可能な型 及び 型パラメタをもつデータ要素である場合,結果は,言語

C

処理系

CPTR

の指示先に単項演算子

&

(言語

C

の国際規格の

6.5.3.2

で規定されている。)を適用した結果として返す値と

なる。

この結果は,

C F POINTER

の呼出しにおける実引数

CPTR

として使うことができる。そのときの

FPTR

は,ポインタ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

336

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

代入

FPTR => X

ができる属性をもつ。そのような

C F POINTER

の呼出しは,ポインタ代入

FPTR => X

の効果をもつ。

注記

15.6

実引数が相互利用可能ではない型 又は 型パラメタの場合,

C LOC

の結果はそれに対する不透

明な

ハンドル

を用意する。実際の実装においては,このハンドルは引数の

C

アドレスかもしれな

い。しかし,移植可能な言語

C

の関数は,これを参照はずし(言語

C

の国際規格の

6.5.3.2

)されな

void

型の(総称の)

C

ポインタとして扱わなければならない。

15.2 Fortran

と言語

C

との言語要素間の相互利用可能性

15.2.1

15.2.6

は,

Fortran

言語要素が相互利用可能である条件を規定している。ある

Fortran

言語要素が相互利

用可能である場合,等価な言語要素が言語

C

の手段によって定義されてもよく,そのときその

Fortran

の言語要素は,

その言語

C

の言語要素と相互利用可能であるという。そのような言語

C

の言語要素が存在する必要はない。

注記

15.7

一つの

Fortran

言語要素は,二つ以上の言語

C

の言語要素と相互利用可能になりうる。

15.2.1

組込み型の相互利用可能性

15.2

は,

Fortran

組込み型と言語

C

の型との相互利用可能性を示している。特定の型パラメタ値をもつ

Fortran

組込み型が言語

C

の型と相互利用可能であるとは,表中でその型 及び 種別型パラメタ値が示すのと同じ行に言語

C

の型がある場合とする。その型が文字型である場合,相互利用可能であるためには,長さ型パラメタが省略されるか

又は 値が

1

である初期値式によって定義されるかのいずれかを必要とする。この表にある言語

C

の型と相互利用可

能である

Fortran

の型 及び 型パラメタの組合せは,挙げた言語

C

の型と適合する規定されていない言語

C

のどの型

とも相互利用可能とする。

表の

2

列目には,組込みモジュール

ISO C BINDING

によって参照可能になる名前付き定数を示している。これらの

名前付き定数の値が負の場合,その行に示す言語

C

の型と相互利用可能である

Fortran

型 及び 型パラメタの組合せ

は存在しない。

組込みの型 及び 型パラメタの組合せが相互利用可能

(interoperable)

であるとは,言語

C

のある型と相互利用可能

である場合とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

337

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

15.2

Fortran

と言語

C

の型との相互利用可能性

モジュール

ISO C BINDING

からの名前付き定数

Fortran

の型

(値が正の場合,種別型パラメタ)

言語

C

の型

a

)

INTEGER

C INT

int

C SHORT

short int

C LONG

long int

C LONG LONG

long long int

C SIGNED CHAR

signed char

unsigned char

C SIZE T

size t

C INT8 T

int8 t

C INT16 T

int16 t

C INT32 T

int32 t

C INT64 T

int64 t

C INT LEAST8 T

int least8 t

C INT LEAST16 T

int least16 t

C INT LEAST32 T

int least32 t

C INT LEAST64 T

int least64 t

C INT FAST8 T

int fast8 t

C INT FAST16 T

int fast16 t

C INT FAST32 T

int fast32 t

C INT FAST64 T

int fast64 t

C INTMAX T

intmax t

C INTPTR T

intptr t

REAL

C FLOAT

float

C DOUBLE

double

C LONG DOUBLE

long double

COMPLEX

C FLOAT COMPLEX

float Complex

C DOUBLE COMPLEX

double Complex

C LONG DOUBLE COMPLEX

long double Complex

LOGICAL

C BOOL

Bool

CHARACTER

C CHAR

char

a

)

 言語

C

の型は,言語

C

の国際規格の

6.2.5

,

7.17

及び

7.18.1

に規定されている。

注記

15.8

例えば,

C SHORT

の種別型パラメタをもつ整数型は,言語

C

short

型,又は

short

型から

typedef

を経由して)派生した言語

C

のすべての型と相互利用可能である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

338

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

15.9

言語

C

の国際規格は,非負の符号付き整数の表現は,対応する符号なし整数の値と同じであ

ると規定している。

Fortran

には,整数の符号なし種別を直接支援する用意がないので,モジュール

ISO C BINDING

は種別型パラメタ値に対する名前付き定数を参照することができない。そのかわり利

用者は,符号なしの型 及び その修飾された型すべてと相互利用可能である整数の符号付き種別を利

用することができる。これは,言語

C

unsigned char

型が,種別型パラメタ

C SIGNED CHAR

をもっ

た整数型と相互利用可能であるという,予期しない副作用を引き起こす可能性がある。

15.2.2 C

ポインタ型の相互利用可能性

C PTR

及び

C FUNPTR

は,非公開成分をもつ派生型でなければならない。

C PTR

は,すべての言語

C

の実体

ポインタ型と相互利用可能とする。

C FUNPTR

は,すべての言語

C

の関数ポインタ型と相互利用可能とする。

注記

15.10

このことは,言語

C

処理系が

Fortran

処理系の相互利用可能性の対象となる場合,言語

C

理系が,すべての言語

C

の実体ポインタ型に対して同じ表現方法をもち,かつ すべての言語

C

の関

数ポインタ型に対して同じ表現方法をもつことが必要であることを意味する。

注記

15.11

関数

C LOC

は,割り付けられた割付け変数の

C

アドレスである

C PTR

型の値を返すために

利用することができる。関数

C FUNLOC

は,ある手続の

C

アドレスである

C FUNPTR

型の値を返す

ために利用することができる。

C LOC

及び

C FUNLOC

の返却値は相互利用可能な型であり,手続 又は

割付け変数が直接許されていない文脈においても利用されるかもしれない。例えば,言語

C

の関数へ

の実引数として渡されるかもしれない。

同様に,手続 又は 割付け変数が直接許されない文脈においてさえ,

C FUNPTR

型 又は

C PTR

型は,仮引数 又は 構造体成分で利用でき,手続 又は 割付け変数の

C

アドレスである値をもつこと

ができる。

15.2.3

派生型と言語

C

の構造体型との相互利用可能性

Fortran

の派生型が相互利用可能

(interoperable)

であるとは,

BIND

属性をもつ場合とする。

C1501

(R429) BIND

属性をもつ派生型は,連続型であってはならない。

C1502

(R429) BIND

属性をもつ派生型は,型パラメタをもってはならない。

C1503

(R429) BIND

属性をもつ派生型は,

EXTENDS

属性をもってはならない。

C1504

(R429) BIND

属性をもつ派生型は,型束縛手続部をもってはならない。

C1505

(R429) BIND

属性をもつ派生型の各要素は,相互利用可能な型 及び 型パラメタをもち,ポインタで

なく割付け成分でないデータ成分とする。

注記

15.12

構文規則とその制約は,相互利用可能である派生型が,相互利用可能であるすべてのデータ実

体である成分をもつことを要求している。手続 又は 割付け配列である成分は禁止されているが,型

C FUNPTR

及び

C PTR

がそのような言語要素の

C

アドレスをもつことは許されている。

Fortran

の派生型が言語

C

の構造体型と相互利用可能であるのは,

Fortran

の派生型定義で

BIND(C) (

4.5.1

)

を指

定し,

Fortran

の派生型と言語

C

の構造体型とが同じ個数の成分をもち,

Fortran

の派生型の成分が,言語

C

の構造体

型の対応する成分の型と相互利用可能である型 及び 型パラメタをもつ場合とする。

Fortran

の派生型の成分と言語

C

の構造体型の成分とが対応しているとは,それぞれの型定義において同じ相対的な位置に宣言されている場合とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

339

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

15.13

派生型の成分と言語

C

の構造体型の対応する成分の名前は,同じでなくてもよい。

ビットフィールドをもつ言語

C

の構造体型 又は フレキシブル配列メンバをもつ言語

C

の構造体型と相互利用可能

である

Fortran

の型はない。言語

C

の共用体型と相互利用可能である

Fortran

の型はない。

15.14

言語

C

の型

myctype

と相互利用可能な

Fortran

の型

myftype

の例。

typedef struct {

int m, n;

float r;

} myctype

USE, INTRINSIC :: ISO_C_BINDING

TYPE, BIND(C) :: MYFTYPE

INTEGER(C_INT) :: I, J

REAL(C_FLOAT) :: S

END TYPE MYFTYPE

型の名前 及び 成分の名前は,

Fortran

の派生型と言語

C

の構造体型とが相互利用可能であるかど

うかを決めるためには重要でない。

注記

15.15

言語

C

の国際規格では,型が互換性をもつためにその名前 及び 成分名は同じでなければなら

ない(言語

C

の国際規格

6.2.7

)。これは,連続派生型が同じ型であるとみなす場合を規定する

Fortran

の規則に似ている。

Fortran

の派生型が言語

C

の構造体型と相互利用可能であるかどうかを決定する

ときには,この規則を適用しない。識別子の大文字小文字の区別が言語

C

では重要であるが,

Fortran

では重要ではないからである。

15.2.4

スカラ変数の相互利用可能性

Fortran

のスカラ変数が相互利用可能

(interoperable)

であるのは,その型 及び 型パラメタが相互利用可能であり,

かつ

POINTER

属性も

ALLOCATABLE

属性ももたない場合とする。

相互利用可能な

Fortran

のスカラ変数が,言語

C

のスカラ言語要素と相互利用可能であるのは,その型 及び 型パ

ラメタが相互利用可能な場合とする。

15.2.5

配列変数の相互利用可能性

Fortran

の配列変数が相互利用可能

(interoperable)

であるのは,その型 及び 型パラメタが相互利用可能であり,形

状明示配列 又は 大きさ引継ぎ配列である場合とする。

次元数が

r

であって形状が

[

e

1

. . . e

r

]

である形状明示配列 又は 大きさ引継ぎ配列は,その大きさがゼロでなく,

(

1

)

及び

(

2

)

を満たす場合,言語

C

の配列と相互利用可能とする。

(1)

次のいずれかである。

(a)

配列が大きさ引継ぎ配列であって,言語

C

の配列が大きさを指定していない。

(b)

配列が形状明示配列であって,最後の次元の寸法

(

e

r

)

が言語

C

の配列の大きさと同じである。

(2)

次のいずれかである。

(a)

r

1

と等しく,配列の要素が言語

C

の配列の要素と相互利用可能である。

(b)

r

1

より大きく,元の配列と同じ型 及び 型パラメタをもち,形状が

[

e

1

. . . e

r

1

]

である形状明示配列

が,元の言語

C

の配列の要素の型に等しい型の言語

C

の配列と相互利用可能である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

340

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

15.16

言語

C

の多次元配列の要素は配列型なので,

Fortran

1

次元配列は言語

C

の多次元配列と

は相互利用可能ではない。

注記

15.17

多相的,割付け可能 又は ポインタの配列は,相互利用可能ではありえない。そのような配列

は,形状明示配列 又は 大きさ引継ぎ配列ではない。

15.18

Fortran

の配列

INTEGER :: A(18, 3:7, *)

と相互利用可能な言語

C

の配列

int b[][5][18]

注記

15.19

言語

C

はナル文字で終端する文字列を定義していて,それは実際には文字列中のナル文字で

最後の有効な要素を示す文字型の配列である。

C CHAR

に等しい種別型パラメタをもつ

Fortran

の文字

型配列は,言語

C

の文字列と相互利用可能である。

Fortran

の順序結合

(

12.4.1.5

)

の規則では,文字型のスカラ実引数を仮引数の配列に結合できる。

これによって,

Fortran

文字の文字列を言語

C

の文字列に引数結合することができる。

Fortran

の文字列と言語

C

の文字列との間の相互利用の例を,

注記

15.23

に示す。

15.2.6

手続と手続引用仕様との相互利用可能性

Fortran

の手続が相互利用可能

(interoperable)

であるのは,

BIND

属性をもつ場合,すなわちその引用仕様に手続

言語結合指定子を指定した場合とする。

Fortran

の手続の引用仕様が言語

C

の関数原型と相互利用可能であるのは,次のすべてを満たす場合とする。

(1)

引用仕様が

BIND

属性をもつ。

(2)

次のいずれかである。

(a)

引用仕様が関数を記述し,関数の返却値が関数原型の結果と相互利用可能なスカラ変数である。

(b)

引用仕様がサブルーチンを記述し,関数原型の返却値の型が

void

である。

(3)

引用仕様の仮引数の個数が関数原型の仮引数の個数と同じである。

(4)

VALUE

属性をもつすべての仮引数が,関数原型の対応する仮引数と相互利用可能である。

(5)

VALUE

属性をもたないすべての仮引数が,ポインタ型である関数原型の仮引数に対応し,仮引数が言語

C

の仮

引数の被参照型(言語

C

の国際規格

6.2.5

,

7.17

及び

7.18.1

)の言語要素と相互利用可能である。

(6)

関数原型が省略記号

(

...

)

によって記述される可変個数の実引数をもたない。

注記

15.20

言語

C

のポインタ型の被参照型

(referenced type)

とは,言語

C

のポインタ型が指す実体の型

である。例えば,ポインタ型

int *

の被参照型は

int

である。

注記

15.21

言語

C

では,関数は可変個数の引数を取ることができる(言語

C

の国際規格

7.15

)

。この規

格では,そのような言語

C

の関数と相互利用可能とする

Fortran

の手続のための機構を用意しない。

言語

C

の関数原型の仮引数が,

Fortran

の引用仕様の仮引数に対応するのは,言語

C

の仮引数並びと

Fortran

の仮

引数並びにおいて同じ相対的な位置にある場合とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

341

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

15.22

Fortran

の手続引用仕様と言語

C

の関数原型とが相互利用可能である例。

INTERFACE

FUNCTION FUNC(I, J, K, L, M) BIND(C)

USE, INTRINSIC :: ISO_C_BINDING

INTEGER(C_SHORT) :: FUNC

INTEGER(C_INT), VALUE :: I

REAL(C_DOUBLE) :: J

INTEGER(C_INT) :: K, L(10)

TYPE(C_PTR), VALUE :: M

END FUNCTION FUNC

END INTERFACE

上の手続引用仕様は,言語

C

の関数原型と相互利用可能である。

short func(int i, double *j, int *k, int l[10], void *m)

言語

C

のポインタは,

Fortan

の型

C PTR

の仮引数に対応するか,又は

VALUE

属性をもたない

Fortran

スカラに対応する。上の例では,言語

C

のポインタ

j

及び

k

は,

Fortran

のスカラ

J

及び

K

にそれぞれ対応し,言語

C

のポインタ

m

は,

Fortran

の型

C PTR

の仮引数

M

に対応する。

15.23

言語

C

の関数原型と

Fortran

の手続引用仕様の相互利用可能性は,

Fortran

から言語

C

の関数

を呼び出す過程の一部に過ぎない。その呼出しには,四つの構成要素がある。手続引用,

Fortran

手続引用仕様,言語

C

の関数原型 及び 言語

C

の関数である。逆に言語

C

から

Fortran

の手続を呼

び出すには,関数参照,言語

C

の関数原型,

Fortran

の手続引用仕様,

Fortran

の手続が要る。参照

できるかどうかを決定するためには,四つの構成要素すべてを考慮する必要がある。

例えば,言語

C

の関数原型によって記述できる言語

C

の関数

void copy(char in[], char out[]);

は,

Fortran

から次のようにして呼び出すことができる。

USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_CHAR, C_NULL_CHAR

INTERFACE

SUBROUTINE COPY(IN, OUT) BIND(C)

IMPORT C_CHAR

CHARACTER(KIND=C_CHAR), DIMENSION(*) :: IN, OUT

END SUBROUTINE COPY

END INTERFACE

CHARACTER(LEN=10, KIND=C_CHAR) :: &

&

DIGIT_STRING = C_CHAR_’123456789’ // C_NULL_CHAR

CHARACTER(KIND=C_CHAR) :: DIGIT_ARR(10)

CALL COPY(DIGIT_SRTING, DIGIT_ARR)

PRINT ’(1X, A1)’, DIGIT_ARR(1:9)

END

手続参照は文字列の実引数をもつ。

Fortran

の順序結合

(

12.4.1.5

)

の規則によって許されていると

おり,これらは手続引用仕様本体における文字型配列の仮引数に対応している。手続引用仕様本体に

あるこれらの配列仮引数は,言語

C

の関数原型の仮引数と相互利用可能である。言語

C

の関数はこ

こでは示していないが,言語

C

の関数原型と適合すると仮定している。

15.3

言語

C

の大域変数との相互利用可能性

外部結合をもつ言語

C

の変数は,共通ブロック 又は モジュールの有効範囲で宣言された変数と相互利用できる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

342

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

そのとき,共通ブロック 又は 変数は,

BIND

属性をもつように指定する。

外部結合によって言語

C

のある変数と結合する変数は,高々一つをプログラム内で宣言することができる。一つの

変数に,二つ以上の処理系で初期値を定義してはならない。

共通ブロックを

BIND

文で指定する場合,宣言される各有効域で同じ束縛ラベルによって指定する。外部結合をも

つ言語

C

の変数が,

BIND

文で指定された共通ブロックと相互利用可能であるのは,次のいずれかの場合とする。

(1)

言語

C

の変数が構造体型であり,共通ブロックのメンバである変数が,その構造体型の対応する成分と相互利用

可能である場合。

(2)

共通ブロックが一つの変数をもち,その変数が言語

C

の変数と相互利用可能である場合。

BIND

属性をもつ

Fortran

の言語要素に対して,結合する言語

C

の言語要素がなくてもよい。

15.24

変数と共通ブロックのために

BIND

属性を利用する例。

Fortran

の変数

C EXTERN

及び

C2

は,そ

れぞれ言語

C

の変数

c extern

及び

myVariable

を相互利用している。

Fortran

の共通ブロック

COM

及び

SINGLE

が,それぞれ言語

C

の変数

com

及び

single

を相互利用している。

MODULE LINK_TO_C_VARS

USE, INTRINSIC :: ISO_C_BINDING

INTEGER(C_INT), BIND(C) :: C_EXTERN

INTEGER(C_LONG) :: C2

BIND(C, NAME=’myVariable’) :: C2

COMMON /COM/ R, S

REAL(C_FLOAT) :: R, S, T

BIND(C) :: /COM/, /SINGLE/

COMMON /SINGLE/ T

END MODULE LINK_TO_C_VARS

int c_extern;

long myVarible;

struct {float r, s;} com;

float single;

15.3.1

共通ブロック 及び 変数に対する束縛ラベル

変数 又は 共通ブロックの束縛ラベル

(binding label)

は,変数 又は 共通ブロックを連携処理系に知らせる名前を

指定する基本文字型の値とする。

変数 又は 共通ブロックが

NAME

指定子のある

BIND

属性をもち,先行空白 及び 後続空白を除いた

NAME

指定

子の式の値が長さゼロでない場合,変数 又は 共通ブロックはこれを束縛ラベルとしてもつ。束縛ラベル中の文字の

大文字と小文字との区別は,意味をもつ。変数 又は 共通ブロックが,

NAME

指定子のない

BIND

属性をもつ場合,

束縛ラベルは小文字を用いた言語要素の名前と同じとする。それ以外の場合,共通ブロックの変数は束縛ラベルをも

たない。

外部結合をもつ言語

C

の変数の束縛ラベルは,言語

C

の変数名と同じとする。外部結合をもつ言語

C

の変数と同じ

束縛ラベルをもつ,

BIND

属性をもつ

Fortran

の変数 又は 共通ブロックは,その変数と他言語結合

(

16.4.1.4

)

する。

15.4

言語

C

の関数との相互利用可能性

相互利用可能である手続は,

Fortran

以外の手段 又は

Fortran

副プログラムの手段のいずれか一つによって定義

する。

手続を

Fortran

以外の手段によって定義する場合,次のすべてを満たさなければならない。

(1)

その引用仕様と相互利用可能である言語

C

の原型によって記述する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

343

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

言語

C

の国際規格の

6.2.2

によって定義される外部結合をもつ。

(3)

その引用仕様として同じ束縛ラベルをもつ。

そのような手続を引用すると,言語

C

の原型によって記述された関数が,言語

C

の国際規格に記述されているも

のとして呼び出される。

BIND

属性をもち,同じ束縛ラベルをもち,

Fortran

の手段によって定義されている手続を言語

C

で引用すると,

Fortran

の手続が呼び出される。

Fortran

の手段によって定義された手続は,

setjmp

又は

longjmp

(言語

C

の国際規格

7.13

)を呼び出してはなら

ない。

Fortran

以外の手段によって定義された手続が

setjmp

又は

longjmp

を呼び出す場合,その手続は,

Fortran

手段によって定義された手続を呼び出してはならない。

Fortran

の手段によって定義された手続は,シグナル処理ルー

チン(言語

C

の国際規格

7.14.1

)として呼び出してはならない。

Fortran

の手段によって定義された手続 及び

Fortran

以外の手段によって定義された手続が,同じ外部ファイル上

で入出力演算を実行した場合,その結果は処理系依存とする(

9.4.3

参照)。

15.4.1

手続に対する束縛ラベル

手続の束縛ラベル

(binding label)

は,

BIND

属性をもつ手続を連携処理系に知らせる名前を指定する基本文字型の

値とする。

手続が

NAME

指定子のある

BIND

属性をもち,先行空白 及び 後続空白を除いた

NAME

指定子の式の値が長さゼ

ロでない場合,手続はこれを束縛ラベルとしてもつ。束縛ラベル中の文字の大文字と小文字の区別は,意味をもつ。

手続が

NAME

指定子のない

BIND

属性をもち,その手続が仮手続 又は 手続ポインタでない場合,その手続の束縛

ラベルは小文字を用いた手続の名前と同じとする。それ以外の場合,手続は束縛ラベルをもたない。

外部結合をもつ言語

C

の関数の束縛ラベルは,言語

C

の関数名と同じとする。

15.25

C SUB

の束縛ラベルが

"c sub"

であり,

C FUNC

の束縛ラベルが

"C funC"

である例。

SUBROUTINE C_SUB() BIND(C)

...

END SUBROUTINE C_SUB

INTEGER(C_INT) FUNCTION C_FUNC() BIND(C, NAME="C_funC")

USE, INTRINSIC :: ISO_C_BINDING

...

END FUNCTION C_FUNC

言語

C

の国際規格では,関数に

Fortran

の名前としては許されない名前を付けることができ,

Fortran

では同じ名前と考えることができる名前同士を区別する。例えば,言語

C

では,下線で始まる名前,

大文字小文字だけが異なる名前などを付けることができる。

束縛ラベルの指定によって,プログラムが連携処理系で定義された手続を引用するのに,

Fortran

の名前を使用することができる。

15.4.2

例外 及び

IEEE

算術手続

Fortran

以外の手段によって定義された手続は,

Fortran

処理系が扱っているすべての例外の扱いを変更するため

に,シグナル(言語

C

の国際規格

7.14.1

)を使用することはできない。

Fortran

以外の手段によって定義された手続は,例外フラグに例外通知を設定する方法以外では,浮動小数点数状

(

14.6

)

を変更することはできない。

Fortran

以外の手段によって定義された手続の入口における浮動小数点数の例外フラグの値は,処理系依存とする。

16

有効範囲,結合 及び 定義状態

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

344

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

言語要素は,ある 有効範囲

(scope)

内で,識別子によって識別する。有効範囲は,一つのプログラム,一つの有効

域,一つの構造構文,一つの文 又は 文の一部とする。

大域識別子

(global identifier)

は,一つのプログラム

(

2.2.1

)

を有効範囲とする。

局所識別子

(local identifier)

は,一つの有効域

(

2.2

)

を有効範囲とする。

構文内要素

(construct entity)

の識別子は,一つの構造構文(

7.4.3

7.4.4

及び

8.1

参照)を有効範囲とする。

文内要素

(statement entity)

の識別子は,一つの文 又は 文の一部

(

3.3

)

を有効範囲とする。

言語要素は,次のいずれかによって識別できる。

(1)

名前

(

3.2.1

)

(2)

文番号

(

3.2.4

)

(3)

外部入出力装置番号

(

9.4

)

(4)

未了データ転送操作の識別子

(

9.5.1.8

9.6

)

(5)

総称識別子

(

12.3.2.1

)

(6)

束縛ラベル

(

15.4.1

15.3.1

)

言語要素は,結合によって,異なる有効域において同じ識別子 又は 異なる識別子で参照したり,同じ有効域にお

いて異なる識別子で参照したりすることができる。

16.1

大域識別子の有効範囲

プログラム単位,共通ブロック,外部手続 及び 束縛ラベルをもつ言語要素は,そのプログラムの 大域要素

(global

entity)

とする。プログラム単位,共通ブロック 及び 外部手続の名前は,大域識別子とする。それらの名前は,同じ

プログラム中の他のどの大域要素の名前とも同じであってはならない。ただし,組込みモジュールが同じプログラム

中の他のプログラム単位,共通ブロック 又は 外部手続とは,同じ名前であってもよい。

プログラムの言語要素の束縛ラベルは,大域識別子とする。その束縛ラベルは,英大文字と英小文字との区別を無

視した上で,プログラムの他のどの言語要素の束縛ラベルとも同じであってはならないし,組込みモジュールではな

いそのプログラムの他のどの大域要素の名前とも同じであってはならない。そのプログラムの言語要素を,二つ以上

の束縛ラベルで識別してはならない。

注記

16.1

大域要素の名前は,同じ大域要素を識別する束縛ラベルと同じであってもよい。

注記

16.2

いろいろな種類の手続のうちで外部手続だけが大域名をもつ。実装方法によっては,内部手続,

組込み手続,組込み演算子を実装する手続,入出力操作を実装する手続など,

Fortran

プログラム中

のその他の言語要素に大域名を割り当ててもよい。そうした場合,処理系は,それらの名前がどの外

部手続の名前とも衝突しないこと,規格合致プログラム中のどの大域要素の名前とも衝突しないこと,

及び それら同士が互いに衝突しないことを保証しなければならない。例えば,規格に合致する名前に

は許されない文字を追加の名前に含めたり,そのような文字を用いて局所名とその名前が現れるプロ

グラム単位の大域名とを連結したりしてもよい。

外部入出力装置 及び 未了データ転送操作は,大域要素とする。

16.2

局所識別子の有効範囲

ある有効域内において,次の類に含まれる要素の識別子は,その有効域内の局所識別子とする。

(1)

文内要素でも構文内要素

(

16.3

)

でもない名前付き変数,名前付き定数,名前付き構造構文,

文関数,

内部手続,モ

ジュール手続,仮手続,組込み手続,抽象引用仕様,総称引用仕様,派生型,変数群名,

USE

文経由で参照され

る外部手続 及び 文番号。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

345

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

型パラメタ,型成分,及び 型束縛手続の束縛。ただし,各型ごとに類は分かれる。

(3)

引数キーワード。ただし,明示的引用仕様を伴う各手続ごとに類は分かれる。

ある有効域内において,類

(

1

)

の言語要素の局所識別子は,その有効域内で使用される大域識別子と同じ名前であっ

てはならない。ただし,その大域識別子が次の場合は除く。

(1)

USE

文で,仮称指定の参照対象名としてだけ使われる場合。

(2)

共通ブロック名

(

16.2.1

)

の場合。

(3)

総称名でもある外部手続名の場合。

(4)

有効域がそこで定義される関数副プログラムである外部関数名

(

16.2.2

)

の場合。

ある有効域内において,ある類の局所識別子は,同じ類の別の局所識別子と同じであってはならない。ただし,総

称名が,

12.3.2.1

で規定した手続の名前と同じであるか,又は 派生型

(

4.5.9

)

の名前と同じである場合は除く。ある

類の局所識別子は,別の類の局所識別子と同じであってもよい。

注記

16.3

組込み手続は,異なる言語要素として類

(

1

)

の局所識別子が同じ名前で使われる有効域内では,

それ自身の名前では参照不能になる。例えば,次のプログラムにおいて,サブルーチン

SUB

での関数

SIN

の引用は,すべて内部関数

SIN

への参照であり,同じ名前の組込み関数への参照ではない。

SUBROUTINE SUB

...

A = SIN (K)

...

CONTAINS

FUNCTION SIN (X)

...

END FUNCTION SIN

END SUBROUTINE SUB

局所識別子は,その有効域内でその言語要素を識別し,次の場合を除いて別の有効域内でも言語要素の識別に使用

してよい。

(1)

SUBROUTINE

文にサブルーチン名として書いた名前には,その

SUBROUTINE

文による有効範囲内において

だけ許される使用方法がある。その名前は,そのサブルーチンの再帰呼出し 又は 共通ブロックを識別するため

に使用できる(共通ブロックは,内部サブルーチン 及び モジュールサブルーチンのときだけ許される。)。

(2)

FUNCTION

文に関数名として書いた名前には,その

FUNCTION

文による有効範囲内においてだけ許される使

用方法がある。その名前は,結果変数,その関数の再帰呼出し 又は 共通ブロックを識別するために使用できる

(共通ブロックは,内部関数 及び モジュール関数のときだけ許される。)。

(3)

ENTRY

文に入口名として書いた名前には,その

ENTRY

文のある副プログラムの有効範囲内においてだけ許さ

れる使用方法がある。その名前は,副プログラムが関数であるときの結果変数,再帰呼出し 又は 共通ブロックを

識別するために使用できる(共通ブロックは,

ENTRY

文がモジュール副プログラムにあるときだけ許される。)。

16.2.1

共通ブロック名と同じ名前の局所識別子

有効域内の共通ブロックを識別する名前は,その有効域内で,定数 及び 組込み手続の識別に使用してはならない。

局所識別子の名前が共通ブロックの名前でもある場合,その名前の出現は,

COMMON

文 又は

SAVE

文に共通ブロッ

ク名として書いたところ以外では,すべての文脈において,その局所識別子の出現とする。

注記

16.4

組込み手続名は,その組込み手続を引用しない有効域内では共通ブロック名であってもよい。

16.2.2

関数結果

関数副プログラム内の各

FUNCTION

文 又は

ENTRY

文に対して,結果変数がある。

RESULT

句がない場合,そ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

346

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

の結果変数は,定義される関数と同じ名前をもつ。

RESULT

句がある場合,その結果変数は,

RESULT

句に指定さ

れた名前をもつ。

16.2.3

総称宣言における制限

16.2.3

では,ある有効域内で同じ総称識別子をもつ個別手続の対が満足しなければならない規則を定める。モジュー

ルにある総称手続を参照する場合,個別名が参照可能になっていない個別手続が幾つかあっても,すべての個別手続

に対してこの規則を適用する。

注記

16.5

ほとんどの有効域において,特定の総称識別子をもつ手続の可能な原型は,その有効域内で参

照可能な実体に対する名前以外の,参照可能な引用仕様宣言 及び 総称束縛である。型定義において,

それらは,親型が含んでいる総称束縛である。

二つの仮引数は,どちらもサブルーチンでなく,どちらも

TKR

適合

(

5.1.1.2

)

でない場合,区別可能

(distinguishable)

とする。

一つの有効域内において,二つの手続が,同じ総称演算子 及び 同じ個数の引数をもつ場合 又は 双方とも代入を

定義する場合には,双方の手続は,仮引数並び中のいずれかの対応する位置に,手続が区別可能となる仮引数をもた

なければならない。

一つの有効域内において,二つの手続が同じ派生型入出力総称指定

(

12.3.2.1

)

をもつ場合,それらの引数

dtv

9.5.3.7.2

参照)は,型適合していないか 又は 異なる種別型パラメタをもたなければならない。

一つの有効域内において,同じ総称名をもつ二つの手続は,双方ともサブルーチン 又は 双方とも関数でなければ

ならず,次の規則のいずれかを満たさなければならない。

(1)

双方の手続の一方 又は 他方に実体非引渡し仮データ実体があり,かつ 次の

(

a

)

の個数が

(

b

)

の個数よりも多い

こと。

(a)

一方の手続にある省略可能でなく,引渡し実体でもなく,仮データ実体が

TKR

適合をもつ,その仮デー

タ実体自身も含んだ仮データ実体の個数。

(b)

その仮データ実体と区別できない他方の手続にある,省略可能 又は 省略可能でない実体非引渡し仮デー

タ実体の個数。

(2)

双方が当該実体仮引数をもち,かつ その当該実体仮引数が区別可能である。

(3)

少なくとも一方は,次の二つの仮引数をもっている。

(a)

他方の手続がその有効な位置に仮引数をもたないか,又は その位置の仮引数が区別可能であるような,有

効な位置にある省略可能でない実体非引渡し仮引数。

(b)

他方の手続がその名前をもつ仮引数をもたないか,又は その名前をもつ仮引数が区別可能であるような,

省略可能でない実体非引渡し仮引数。

更に,位置で識別されるほうの仮引数は,仮引数並びの中で,名前で識別されるほうの仮引数と同じか 又は よ

り左側の位置にある。

仮引数の 有効な位置

(effective position)

は,どの当該実体仮引数が取り除かれた場合でも,引数並びの中のその位

置とする。

一つの有効域内において,総称名が総称組込み手続の名前と同じ場合,引用仕様宣言中の手続 及び 組込み手続が

すべて関数 又は すべてサブルーチンでないと,総称組込み手続を参照できない。総称呼出しが,引用仕様宣言中の

個別手続 及び 参照可能な総称組込み手続の個別手続の両方に当てはまる場合には,引用されるのは引用仕様宣言中

の個別手続となる。

注記

16.6

これらの規則の適用については,

C.11.2

で詳しく説明する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

347

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

16.2.4

成分,型パラメタ 及び 束縛

成分名は,それを成分とする派生型定義と同じ有効範囲をもつ。成分名は,その型の定義の外では,その型の構造

体成分の特定子の中に 又は その型の構造体構成子の成分キーワードとしてだけ書くことができる。

型パラメタ名は,それを含む派生型定義と同じ有効範囲をもつ。型パラメタ名は,その派生型の定義の外では,そ

の型に対する派生型指定子の中の型パラメタキーワードとして 又は 型パラメタ問合せの型パラメタ名としてだけ書

くことができる。

型束縛手続の束縛名

(

4.5.4

)

は,それを含む派生型定義と同じ有効範囲をもつ。束縛名は,その派生型の定義の外

では,手続参照の中の束縛名としてだけ書くことができる。

総称指定が総称名ではない場合の総称束縛は,その型の要素が参照可能なすべての有効範囲からなる有効範囲を

もつ。

成分名 又は 束縛名は,参照可能な有効範囲でだけ書くことができる。

成分 及び 束縛の参照許可属性は,

4.5.3.6

及び

4.5.4

で規定する。

16.2.5

引数キーワード

引数キーワードとして,内部手続中,モジュール手続中 又は 手続引用仕様宣言中の仮引数名は,その手続 又は 引

用仕様本体の親有効域を有効範囲とする。その仮引数名は,それを仮引数とする手続に対する手続引用にだけ書くこ

とができる。 その手続 又は 手続引用仕様本体が参照結合 又は 親子結合

(

16.4.1.2

16.4.1.3

)

によって別の有効域

内において参照可能であるとき,その引数キーワードは,その有効域内においてその手続の手続引用に対して参照可

能とする。

組込み手続の仮引数名は,引数キーワードとして,その手続を引用している有効域を有効範囲とする。その仮引数

名は,それを仮引数とする手続に対する手続引用にだけ,引数キーワードとして書くことができる。

16.3

文内要素 及び 構文内要素

DATA

文内の初期化

DO

変数 若しくは 配列構成子内の配列構成

DO

変数

,文関数定義文内の仮引数

又は

FORALL

文内

の指標変数名として指定した変数は,文内要素とする。

FORALL

構文内の指標変数名 又は

SELECT TYPE

構文内

若しくは

ASSOCIATE

構文内の結合名として指定した変数は,構文内要素とする。

DATA

文内の初期化

DO

変数 又は 配列構成子内の配列構成

DO

変数の名前は,その初期化

DO

形反復 又は 配列

構成

DO

形反復を有効範囲とする。それはスカラ変数であり,その型 及び 型パラメタは,それがその

DATA

文 又

は 配列構成子を含む有効域内の変数の名前であった場合の型 及び 型パラメタと同じとする。その型は,整数型でな

ければならない。その変数は,他の属性をもたない。

DATA

文内の

DO

形並びの初期化

DO

変数 又は 配列構成子内

の配列構成

DO

変数として名前を指定しても,その文を含む有効域を有効範囲とする変数が暗黙的に宣言されたとは

みなさない。

FORALL

文 又は

FORALL

構文の指標変数名として指定した変数の名前は,その文 又は 構造構文を有効範囲と

する。それはスカラ変数であり,その型 及び 型パラメタは,それがその

FORALL

文 又は

FORALL

構文を含む有

効域内の変数の名前であった場合の型 及び 型パラメタと同じとする。その型は,整数型でなければならない。その

変数は,他の属性をもたない。

FORALL

文 又は

FORALL

構文内の指標変数として名前を指定しても,その文 又は

構文を含む有効域を有効範囲とする変数が暗黙的に宣言されたとはみなさない。

文関数定義文中に仮引数として書いた変数の名前は,その文を有効範囲とする。その名前の型 及び 型パラメタは,それがその文関数を含む有効域内の変数の名前

であった場合の型 及び 型パラメタと同じとする。 その変数は,他の属性をもたない。

ある文の有効域において,大域識別子 又は

16.2

の類

(1)

に属する局所識別子は,共通ブロック名 及び スカラ変

数名を除いて,その文の文内要素の名前であってはならない。文内要素の有効範囲内では,他の文内要素は,それと

同じ名前をもってはならない。

ある文の有効域において参照可能な大域識別子 又は 局所識別子がその文の文内要素の名前と同じである場合,そ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

348

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

の名前は,文内要素の有効範囲内では文内要素の名前として解釈される。同じ文中の文内要素の有効範囲外の部分も

含めて,その有効域の他の場所では,その名前は,大域識別子 又は 局所識別子として解釈される。

FORALL

文 又は

FORALL

構文の有効域において,大域識別子 又は

16.2

の類

(1)

に属する局所識別子は,共通

ブロック名 及び スカラ変数名を除いて,それらの指標変数名のいずれとも同じであってはならない。入れ子になっ

FORALL

文 又は

FORALL

構文の指標変数名は,それに含まれる

FORALL

構文のいずれの指標変数名とも同じ

であってはならない。

FORALL

文 又は

FORALL

構文の有効域において参照可能な大域識別子 又は 局所識別子がその指標変数名と同

じ名前である場合,その名前は,

FORALL

文 又は

FORALL

構文の有効範囲内では,指標変数名として解釈される。

その有効域の他の場所では,その名前は,大域識別子 又は 局所識別子として解釈される。

SELECT TYPE

構文の結合名は,構文のそれぞれのブロックで別々の有効範囲をもつ。それぞれのブロックにお

いて,結合名は,

8.1.5.2

で規定する宣言時の型,実行時の型,型パラメタ,次元数 及び 上下限をもつ。

ASSOCIATE

構文の結合名は,そのブロックの有効範囲をもつ。結合名は,

8.1.4.2

で規定する宣言時の型,実行

時の型,型パラメタ,次元数 及び 上下限をもつ。

SELECT TYPE

構文 又は

ASSOCIATE

構文の有効域において参照可能な大域識別子 又は 局所識別子がその結合

名と同じ名前である場合,その名前は,

SELECT TYPE

構文 又は

ASSOCIATE

構文のブロックでは,結合名とし

て解釈される。同じ有効域の他の場所では,その名前は,大域識別子 又は 局所識別子として解釈される。

16.4

結合

名前結合,ポインタ結合,記憶列結合 又は 継承結合によって,二つの要素を結合することができる。

16.4.1

名前結合

名前結合

(name association)

は,引数結合,参照結合,親子結合,他言語結合 及び 構文結合の五つの形をもつ。

引数結合,参照結合 及び 親子結合は,ある有効域内で既知の要素を別の有効域内で参照できるようにする。

16.4.1.1

引数結合

引数結合の規則は,箇条

12

に定める。

12.4

の規定のとおり,手続引用の実行は,実引数と対応する仮引数との間

の結合を確立する。 引数結合は,順序結合

(

12.4.1.5

)

であってもよい。

仮引数の名前は,結合されている実引数がある場合でも,その実引数の名前と異なっていてよい。引用される手続

においては,その仮引数名によって,結合されている実引数を識別し,参照することができる。

注記

16.7

実引数は,単なる変数 又は 定数でない式のように,名前なしのデータ要素であってもよい。

手続引用の実行が終了すると,その引用によって確立されたすべての引数結合が終了する。その手続の仮引数は,

その手続の次の呼出しによって,全く異なる実引数と結合してもよい。

16.4.1.2

参照結合

参照結合

(use association)

は,

USE

文に指定した別の有効域内の名前の結合とする。 参照結合の規則は,

11.2.1

に定める。それらの規則では,参照する要素の仮称指定を許している。参照結合は,ある有効域内において別の有効

域内で定義された要素への参照を許し,プログラムの実行中ずっと有効とする。

16.4.1.3

親子結合

内部副プログラム,モジュール副プログラム 及び 派生型定義は,親子結合

(host association)

によって,親有効

域の名前付き要素を参照することができる。引用仕様本体は,親子結合によって,その引用仕様本体の

IMPORT

で指定した親有効域の名前付き要素を参照することができる。親子結合によって参照される要素は,親有効域での名

前と同じ名前で識別され,親有効域での属性と同じ属性をもつ。ただし,親有効域の要素が

VOLATILE

属性 又は

ASYNCHRONOUS

属性をもっていなくても,参照される要素はそれらをもつことができる。参照できる要素は,名

前付きデータ実体,派生型,抽象引用仕様,手続,総称識別子

(

12.3.2.1

)

及び 変数群とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

349

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

参照結合によって参照される要素が親有効域の要素と同じ非総称名をもっているときは,その親有効域の要素は,

親子結合によって参照することはできない。その有効域において,

EXTERNAL

文,手続宣言文 若しくは 引用仕様

本体で外部手続名として宣言したか 又は

USE

文にモジュール名として指定した名前は大域識別子となる。この名前

を非総称名としてもつ親有効域の要素は,その名前によって参照することはできない。有効域内に書いた次の

(

1

)

(

16

)

の名前は,局所要素の名前とし,この名前を非総称名としてもつ親有効域の要素は,親子結合の名前によって参

照することはできない。

(1)

文関数定義文中 又は

型宣言文のデータ要素宣言中の関数名

(2)

型宣言文のデータ要素宣言中,

POINTER

文中,

SAVE

文中,

ALLOCATABLE

文中 又は

TARGET

文中の実

体名

(3)

TYPE

文の型パラメタ名

(4)

PARAMETER

文の名前付き定数定義中の定数の名前

(5)

DIMENSION

文中の配列名

(6)

COMMON

文の共通ブロック実体中の変数名

(7)

COMMON

文の共通ブロック実体中の手続ポインタ名

(8)

DATA

文で全体 又は 一部が初期化される変数の名前

(9)

EQUIVALENCE

文で全体 又は 一部が結合される実体の名前

(10)

FUNCTION

文中,

SUBROUTINE

文中,

ENTRY

文中

又は 文関数定義文中

の仮引数名

(11)

FUNCTION

文中 又は

ENTRY

文中の結果名

(12)

引用仕様本体で宣言された要素の名前

(13)

INTRINSIC

文中の組込み手続名

(14)

NAMELIST

文中の変数群名

(15)

INTERFACE

文の総称指定中の総称名

(16)

名前付き構造構文の名前

有効域が派生型の定義 又は 副プログラムの親有効域である場合,その派生型の名前 又は その副プログラムで定

義されたどの手続の名前も,その有効域においては局所識別子であり,この名前を非総称名としてもつ親有効域の要

素をその名前によって参照することはできない。副プログラムの局所識別子は,その親有効域から参照することはで

きない。

注記

16.8

ASYNCHRONOUS

文 又は

VOLATILE

文で指定する名前は,局所変数の名前である必要はな

い。内部手続 又は モジュール手続において,親子結合によって参照可能な変数が

ASYNCHRONOUS

文 又は

VOLATILE

文で指定されているとき,その親有効域の変数には,その局所的な有効範囲内で

ASYNCHRONOUS

属性 及び

VOLATILE

属性が与えられる。

親有効域の要素と同じ名前の局所変数の一部 又は 全体が

DATA

文で初期化されていることだけでその親有効域の

要素が参照不能となる場合には,その局所変数は,その

DATA

文より前で引用

又は 確定

することはできない。

親有効域の派生型名が参照不能である場合でも,その型のデータ要素 及び そのようなデータ要素の部分実体は参

照可能にすることができる。

注記

16.9

引用仕様本体は,

IMPORT

文によって参照可能となる要素だけを親子結合によって参照する。

暗黙的引用仕様をもつ外部手続 又は 仮手続が親子結合によって参照される場合,その手続は,その親有効域で

EXTERNAL

属性をもたなければならない。その手続が内部の有効域で関数として呼び出される場合,その型 及び

型パラメタは,親有効域で確定していなければならない。

EXTERNAL

属性をもつ関数の型 及び 型パラメタは,そ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

350

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

の有効域でそれらを明示的に宣言するか,その関数を呼び出すか,モジュールから関数を参照するか,又は その型

及び 型パラメタを確定する親有効域から関数を参照する場合,有効域内で確定となる。

組込み手続を親子結合によって参照する場合,その手続は,親有効域内で組込みであることを確定しなければなら

ない。組込み手続は,有効域で明示的に

INTRINSIC

属性を与えるか,組込み手続として呼び出すか,モジュールか

ら手続を参照するか,又は 組込みであることが確定している親有効域から手続を参照するか,そのいずれかの場合,

その有効域内で組込みであることが確定となる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

351

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

16.10

親副プログラム 及び 内部副プログラムには,次に示すように,参照結合している同一の要素,

又は 参照結合している異なる要素が含まれていてもよい。

MODULE B; REAL BX, Q; INTEGER IX, JX; END MODULE B

MODULE C; REAL CX; END MODULE C

MODULE D; REAL DX, DY, DZ; END MODULE D

MODULE E; REAL EX, EY, EZ; END MODULE E

MODULE F; REAL FX; END MODULE F

MODULE G; USE F; REAL GX; END MODULE G

PROGRAM A

USE B; USE C; USE D

...

CONTAINS

SUBROUTINE INNER_PROC (Q)

USE C

!

不要。

USE B, ONLY: BX

!

他の

IX

及び

JX

が,

INNER_PROC

内で参照可能でなければ,

!

参照可能な要素は,

BX

IX

及び

JX

である。

! Q

が仮引数なので,

Q

は,

INNER_PROC

では局所的である。

USE D, X => DX

!

参照可能な要素は,

DX

DY

及び

DZ

である。

! X

は,

INNER_PROC

の中では,

DX

に対する局所名である。

!

他の

DX

という要素が,

INNER_PROC

に対して局所的でなければ,

! X

DX

は,同じ要素を示す。

USE E, ONLY: EX

! EX

は,

INNER_PROC

内では参照可能であるが,プログラム

A

!

では参照できない。

EY

及び

EZ

は,

INNER_PROC

内でもプログ

!

ラム

A

内でも参照できない。

USE G

! FX

及び

GX

は,

INNER_PROC

内で参照可能である。

...

END SUBROUTINE INNER_PROC

END PROGRAM A

プログラム

A

が,文

USE B

を含んでいるので,

INNER PROC

が,文

USE B, ONLY: BX

を含んでいても,モジュール

B

内のすべての要素は,

Q

を除き

INNER PROC

内で参照できる。キーワー

ONLY

をもつ

USE

文は,名前を書いた要素だけの参照を指定するものであるが,有効域内では指定

した変数だけしかそのモジュールから参照できない,ということを指定するものではない。

注記

16.11

親子結合についての他の例は,

C.11.1

を参照。

16.4.1.4

他言語結合

他言語結合は,

BIND

属性をもつモジュール変数と相互利用可能な言語

C

の変数との間 及び

Fortran

の共通ブロッ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

352

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

クと相互利用可能な言語

C

の変数との間で生じる(

15.3

参照)。そのような結合は,プログラムの実行中は常に有効

とする。

16.4.1.5

構文結合

SELECT TYPE

文の実行は,その構文の選択子と結合名との結合を確定する。

ASSOCIATE

文の実行は,その構

文のそれぞれの選択子とそれに対応する結合名との結合を確定する。

選択子が割付け要素ならば,割付け済みでなければならない。結合名はデータ実体と結合し,

ALLOCATABLE

性をもたない。

選択子が

POINTER

属性をもつならば,結合されていなければならない。結合名はポインタの指示先と結合し,

POINTER

属性をもたない。

選択子がベクトル添字をもつ部分配列以外の変数である場合,選択子で指定されたデータ実体と結合する。それ以

外の場合,選択された式の値と結合する。その式は,ブロックの実行に先立って評価される。

それぞれの結合名は,ブロックの実行中,対応する選択子と結合している。ブロックの中では,それぞれの選択子

が,対応する結合名によって識別され,参照可能となる。

注記

16.12

結合名とデータ実体との結合は,ブロックの実行に先立って確定し,選択子の添字 及び 部分

列範囲で使われる変数に対するその後の変化に影響しない。

16.4.2

ポインタ結合

ポインタと指示先との間のポインタ結合は,ポインタの引用によってその指示先を引用できるようにする。プログ

ラム実行中における異なる時点で,ポインタは,結合状態が不定になったり,異なる指示先と結合したり,空状態に

なったりできる。ポインタが指示先と結合している場合,そのポインタの定義状態は,指示先の定義状態に応じて,

確定 又は 不定とする。ポインタが無指定の型パラメタ 又は 形状をもつ場合,それらの値は指示先から引き継がれ

る。ポインタが多相的である場合,その実行時の型は,指示先の実行時の型とする。

16.4.2.1

ポインタ結合状態

ポインタは,

結合している

空状態

又は

不定

の ポインタ結合状態

(pointer association status)

をもつこと

ができる。結合状態は,プログラムの実行中に変化してもよい。ポインタの初期の結合状態は,明示的 又は 暗黙的

に初期化しない限り,不定とする。ポインタは,初期化することによって空状態にすることができる。

注記

16.13

モジュールプログラム単位中のポインタは,参照結合によって副プログラム中で参照すること

ができる。そのようなポインタは,その副プログラム中で宣言された指示先が保存されない限り,そ

の指示先より長い生存期間をもつ。そのため,そのようなポインタが局所的な指示先と結合されてい

る場合,その副プログラム中で定義された手続が実行を終了した時,そのポインタが

遊離した

状態

になったまま,その指示先が存在しなくなる可能性がある。この規格では,そのようなポインタは不

定な結合状態をもつとみなされる。そのようなポインタは,状態が再確定されるまで,プログラム中

で再び使用してはならない。この規格は,処理系に対して,ポインタの指示先がいつ存在しなくなっ

たかを検出できるようにすることを要求しない。

16.4.2.1.1

ポインタが結合している状態になる場合

ポインタは,次のいずれかの場合,結合した状態になる。

(1)

ポインタが,そのポインタを引用する

ALLOCATE

文の実行の結果,割り付けられた

(

6.3.1

)

(2)

ポインタに,結合した状態にある指示先

(

7.4.2

)

か 又は

TARGET

属性をもつ指示先がポインタ代入された。た

だし,指示先が割付け配列であれば,それが割り付けられているときだけとする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

353

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

16.4.2.1.2

ポインタが空状態になる場合

ポインタは,次のいずれかの場合,空状態になる。

(1)

ポインタが

NULLIFY

文で結合を解除された

(

6.3.2

)

(2)

ポインタが

DEALLOCATE

文で解放された

(

6.3.3

)

(3)

ポインタに空状態のポインタがポインタ代入

(

7.4.2

)

された。

(4)

ポインタが,派生型の実体の末端成分であり,その成分が型定義において暗黙的初期値指定をもち,かつ 次のい

ずれかの条件を満たしている。

(a)

この実体を,ポインタでなく

ALLOCATABLE

属性をもたない

INTENT(OUT)

属性の仮引数に対応する

実引数とする手続を引用した。

(b)

この実体を,ポインタでなく

SAVE

属性も

ALLOCATABLE

属性ももたず,参照結合 又は 親子結合で

参照されない局所実体としてもつ手続を引用した。

(c)

この実体を割り付けた。

16.4.2.1.3

ポインタの結合状態が不定となる場合

ポインタの結合状態は,次のいずれかの場合,不定となる。

(1)

ポインタに結合状態が不定である指示先がポインタ代入された。

(2)

ポインタの指示先がそのポインタ以外によって解放された。

(3)

割付け転送手続

(

13.7.82

)

が引数

FROM

と結合したポインタ 及び 引数

TO

と結合した

TARGET

属性をもたない

実体をもって実行された。

(4)

RETURN

文 又は

END

文の実行によって,そのポインタの指示先が不定[

16.5.6

の項目

(

3

)

]になった。

(5)

RETURN

文 又は

END

文の実行によって手続が終了し,そのポインタが手続を定義している副プログラムで宣

言 又は 参照された。ただし,そのポインタが次のいずれかである場合を除く。

(a)

SAVE

属性をもっている。

(b)

無名共通ブロック内にある。

(c)

実行中である一つ以上の他の有効域内で指定した名前付き共通ブロック内にある。

(d)

あるモジュールの有効域内にあって,そのモジュールが実行中であるもう一つの有効域でも参照されて

いる。

(e)

親子結合によって参照される。

(f )

POINTER

属性をもって宣言された関数の結果の値である。

(6)

ポインタが実体の末端成分であり,その成分に対して暗黙的初期値指定が指定されていず,この実体を

IN-

TENT(OUT)

属性をもつ仮引数に対応する実引数としてもつ手続を引用した。

(7)

ポインタを

INTENT(OUT)

属性をもつ仮引数に対応する実引数としてもつ手続を引用した。

16.4.2.1.4

ポインタの結合状態が変わる他の場合

ポインタが引数結合,構文結合 又は 親子結合によって他のポインタと結合するとき,その結合状態の効果は

16.4.5

で規定する。

二つのポインタが名前結合,記憶列結合 又は 継承結合をしている間,一つのポインタの結合状態が変わると,他

方のポインタの結合状態も対応して変わる。

16.4.2.2

ポインタの定義状態

ポインタの定義状態は,その指示先の定義状態とする。 ポインタが確定可能な指示先と結合している場合,そのポ

インタの定義状態は,変数の規則

(

16.5

)

に従って,確定 又は 不定とする。

16.4.2.3

結合状態と定義状態との関係

ポインタ結合状態が空状態 又は 不定である場合,そのポインタは,引用 又は 解放してはならない。ポインタが

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

354

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

どの結合状態にあっても,そのポインタに対して,

NULLIFY

文を実行したり,

ALLOCATE

文で割り付けたり,ポ

インタ代入したりできる。

NULLIFY

文を実行すると,そのポインタは空状態になる。ポインタが割り付けられると,

そのポインタは,結合した状態になり,定義状態が不定になる。ポインタがポインタ代入されると,その結合状態 及

び 定義状態は,指定したデータ指示先 又は 手続指示先の状態となる。

16.4.3

記憶列結合

記憶列は,変数,共通ブロック 及び 結果変数の間に存在する関係を記述するために用いる。記憶列結合

(storage

association)

は,二つ以上の記憶列が一つ以上の記憶単位を共有したりそれを介して整列されたりする場合に起こる,

二つ以上の実体の結合とする。

16.4.3.1

記憶列

記憶列

(storage sequence)

は,記憶単位の列とする。記憶列の大きさ

(size of a storage sequence)

は,記憶列内の

記憶単位の個数とする。記憶単位

(storage unit)

は,文字記憶単位,数値記憶単位,ファイル記憶単位

(

9.2.4

)

又は

不特定記憶単位とする。

数値記憶単位,文字記憶単位 及び ファイル記憶単位の大きさは,組込みモジュール

ISO FORTRAN ENV

(

13.8.2

)

内の定数の値とする。

記憶列結合の文脈では,次のとおりとする。

(1)

ポインタでない基本整数型,基本実数型 又は 基本論理型のスカラ実体は,

1

数値記憶単位

(numeric storage unit)

を占める。

(2)

ポインタでない倍精度実数型 又は 基本複素数型のスカラ実体は,連続する

2

数値記憶単位を占める。

(3)

ポインタでなく,文字長

len

の基本文字型であるスカラ実体は,連続する

len

文字記憶単位

(character storage

unit)

を占める。

(4)

ポインタでない言語

C

の文字種別

(

15.1.1

)

をもつ文字長

len

の文字型であるスカラ実体は,連続する

len

不特

定記憶単位

(unspecified storage unit)

を占める。

(5)

ポインタでなく,型パラメタをもたない連続型のスカラ実体は,末端成分の列に対応する記憶列の列を占める。

(6)

ポインタでなく,項目

(

1

)

(

5

)

で規定されていない型のスカラ実体は,

1

不特定記憶単位を占める。その不特定

記憶単位は,それぞれの場合 及び 型パラメタ値の集合ごとに異なっていて,項目

(

4

)

の不特定記憶単位とも異

なっている。

(7)

ポインタでない配列は,配列要素順序

(

6.2.2.2

)

でそれぞれの配列要素ごとに連続する記憶列の列を占める。

(8)

ポインタは,ポインタでないどの実体の不特定記憶単位とも異なり,かつ そのポインタの型,型パラメタ 及び

次元数の組合せによってもそれぞれ異なる,

1

不特定記憶単位を占める。

記憶列の列は,一つの記憶列を構成する。そのように構成された記憶列における記憶単位の順番は,大きさゼロの

記憶列を無視しながら,構成順に各記憶列内の個々の記憶単位を並べた順番とする。

各共通ブロックは,一つの記憶列をもつ

(

5.5.2.1

)

16.4.3.2

記憶列の結合

大きさがゼロでない二つの記憶列

s

1

s

2

とは,

s

1

i

番目の記憶単位が

s

2

j

番目の記憶単位と同じであると

き,記憶列結合している

(storage associated)

という。これによって,

1

i

+

k

(

s

1

の大きさ

)

かつ

1

j

+

k

(

s

2

の大きさ

)

である各整数

k

に対して,

s

1

i

+

k

番目の記憶単位は,

s

2

j

+

k

番目の記憶単位と同じになる。

記憶列結合は,大きさゼロの二つの記憶列の間 及び 大きさゼロの記憶列と一つの記憶単位との間にも定義される。

記憶列の列において,大きさゼロの記憶列は,後続の記憶列があれば,その記憶列と記憶列結合している。後続の記

憶列の大きさもゼロであるとき,それら二つの記憶列は,記憶列結合している。後続の記憶列の大きさがゼロでない

とき,大きさゼロの記憶列は,その後続の記憶列の最初の記憶単位と記憶列結合している。大きさゼロの一つの記憶

列とそれぞれ記憶列結合している二つの記憶単位は,同じ記憶単位とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

355

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

16.14

定数値の変更の結果として,大きさゼロの実体が記憶列結合の文脈に現れてもよい。例えば,プ

ログラムに次の宣言を書くことができる。

INTEGER, PARAMETER :: PROBSIZE = 10

INTEGER, PARAMETER :: ARRAYSIZE = PROBSIZE * 100

REAL, DIMENSION (ARRAYSIZE) :: X

INTEGER, DIMENSION (ARRAYSIZE) :: IX

...

COMMON / EXAMPLE / A, B, C, X, Y, Z

EQUIVALENCE (X, IX)

...

最初の文で

PROBSIZE

にゼロを設定するように変更した場合でも,そのプログラムは,規格合致で

ある。

16.4.3.3

スカラデータ実体の結合

二つのスカラデータ実体は,それらの記憶列が記憶列結合しているとき,記憶列結合しているという。二つのスカ

ラ要素は,それらが同じ記憶列をもつとき,全体結合している

(totally associated)

という。二つのスカラ要素は,そ

れらが記憶列結合しているが全体結合はしていないとき,部分結合している

(partially associated)

という。

データ実体の定義状態 及び 値は,記憶列結合しているすべての要素に影響を及ぼす。記憶列の記憶列結合は,

EQUIVALENCE

文,

COMMON

文 又は

ENTRY

文によって引き起こされる。

EQUIVALENCE

文は,共有結合される要素がどれも共通ブロック中になければ,一つの有効域内だけでデータ実

体の記憶列結合を引き起こす(

5.5.1.1

及び

5.5.2.1

参照)。

COMMON

文は,ある有効域内のデータ実体と別の有効域内のデータ実体との記憶列結合を引き起こす。

共通ブロックは,異なる記憶単位からなる列を含んでもよい。同じ名前の名前付き共通ブロックを参照するすべて

の有効域は,記憶域の同じ列を指定しなければならない。無名共通ブロックは,異なる有効域の中で異なる大きさで

宣言してもよい。二つの無名共通ブロックにおいて,長いほうの無名共通ブロックの記憶域の列の先頭部分は,短い

ほうの共通ブロックの記憶域の列と同じでなければならない。二つの無名共通ブロックの長さが同じである場合,そ

れらは記憶域の同じ列でなければならない。

関数副プログラム中の

ENTRY

文は,結果変数の記憶列結合を引き起こす。

部分結合は,次のいずれかの間だけに存在しうる。

(1)

基本文字型 又は 文字連続型の実体と,基本文字型 又は 文字連続型の実体との間。

(2)

基本複素数型,倍精度実数型 又は 数値連続型の実体と,基本整数型,基本実数型,基本論理型,倍精度実数型,

基本複素数型 又は 数値連続型の実体との間。

文字型でない要素に対して,部分結合は,

COMMON

文,

EQUIVALENCE

文 又は

ENTRY

文の使用によってだ

け起こりうる。文字型の要素に対して,部分結合は,引数結合 又は

COMMON

文 若しくは

EQUIVALENCE

文の

使用によってだけ起こりうる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

356

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

16.15

部分結合

REAL A (4), B

COMPLEX C (2)

DOUBLE PRECISION D

EQUIVALENCE (C (2), A (2), B), (A, D)

この例で,

C

3

番目の記憶単位,

A

2

番目の記憶単位,

B

の記憶単位 及び

D

2

番目の記憶単

位は,同じ記憶単位であると指定している。この記憶列は,次のとおり図示できる。

-

D

-

B

-

A(1)

-

A(2)

-

A(3)

-

A(4)

-

C(1)

-

C(2)

記憶単位

1

2

3

4

5

A(2)

B

は,全体結合している。

A(1)

C(1)

A(2)

C(2)

A(3)

C(2)

B

C(2)

A(1)

D

A(2)

D

B

D

C(1)

D

,及び

C(2)

D

は,部分結合している。

C(1)

及び

C(2)

がそ

れぞれ

D

と記憶列結合しているにもかかわらず,

C(1)

C(2)

とは互いに記憶列結合していない。

文字型要素の部分結合は,その要素の記憶単位のすべてが同じではなく,それらの幾つかが同じである場合に起

こる。

16.16

次の例で,

A

B

及び

C

は,部分結合している。

CHARACTER A*4, B*4, C*3

EQUIVALENCE (A (2:3), B, C)

記憶単位への明示的初期値指定は,一つのプログラム中では

1

回だけ行うことができる。明示的初期値指定は,暗

黙的初期値指定を上書きする。 派生型の実体への暗黙的初期値指定は,その実体の成分

(

4.5.1

)

への暗黙的初期値指

定を上書きする。記憶列結合している記憶単位に暗黙的初期値指定をすることができる。このとき,その暗黙的初期

値指定をする実体 又は 部分実体は,同じ型 及び 型パラメタをもち,その記憶単位に同じ値を与えるものでなければ

ならない。

16.4.4

継承結合

継承結合は,親成分の成分と,型拡張によって直接拡張型

(

4.5.6.1

)

に継承される成分との間で生じる。この結合

は継続的であり,継承された成分の参照許可属性には影響されない。

16.4.5

結合の確立

引数結合,親子結合 又は 構文結合によって二つの要素の間で結合が確立する場合, 結合要素

(associating entity)

は 既存要素

(pre-existing entity)

の特性をもつ。

引数結合では,結合要素を仮引数とし,既存要素を実引数とする。親子結合では,結合要素を親有効域にある要素

とし,既存要素を入れ子になった有効域にある要素とする。親有効域が再帰的な手続である場合,結合にかかわって

いる既存要素は,入れ子になった手続を直接 又は 間接に呼び出す最も内側の手続の分身にある要素とする。構文結

合では,結合要素が結合名で識別され,既存要素は選択子とする。

結合が引数結合,親子結合 又は 構文結合によって確立するとき,次の条件を満たしている。

(1)

結合要素が

POINTER

属性をもつとき,そのポインタ結合状態は既存要素の結合状態と同じになる。既存要素

が結合しているポインタ結合状態をもつとき,結合要素は同じ指示先と結合しているポインタとなる。それらの

ポインタが配列であるとき,結合要素の上下限は既存要素の上下限と同じになる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

357

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

結合要素が

ALLOCATABLE

属性をもつとき,その結合状態は既存要素の結合状態と同じになる。既存要素が

割り付けられているとき,上下限(配列の場合),無指定型パラメタの値,定義状態 及び 値(確定している場

合)は,既存要素のそれらと同じになる。結合要素が多相的であり,かつ 既存要素が割り付けられているとき,

結合要素の実行時の型は既存要素の実行時の型と同じになる。

結合要素が

POINTER

属性 及び

ALLOCATABLE

属性のいずれももたないとき,その定義状態 及び 値(確定し

ている場合)は既存要素のそれらと同じになる。要素が配列であって,かつ 結合が引数結合でないとき,結合要素の

上下限は既存要素のそれらと同じになる。

16.5

変数を確定 又は 不定にする動作

変数は,確定 又は 不定とする。その定義状態は,プログラムの実行中に変化できる。変数を不定にする動作は,そ

の変数がそれまで確定であったことを意味するものではない。変数を確定にする動作は,その変数がそれまで不定で

あったことを意味するものではない。

16.5.1

実体 及び 部分実体の確定

部分配列も含めた配列,及び 派生型,文字型 又は 複素数型の変数は,

0

個以上の部分実体から構成される。変数

と部分実体との間 又は 別の変数の部分実体同士の間で結合が起こることもある。これらの部分実体は,確定 又は 不

定とする。

(1)

配列は,すべての要素が確定であるときに限り,確定とする。

(2)

派生型のスカラ実体は,すべてのポインタでない成分が確定であるときに限り,確定とする。

(3)

複素数型 又は 文字型のスカラ実体は,すべての部分実体が確定であるときに限り,確定とする。

(4)

実体が不定である場合,部分実体の(必ずしもすべてではなく)少なくとも一つは不定とする。

16.5.2

常に確定である変数

大きさゼロの配列 及び 長さゼロの文字列は,常に確定とする。

16.5.3

初期確定である変数

次の変数は,初期確定とする。

(1)

DATA

文によって初期値をもつように指定した変数。

(2)

型宣言文によって初期値をもつように指定した変数。

(3)

ポインタでない暗黙的初期値指定された部分成分が,主プログラム,モジュール 又は 初期値設定プログラム単

位の有効域で保存も宣言もされていないとき,その部分成分を含む

ALLOCATABLE

属性も

POINTER

属性も

もたない変数。

(4)

常に確定である変数。

(5)

Fortran

以外の手段によって初期値指定された

BIND

属性をもつ変数。

16.17

次の例で,

Fortran

の変数

foo

Fortran

以外の手段によって初期値

123

が確定する。

Fortran

のプログラム部分

module mod

integer, bind(c,name="blivet") :: foo

end module mod

C

のプログラム部分

int blivet = 123;

16.5.4

初期不定である変数

他のすべての変数は,初期不定とする。

16.5.5

変数が確定になる条件

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

358

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

変数は,次のとおり確定になる。

(1)

配列選別代入文 又は

FORALL

代入文以外の組込み代入文を実行すると,等号の左辺の変数は,確定になる。利

用者定義代入文を実行すると,等号の左辺の変数は,その全体 又は 部分が確定になることがある。

(2)

配列選別代入文 又は

FORALL

代入文を実行すると,その代入文の配列要素の幾つか 又は すべてが確定になる

ことがある

(

7.4.3

)

(3)

入力文の実行中に,入力ファイルから値が代入される各変数は,データがその変数に転送される時に確定になる

16.5.6

(

4

)

]。

UNIT

指定子が内部ファイルを識別するような

WRITE

文を実行すると,書き出される各記録

は,確定になる。

(4)

DO

変数をもつ

DO

文を実行すると,その

DO

変数は,確定になる。

(5)

同期入出力文中の

DO

形反復によって指定された動作の開始時に,その

DO

変数は,確定になる。

(6)

手続の呼出し時に,仮引数が

INTENT(OUT)

属性をもっていず,対応する実引数が確定になっていると,仮引

数のデータ実体は,確定になる。

手続の呼出し時に,仮引数が

INTENT(OUT)

属性をもっていず,対応する実引数の対応する部分実体が確定

になっていると,仮引数の部分実体は,確定になる。

(7)

IOSTAT

指定子を含む入出力文を実行すると,指定した整変数は,確定になる。

(8)

SIZE

指定子を含む同期

READ

文を実行すると,指定した整変数は,確定になる。

(9)

SIZE

指定子を含む非同期入力文に対応する待機操作を実行すると,指定した整変数は,確定になる。

(10)

誤り条件が存在しない場合,

INQUIRE

文を実行すると,その文の実行中に値が代入されるすべての変数は,確

定になる。

(11)

IOMSG

指定子をもつ入出力文の実行中に誤り条件,ファイル終了条件 又は 記録終了条件が発生すると,入出

力メッセージ変数は,確定になる。

(12)

文字記憶単位が確定になると,結合しているすべての文字記憶単位は,確定になる。

数値記憶単位が確定になると,結合している同じ型のすべての数値記憶単位は,確定になる。倍精度実数型要

素が確定になると,全体結合しているすべての倍精度実数型要素は,確定になる。

不特定記憶単位が確定になると,結合しているすべての不特定記憶単位は,確定になる。

(13)

基本複素数型要素が確定になると,部分結合しているすべての基本実数型要素は,確定になる。

(14)

部分結合している基本実数型要素 又は 基本複素数型要素が確定になった結果として,基本複素数型要素の実部

及び 虚部が両方とも確定になると,その基本複素数型要素は,確定になる。

(15)

部分結合している実体が確定になった結果として,数値連続型構造体 又は 文字連続型構造体のすべての成分が

確定になると,その構造体は,確定になる。

(16)

STAT

指定子を含む

ALLOCATE

文 又は

DEALLOCATE

文を実行すると,

STAT

指定子に指定した変数は,

確定になる。

(17)

ERRMSG

指定子をもつ

ALLOCATE

文 又は

DEALLOCATE

文の実行中に誤り条件が発生すると,誤り通報

変数は,確定になる。

(18)

大きさゼロの配列を割り付けると,その配列は,確定になる。

(19)

ポインタでない暗黙的初期値指定された部分成分をもつ実体を割り付けると,その部分成分は,確定になる。

(20)

手続の呼出し時に,その手続内の大きさゼロの自動割付け実体は,確定になる。

(21)

確定である指示先にポインタを結合するポインタ代入文を実行すると,そのポインタは,確定になる。

(22)

SAVE

属性も

ALLOCATABLE

属性ももたずポインタでない局所変数を含む手続を呼び出すと,その実体のす

べてのポインタでない暗黙的初期値指定された部分成分は,確定になる。

(23)

ALLOCATABLE

属性をもたずポインタでない

INTENT(OUT)

属性の仮引数をもつ手続を呼び出すと,その

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

359

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

仮引数のすべてのポインタでない暗黙的初期値指定された部分成分は,確定になる。

(24)

派生型であってポインタでない関数を呼び出すと,その関数結果のすべてのポインタでない暗黙的初期値指定

された部分成分は,確定になる。

(25)

FORALL

構文で指標変数名の値の集合を評価すると,その指標変数名は,確定になる。

(26)

プログラムで指定していない方法によって変更される

VOLATILE

属性をもつ実体は,確定となる

(

5.1.2.16

)

16.5.6

変数が不定になる条件

変数は,次のとおり不定になる。

(1)

ある型の変数が確定になると,結合している異なる型の変数は,すべて不定になる。ただし,基本実数型の変数

が基本複素数型の変数と部分結合している場合,実変数が確定になっても複素変数は不定にはならず,複素変数

が確定になっても実変数は不定にはならない。基本複素数型の変数が別の基本複素数型の変数と部分結合してい

る場合,一方が確定になっても他方が不定になることはない。

(2)

ある式の中の関数引用が,その式の値を決定するために関数の値を必要としないような形で書かれ,かつ その

関数の評価によって変数が確定になりうる場合,その式を評価すると,その変数は,不定になる。

(3)

副プログラムの分身の実行が完了する時,次のとおりとなる。

(a)

その

SAVE

属性をもたない局所変数は,不定となる。

(b)

副プログラムで指定した名前付き共通ブロック内の

SAVE

属性をもたない変数が,確定 又は 再確定され,

かつ 活動状態にある他の有効域がその共通ブロックを参照していないとき,その変数は,不定となる。

(c)

モジュールの

SAVE

属性をもたない後始末可能でもない局所変数は,活動状態にある他の有効域がそのモ

ジュールを参照していないとき,不定となる。

注記

16.18

モジュール副プログラムは,その親プログラムであるモジュールを引用する。モ

ジュールが使用中であるときの軌跡を残す処理系において,そのモジュール内のいずれか

の手続が活動状態であるときは,モジュールを引用する活動状態にある有効域がほかにな

くても,モジュールは使用中である。モジュール手続が手続ポインタ,型束縛手続 又は

連携処理系を通して呼び出されるとき,この状態が発生する。

(d)

モジュールの

SAVE

属性をもたない後始末可能な局所変数は,活動状態にある他の有効域がそのモジュー

ルを引用していないとき,不定となるのに続いて後始末が起こる。

(4)

入力文の実行中に誤り条件,ファイル終了条件 又は 記録終了条件が起こると,その文の入力項目並び 又は 変

数群に指定した変数は,すべて不定になる。

(5)

入出力文の実行中に誤り条件,ファイル終了条件 又は 記録終了条件が起こり,その文が入出力

DO

形反復を含

むと,その文の中の

DO

変数のすべてが不定になる

(

9.10

)

(6)

まだ書かれていない記録を指定する直接探査入力文を実行すると,その文の入力項目並び中に指定した変数は,

すべて不定になる。

(7)

INQUIRE

文を実行すると,

NAME

指定子,

RECL

指定子 及び

NEXTREC

指定子の変数は,不定になること

がある

(

9.9

)

(8)

文字記憶単位が不定になると,結合している文字記憶単位は,すべて不定になる。

数値記憶単位が不定になると,結合している異なる型の数値記憶単位を確定した結果として不定になった[上

16.5.6

(

1

)

]のでなければ,結合している数値記憶単位は,すべて不定になる。

倍精度実数型要素が不定になると,全体結合している倍精度実数型要素は,すべて不定になる。

不特定記憶単位が不定になると,結合している不特定記憶単位は,すべて不定になる。

(9)

割付け要素を解放すると,その割付け要素は,不定になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

360

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(10)

割付け転送手続

(

13.5.16

)

が,割付け要素の割付け状態を割り付けられていない状態にするとき,その要素は,

不定となる。

(11)

暗黙的初期値指定をしていない部分成分をもつ大きさがゼロでない実体に対する

ALLOCATE

文の実行が成功

すると,その部分成分は,不定になる。

(12)

誤り条件が存在する場合,

INQUIRE

文を実行すると,問合せ指定子の変数は,

IOSTAT

指定子 又は

IOMSG

指定子の変数を除いて,すべて不定になる。

(13)

手続の呼出し時に,次のものは不定になる。

(a)

実引数と結合しない省略可能な仮引数。

(b)

INTENT(OUT)

属性をもつ仮引数。ただし,その引数のポインタでない暗黙的初期値指定をもつ部分成

分を除く。

(c)

INTENT(OUT)

属性をもつ仮引数と結合される実引数。ただし,その引数のポインタでない暗黙的初期

値指定をもつ部分成分を除く。

(d)

実引数の対応する部分実体が不定である場合の,

INTENT(OUT)

属性をもたない仮引数の部分実体。

(e)

関数の結果変数。ただし,ポインタでない暗黙的初期値指定をもつ部分成分を除く。

(14)

ポインタの結合状態が不定 又は 空状態

(

16.4.2.1.2

16.4.2.1.3

)

になると,そのポインタは,不定になる。

(15)

FORALL

構文の実行が完了すると,その指標 変数名は,不定になる。

(16)

非同期

READ

文を実行すると,入力項目並び 又は

SIZE

指定子で指定された変数は,すべて不定になる。非

同期変数群

READ

文を実行すると,変数群の変数のうち,

READ

文 又は 対応する待機操作の実行によって確

定される変数は,不定になる。

(17)

RETURN

文 又は

END

文を実行すると変数が不定になる場合,

C PTR

型の変数は,値がその不定となる変数

の一部の

C

アドレスであるとき,不定になる。

(18)

TARGET

属性をもつ変数が解放される場合,

C PTR

型の変数は,値がその解放される変数の一部の

C

アドレ

スであるとき,不定になる。

注記

16.19

利用者定義代入文を実行したとき,等号に先行する変数のすべて 又は 一部は,不定となって

もよい。

16.5.7

変数定義文脈

幾つかの変数は,変数の定義 又は 未定義を暗黙的に行う構文文脈に現れてはならない(

5.1.2.7

5.1.2.12

及び

12.6

参照)。変数の定義 又は 未定義を暗黙的に行う文脈は,次のとおりとする。

(1)

代入文の変数。

(2)

NULLIFY

文のポインタ実体。

(3)

ポインタ代入文のデータポインタ実体 又は 手続ポインタ実体。

(4)

DO

文 又は 入出力

DO

形反復の

DO

変数。

(5)

READ

文の入力項目。

(6)

変数群名が

READ

文の

NML

指定子で指定されているとき,

NAMELIST

文の変数名。

(7)

WRITE

文の内部ファイル変数。

(8)

入出力文の

IOSTAT

指定子,

SIZE

指定子 又は

IOMSG

指定子。

(9)

INQUIRE

文の確定可能な変数。

(10)

ALLOCATE

文 又は

DEALLOCATE

文の状態変数,割付け実体 又は 誤り通報変数。

(11)

結合した仮引数が

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもち,明示的引用仕様で手続を引用す

るときの実引数。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

361

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(12)

構文の結合名が変数定義文脈に現れるとき,

SELECT TYPE

構文 又は

ASSOCIATE

構文の選択子である変数。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

362

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

参考

用語集

この規格中で用いた主な用語の定義を次に示す。各用語の直後に,その用語を定義 又は 説明している箇条を括弧

に入れて示す。ここでの定義における表現は,必ずしも規格本体と同じではない。

後始末

(finalization) (

4.5.5.1

)

実体を解体抹消する直前に利用者定義後始末サブルーチンを呼び出す処理過程。

後始末可能

(finalizable) (

4.5.5

)

後始末サブルーチンをもつ型 又は 後始末可能な成分をもつ型。後始末可能な型の

実体。

後始末サブルーチン

(final subroutine) (

4.5.5

)

後始末の間に処理系が自動的に呼び出すサブルーチン。

暗黙的引用仕様

(implicit interface) (

12.3.1

)

有効域内で引用される手続について,明示的引用仕様をもたないとい

う性質。

文関数は,常に暗黙的引用仕様をもつ。

暗黙的初期値指定

(default initialization) (

4.5.3.4

)

型定義中で初期値指定を指定すると,その型の実体は,自動的

に初期化される。非ポインタ成分は暗黙的に値を与えて初期化することができ,ポインタ成分は初期状態を暗黙的に

空状態にすることができる。暗黙的初期値指定は,組込み型の実体にはない。

暗黙的初期値設定されている

(default-initialized) (

4.5.3.4

)

部分成分が暗黙的初期値指定によって初期化されると

き,その部分成分は暗黙的初期値設定されているという。

引用

(reference) (

2.5.6

)

実行中のその時点での値を要求する形で実体特定子を書くこと,その時点での手続の実行

を要求する形でその手続特定子,その演算子記号 若しくは 利用者定義代入文を書くこと,又は

USE

文にモジュール

名を書くこと。変数を確定する動作 及び 手続の名前を実引数として書くことは,引用とはみなさない。

引用仕様

(interface) (

12.3

)

手続引用仕様の項を見よ。

引用仕様宣言

(interface block) (

12.3.2.1

)

INTERFACE

文から対応する

END INTERFACE

文までの文の列。

引用仕様本体

(interface body) (

12.3.2.1

)

引用仕様宣言内の,

FUNCTION

文 又は

SUBROUTINE

文から対応す

END

文までの文の列。

上書き

(override) (

4.5.3.4

4.5.6.2

)

明示的初期値指定 又は 暗黙的初期値指定が,暗黙的初期値指定に優先する

とき,優先する初期値指定だけが指定されたかのように扱われること。手続が直接拡張型に束縛されているとき,そ

れが,親型から継承されるはずの手続に優先すること。

演算

(operation) (

7.1.2

)

一つ 又は 二つの演算対象に作用する計算処理。

演算子

(operator) (

2.5.8

)

演算を指定する構文素。

演算対象

(operand) (

2.5.8

)

演算子の左 又は 右にある式。

大きさ

(size) (

2.4.5

)

配列について,要素の総数。

大きさ引継ぎ配列

(assumed-size array) (

5.1.2.5.4

)

結合される実引数から大きさを引き継ぐ仮配列。右端の次元

の上限を星印で指定する。

親型

(parent type) (

4.5.6

)

直接拡張型の派生元の拡張可能型。

親子結合

(host association) (

16.4.1.3

)

内側に含まれる有効域から親有効域の言語要素を参照できるようにする処

理過程。

親成分

(parent component) (

4.5.6.1

)

直接拡張型の継承された部分に対応する,その型の要素の成分。

親プログラム

(host) (

2.2

)

親有効域のこと。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

363

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

親有効域

(host scoping unit) (

2.2

)

他の有効域を,直接に取り囲んでいる有効域。

外部結合

(external linkage)

言語

C

の言語要素がプログラムに対して大域的であることを記述する特性。外部結合

は,言語

C

の国際規格の

6.2.2

で定義されている。

注記

Fortran

における結合

(association)

に対応する概念であり同じ用語を当てているが,

Fortran

における

結合の一種ではない。

外部装置

(external unit) (

9.4

)

外部ファイルを参照するために用いる機構。外部装置は,非負整数によって識別さ

れる。

外部手続

(external procedure) (

2.2.3.1

)

外部副プログラム 又は

Fortran

以外の手段によって定義される手続。

外部ファイル

(external file) (

9.2

)

プログラムの外部の媒体にある記録の列。

外部副プログラム

(external subprogram) (

2.2

)

副プログラムであって,主プログラムにもモジュールにも他の副

プログラムにも包まれていないもの。

注記

モジュールは,副プログラムとは呼ばない。

注記

F

ORTRAN

77

では,初期値設定プログラム単位をも副プログラムと呼んでいた。

拡張型

(extension type) (

4.5.6

)

基底型は,それ自体だけの拡張型とする。直接拡張型は,それ自体 及び その親型

が拡張型となっている型の拡張型とする。

拡張可能型

(extensible type) (

4.5.6

)

EXTENDS

属性を用いて新しい型を派生しうる型。

BIND

属性をもたず,連

続型でない型。

確定

(defined) (

2.5.5

)

データ実体について,有効な値をもっている 又は 与えられた状態。

確定可能

(definable) (

2.5.5

)

変数は,代入文の左辺にその特定子を書いてその値を変更してよい場合,確定可能で

あるという。割り付けられていない割付け変数は,確定可能でないデータ実体の例である。確定可能でない部分実体

の例としては,

C

を定数の配列とし

I

を整変数としたときの

C(I)

がある。

(type) (

2.4.1

)

値の集合,それらの値の表現方法 及び それらの値を解釈し操作する演算の集合によって特徴付

けられる,データの名前付き分類区分。データ値の集合は,型パラメタの値に依存する。

型が適合する

(type compatible) (

5.1.1.2

)

すべてのデータ要素は,同じ型の他のデータ要素と型が適合する。無制

限多相的データ要素は,すべてのデータ要素と型が適合する。無制限多相的でない多相的データ要素は,実行時の型

がその多相的データ要素の宣言時の型の拡張型であるデータ要素と型が適合する。

型宣言文

(type declaration statement) (

5

)

INTEGER

文,

REAL

文,

DOUBLE PRECISION

文,

COMPLEX

文,

CHARACTER

文,

LOGICAL

文 又は

TYPE

(

型名

)

文。

型束縛手続

(type-bound procedure) (

4.5.4

)

型定義中の手続束縛。その手続は,その実行時の型をもつ何らかの実

体を通じて束縛名によってか,利用者定義演算としてか,利用者定義代入によってか,又は 後始末処理の一部とし

て,引用することができる。

型パラメタ

(type parameter) (

2.4.1

)

データ型のパラメタ。組込み型の型パラメタには,種別

(

KIND

)

と文字長

(

LEN

)

とがある。派生型の型パラメタは,派生型定義の中で定義する。

型パラメタ順序

(type parameter order) (

4.5.2.1

)

派生型指定子における,派生型の型パラメタの順序。

合致

(conformance) (

1.5

)

プログラムは,それが規格に定められた形と関係だけを用いて書かれ,かつ 規格に従っ

た解釈をもつならば,この規格に合致している。プログラム単位は,それをあるプログラムに含めてそのプログラム

が規格合致するようにできるならば,この規格に合致している。処理系は,規格に定められた解釈を満たすように規

格合致プログラムを実行し,

1.5

に列挙された検出 及び 報告の能力をもつならば,この規格に合致している。

仮データ実体

(dummy data object) (

12.2.1.1

12.4.1.2

)

データ実体である仮引数。

仮手続

(dummy procedure) (

12.1.2.3

)

手続として宣言 又は 引用されている仮引数。

仮配列

(dummy array)

配列である仮引数。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

364

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

仮引数

(dummy argument) (

12

12.5.2.1

12.5.2.2

12.5.2.4

12.5.4

)

手続の実行の間,結合した実引数を参

照できるようにする言語要素。

関数

(function) (

2.2.3

)

式中で呼び出し,値を計算し,その値をその式の評価に用いる手続。

関数結果

(function result) (

12.5.2.1

)

関数の値を返すデータ実体。

関数副プログラム

(function subprogram) (

12.5.2.1

)

引用仕様宣言内にない

FUNCTION

文から対応する

END

までの文の列。

キーワード

(keyword) (

2.5.2

)

文の構文の一部を成す単語 又は 並び中の項目を識別するのに用いる名前。

記憶単位

(storage unit) (

16.4.3.1

)

文字記憶単位,数値記憶単位,ファイル記憶単位 又は 不特定記憶単位。

記憶列

(storage sequence) (

16.4.3.1

)

連続する記憶単位の列。

記憶列結合

(storage association) (

16.4.3

)

一方の記憶列のいずれかの記憶単位が他方の記憶列のいずれかの記憶単

位と同一であるような,二つの記憶列の間の関係。

規格合致プログラム

(standard-conforming program) (

1.5

)

この規格に定められた形と関係だけを用いて書かれ,か

つ 規格に従った解釈をもつプログラム。

刻み幅

(stride) (

6.2.2.3.1

)

添字三つ組に指定する増分値。

基底型

(base type) (

4.5.6

)

別の型の拡張でない拡張可能型。

(line) (

3.3

)

Fortran

の文,注釈 又は

INCLUDE

行からなる,

0

132

個の文字の列。

共通ブロック

(common block) (

5.5.2

)

プログラム中のどの有効域からも参照できる,物理的な記憶場所の区画。

局所変数

(local variable) (

2.4.3.1.1

)

特定の有効域に対して局所的な変数。参照結合 又は 親子結合によって取り

込まれたのでもなく,仮引数でもなく,共通ブロック中の変数でもない変数。

局所要素

(local entity) (

16.2

)

一つの有効域を有効範囲とする構文素によって識別される言語要素。

記録

(record) (

9.1

)

ファイル中で,ひとまとまりとして扱われる値 又は 文字の列。

空状態

(disassociated) (

2.4.6

)

空状態のポインタは,どの指示先とも結合していない。 ポインタは,

NULLIFY

の実行後か,空状態のポインタのポインタ代入後か,暗黙的初期値指定によってか,又は 明示的初期値指定によって,

空状態になる。データポインタは,

DEALLOCATE

文の実行によっても空状態にできる。

組込み

(intrinsic) (

2.5.7

)

型,演算子,代入文,手続及び モジュールに冠する修飾語。組込み型,組込み演算子 及

び 組込み代入文は,この規格で定義されていて,特に定義したり宣言したりせずにどの有効域ででも用いることがで

きる。組込み手続は,この規格で定義されているか 又は 処理系が用意していて,特に定義したり宣言したりせずに

どの有効域ででも用いることができる。組込みモジュールは,この規格で定義されているか 又は 処理系が用意して

いて,参照結合によって参照することができる。このとき,組込みモジュール内で定義された手続 及び 型は,組込

みではない。この規格で定義されていない組込み手続 及び 組込みモジュールは,非標準の組込み手続 及び 組込みモ

ジュールという。

クラス

(class) (

5.1.1.2

)

クラス

N

とは,型

N

から拡張された型すべての集合をいう。

継承

(inherit) (

4.5.6.1

)

親から獲得すること。直接拡張型の中で明示的に宣言せずに親型から自動的に獲得される

型パラメタ,成分 又は 手続束縛は,継承されるという。

形状

(shape) (

2.4.5

)

配列の次元数 及び 各寸法。形状は,各次元の寸法を要素とする

1

次元の配列で表現するこ

とができる。

継承結合

(inheritance association) (

4.5.6.1

16.4.4

)

直接拡張型における,継承された成分と親成分との間の関係。

形状適合

(conformable) (

2.4.5

)

二つの配列は,同じ形状をもつとき,形状適合しているという。スカラは,いか

なる配列とも形状適合する。

形状引継ぎ配列

(assumed-shape array) (

5.1.2.5.2

)

結合される実引数から形状を引き継ぐ,ポインタでない仮配列。

形状明示配列

(explicit-shape array) (

5.1.2.5.1

)

明示的な上下限を伴って宣言された名前付き配列。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

365

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

結果変数

(result variable) (

2.2.3

12.5.2.1

)

関数の値を返す変数。

結合

(association) (

16.4

)

名前結合,ポインタ結合,記憶列結合又は 継承結合。

結合名

(associate name) (

8.1.4

)

SELECT TYPE

構文 又は

ASSOCIATE

構文の中で,選択子が結合する構文内

要素の名前。

原型

(prototype)

関数引用仕様本体に対応する言語

C

の言語要素。言語

C

の国際規格の

6.7.5.3

で定義されている。

言語要素

(entity)

次のいずれを指すのにも用いる用語: プログラム単位,手続,抽象引用仕様,演算子,総称引用

仕様,共通ブロック,外部装置,

文関数

,型, データ要素,文番号,構造構文,変数群。

構造構文

(construct) (

7.4.3

7.4.4

8.1

)

ASSOCIATE

文,

DO

文,構造

FORALL

文,

IF

文,

SELECT CASE

文,

SELECT TYPE

文 又は 構造

WHERE

文から対応する端末文までの文の列。

構造体

(structure) (

2.4.1.2

)

派生型のスカラデータ実体。

構造体型

(struct)

連続派生型に対応する言語

C

の言語要素。言語

C

の国際規格の

6.2.5

で定義されている。

構造体構成子

(structure constructor) (

4.5.9

)

派生型の値を構成するための構文上の機構。

構造体成分

(structure component) (

6.1.2

)

実体特定子によって引用することのできる,派生型の実体の一部分。

構文結合

(construct association) (

16.4.1.5

)

ASSOCIATE

構文 又は

SELECT TYPE

構文における選択子と結合

名との間の結合。

構文素

(lexical token) (

3.2

)

指定された解釈をもつ,

1

文字以上の文字の列。

構文内要素

(construct entity) (

16

)

一つの構造構文を有効範囲とする構文素によって識別される言語要素。

サブルーチン

(subroutine) (

2.2.3

)

CALL

文 又は 利用者定義代入文によって呼び出す手続。

サブルーチン副プログラム

(subroutine subprogram) (

12.5.2.2

)

引用仕様宣言内にない

SUBROUTINE

文から対

応する

END

文までの文の列。

参照結合

(use association) (

16.4.1.2

)

USE

文によって指定される,異なる有効域間での名前の結合。

(expression) (

2.4.3.2

7.1

)

演算対象,演算子 及び 括弧の列

(R722)

。変数,定数,関数引用 又は 計算の表現

でありうる。

次元数

(rank) (

2.4.4

2.4.5

)

配列の次元の個数。スカラについてはゼロとする。

指示先

(target) (

2.4.6

5.1.2.14

6.3.1.2

)

TARGET

属性をもつデータ要素,又は ポインタと結合されたデータ

要素。

指示状態

(pointer associated) (

6.3

7.4.2

)

ポインタ代入の後 又は

ALLOCATE

文の有効な実行の後の,ポイン

タと指示先との関係。

事前接続

(preconnected) (

9.4.4

)

プログラムの実行の始めに外部ファイルに接続しているという,装置の性質。そ

のような装置は,その装置に対する

OPEN

文を実行しなくても入出力文に指定してよい。

実行構文

(executable construct) (

2.1

)

単純実行文

(R214)

ASSOCIATE

構文,

CASE

構文,

DO

構文,

FORALL

構文,

IF

構文,

SELECT TYPE

構文 又は

WHERE

構文。

実行時の型

(dynamic type) (

5.1.1.2

7.1.4

)

データ要素が実行時にもつ型。多相的でないデータ要素の実行時の

型は,宣言時の型と同じとする。

実行文

(executable statement) (

2.3.1

)

一つ以上の計算処理動作を行う 又は 制御する命令。

実体

(object) (

2.4.3.1

)

データ実体のこと。

実体特定子

(object designator) (

2.5.1

)

データ実体の特定子。

実引数

(actual argument) (

12

12.4.1

)

手続引用に指定する式,変数,手続 又は

選択戻り指定子

自動割付けデータ実体

(automatic data object) (

5.1

)

副プログラムの局所要素であって,仮引数でなく,長さ型パ

ラメタ 又は 配列上下限が初期値式でない式で指定されているデータ実体。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

366

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

授受特性

(intent) (

5.1.2.7

)

仮データ実体の属性の一つ。授受特性は,その仮引数が,データを手続の中へ転送す

るために用いられるのか,手続の外へ転送するために用いられるのか,その両方のために用いられるのかを示す。

主プログラム

(main program) (

2.3.4

11.1

)

Fortran

の主プログラム 又は

Fortran

以外の手段で定義された代

替物。

種別型パラメタ

(kind type parameter) (

2.4.1.1

4.4.1

4.4.2

4.4.3

4.4.4

4.4.5

4.5.2

)

一つの組込み型に

用意されている種別の識別番号を値とするパラメタ,又は

KIND

属性をもつと宣言された派生型パラメタ。

純粋手続

(pure procedure) (

12.6

)

純粋組込み手続

(

13.1

)

であるか,純粋副プログラムによって定義される

か,又は

純粋関数だけを引用した文関数である

手続。

上下限

(bounds) (

5.1.2.5.1

)

名前付き配列について,配列要素の添字の値が収まっていなければならない限界。

小数点記号

(decimal symbol) (

9.9.1.6

10.5

10.7.8

)

ファイル中の実数の

10

進表現において,整数部と小数部

とを分ける文字。暗黙の小数点記号は点(ピリオド)である。現在の小数点記号は,現在の小数点編集モードによっ

て決まる。

初期値設定プログラム単位

(block data program unit) (

11.3

)

名前付き共通ブロック内のデータ実体に初期値を与

えるためのプログラム単位。

処理系

(processor) (

1.2

)

計算機システムと,プログラムをその計算機システムで使用できるように変形する機構と

を組み合わせたもの。

処理系依存

(processor dependent) (

1.5

)

この規格で完全には規定していない機能の呼称。そのような機能に対して

は,処理系が手段 又は 意味を定めて付与しなければならない。

数値型

(numeric type) (

4.4

)

整数型,実数型 又は 複素数型。

数値記憶単位

(numeric storage unit) (

16.4.3.1

)

ポインタでなく型が基本実数型,基本整数型 又は 基本論理型で

あるスカラを,保持するための記憶場所の単位。

スカラ

(scalar) (

2.4.4

)

(1)

配列でない単一のデータ。

(2)

配列であるという性質をもたないこと。

寸法

(extent) (

2.4.5

)

配列の一つの次元の大きさ。

制御配列

(control mask) (

7.4.3.2

)

WHERE

文 又は

WHERE

構文において,各

WHERE

代入文でどの配列要素

が確定されるかを論理値によって決定する論理型配列。

成分

(component) (

4.5

)

派生型の構成要素。

成分順序

(component order) (

4.5.3.5

)

組込み書式付き入出力 及び 構造体構成子に用いられる派生型の成分の順序

付け。

接続されている

(connected) (

9.4.3

)

(1)

外部装置について,外部ファイルを参照していること。

(2)

外部ファイルについて,それを参照している外部装置があること。

宣言関数

(specification function) (

7.1.6

)

宣言式中で用いることのできる,組込み関数でない関数。

宣言式

(specification expression) (

7.1.6

)

長さ型パラメタ,配列上下限などの指定に使えるように制限を課した式。

宣言時の型

(declared type) (

5.1.1.2

7.1.4

)

データ要素が宣言時にもつ型。多相的データ要素の場合,実行時に

もつ型(実行時の型)と異なってもよい。

全体配列

(whole array) (

6.2.1

)

名前付き配列のこと。

選択子

(selector) (

6.1.1

6.1.2

6.1.3

8.1.3

8.1.4

)

次のものを特定する構文上の機構。

(1)

データ実体の部分。部分列,配列要素,部分配列 又は 構造体成分を特定することができる。

(2)

ある

CASE

ブロックを実行する場合値の組。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

367

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

(3)

SELECT TYPE

構文のどの分岐が実行されるかを型によって決める実体。

(4)

ASSOCIATE

構文において結合名に結合される実体。

相互利用可能

(interoperable) (

15.2

)

Fortran

の言語要素について,それと同等な言語

C

の言語要素が定義しうる

ということを保証する性質。

総称引用仕様

(generic interface) (

4.5.4

12.3.2.1

)

総称手続束縛 又は 総称引用仕様宣言によって指定される引用

仕様。

総称引用仕様宣言

(generic interface block) (

12.3.2.1

)

総称指定をもつ引用仕様宣言。

総称識別子

(generic identifier)(

12.3.2.1

)

INTERFACE

文中に書いて,その引用仕様宣言内のすべての手続に関連

付けられている構文素,又は

GENERIC

文中に書いて,そのすべての個別型束縛手続に関連付けられている構文素。

添字

(subscript) (

6.2.2

)

配列要素選択子中のスカラ整数式の並びの

1

項目。

注記

F

ORTRAN

77

では,その並び全体を添字と呼んでいた。

添字三つ組

(subscript triplet) (

6.2.2

)

部分配列選択子中の並びの項目であって,コロンを含むもの。添字三つ組

は,整数値の規則的な列を指定する。

属する

(belong) (

8.1.6.4.3

8.1.6.4.4

)

EXIT

文 又は

CYCLE

文に

DO

構文名が書いてあるとき,その文は,そ

の名前をもつ

DO

構文に属するという。

DO

構文名が書いてないとき,その文は,最も内側を包んでいる

DO

構文に

属するという。

属性

(attribute) (

5

)

型宣言文

(R501)

で指定できる,データ実体の性質。

束縛ラベル

(binding label) (

15.3.1

15.4.1

)

連携処理系において変数,共通ブロック,サブルーチン 又は 関数を

一意的に識別する基本文字型の値。

注記

対応国際規格の構文規則中では,文番号

(statement label)

のことを単に

label

と呼んでいる。

label

単独で束縛ラベルを指すことはない。

大域要素

(global entity) (

16.1

)

一つのプログラムを有効範囲とする識別子をもつ言語要素。

大小順序

(collating sequence) (

4.4.4.3

)

個々の種別パラメタに関する,すべての異なる文字の順序付け。

代入文

(assignment statement) (

7.4.1.1

)

変数

=

の形の文。

他言語結合

(linkage association) (

16.4.1.4

)

相互利用可能な

Fortran

の言語要素とそれに対応する言語

C

の言語要

素との間の結合。

多相的

(polymorphic) (

5.1.1.2

)

プログラムの実行中に異なる型をもつことができること。キーワード

CLASS

を指

定して宣言した実体は,多相的になる。

単純実行文

(action statement) (

2.1

)

計算処理動作を指定する 又は 制御する単一の文

(R214)

遅延束縛

(deferred binding) (

4.5.4

)

DEFERRED

属性をもつ束縛。遅延束縛は,抽象型定義

(

4.5.6

)

の中にだけ

書くことができる。

抽象型

(abstract type) (

4.5.6

)

ABSTRACT

属性をもつ型。多相的でない実体は,抽象型として宣言してはならな

い。多相的な実体は,動的な抽象型をもつように構成したり割り付けたりしてはならない。

重複部分配列

(many-one array section) (

6.2.2.3.2

)

ベクトル添字をもつ部分配列であって,そのベクトル添字が

同じ値の二つ以上の要素をもっているもの。

直接拡張型

(extended type) (

4.5.6

)

他の型の拡張である拡張可能型。

EXTENDS

属性をもって宣言された型。

定数

(constant) (

2.4.3.1.2

)

プログラムを実行している間,値を変えることのできないデータ実体。定数は,名前

付き定数 又は 定数表現でありうる。

定数表現

(literal constant) (

2.4.3.1.2

4.4

)

名前のない定数。

注記

F

ORTRAN

77

では,これを単に定数と呼んでいた。

データ

(datum, data)

単一の量。データは,その型に指定されている値の集合のいずれかの値をとりうる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

368

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

注記

英語では,単数形が

datum

,複数形が

data

である。

データ型

(data type) (

4

)

型の項を見よ。

データ実体

(data object) (

2.4.3.1

)

定数,変数 又は 部分定数(定数の部分実体)のいずれかであるデータ要素。

データ要素

(data entity) (

2.4.3

)

データ実体,式の評価結果 又は 関数引用の実行結果(関数結果と呼ぶ。)。デー

タ要素は,型(組込み型 又は 派生型)をもち,不定である変数の場合を除いて,データ値をもつ。すべてのデータ

要素は,次元数をもち,したがってスカラ 又は 配列となる。

手続

(procedure) (

2.2.3

12.1

)

プログラムの実行中に呼び出すことのできる計算処理。手続は,関数 又は サブ

ルーチンでありうる。手続はまた,組込み手続,外部手続,モジュール手続,内部手続,仮手続 又は

文関数

でありう

る。一つの副プログラムは,その中に

ENTRY

文を含んでいれば,二つ以上の手続を定義することができる。

手続引用仕様

(procedure interface) (

12.3

)

手続の特性,その手続の名前,それぞれの仮引数の名前 及び(もしあ

れば)その手続を引用するために用いることのできる総称識別子。

手続特定子

(procedure designator) (

2.5.1

)

手続の特定子。

問合せ関数

(inquiry function) (

13.1

)

組込み関数又は 組込みモジュール内で定義された関数であって,その結果

が,一つ以上の引数の,値ではなく性質に依存して決まるもの。

当該実体仮引数

(passed-object dummy argument) (

4.5.3.3

)

型束縛手続 又は 手続ポインタ成分の仮引数であって,

その手続を呼び出すのに使った実体と結合されるもの。

特性

(characteristics) (

12.2

)

(1)

手続について,関数であるかサブルーチンであるかの分類,純粋であるかどうか,要素別処理であるかどうか,

BIND

属性をもつかどうか,束縛ラベルの値, 各仮引数の特性 及び 関数であればその関数結果の特性。

(2)

仮引数について,それがデータ実体であるかどうか,手続であるかどうか, 手続ポインタであるかどうか,

選択

戻り星印であるかどうか

及び

OPTIONAL

属性をもつかどうか。

(3)

仮データ実体について,その型,型パラメタ,形状,他のデータ要素への配列上下限 及び 型パラメタの依存の

仕方,授受特性,省略可能な引数であるかどうか,ポインタ 又は 指示先であるかどうか,割付け実体であるか

どうか,

VALUE

属性,

ASYNCHRONOUS

属性 又は

VOLATILE

属性をもつかどうか,多相的であるかどう

か, 並びに 形状引継ぎ,大きさ引継ぎ 又は 型パラメタ引継ぎであるかどうか。

(4)

仮手続又は 手続ポインタについて,省略可能な引数であるかどうか,引用仕様が明示的であるか暗黙的である

か 及び 明示的であればその手続の特性。

(5)

関数結果について,その型,型パラメタ,どの型パラメタが無指定か,多相的かどうか, ポインタ又は 割付け

関数結果であるかどうか,手続ポインタであるかどうか,ポインタ又は 割付け関数結果であれば次元数,ポイン

タでも割付け関数結果でもなければ形状,他のデータ要素への配列上下限 及び 型パラメタの依存の仕方

,並びに

文字長引継ぎであるかどうか

特定子

(designator) (

2.5.1

)

名前の後に,成分選択子,部分配列選択子,配列要素選択子 及び 部分列選択子を

0

以上書いたもの。

内部手続

(internal procedure) (

2.2.3.3

)

内部副プログラムによって定義される手続。

内部ファイル

(internal file) (

9.3

)

データを内部記憶から内部記憶へ転送し変換するために用いる文字変数。

内部副プログラム

(internal subprogram) (

2.2

)

副プログラムであって,主プログラム 又は 他の副プログラムに包

まれているもの。

名前

(name) (

3.2.1

)

英字の後ろに

62

文字以内の英数字下線(英字,数字 及び 下線)を書いた構文素。

注記

F

ORTRAN

77

では,これを英字名

(symbolic name)

と呼んでいた。

名前結合

(name association) (

16.4.1

)

引数結合,参照結合,親子結合,他言語結合 又は 構文結合。

名前付き

(named)

名前をもっていること。すなわち,

名前付き変数

のような用法における

名前付き

は,その

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

369

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

変数名が添字並び,部分列指定などによって修飾されていないことを意味する。例えば,

X

が配列変数であるとき,引

X

は名前付き変数であるのに対して,引用

X(1)

は実体特定子である。

名前付き定数

(named constant) (

2.4.3.1.2

)

名前をもつ定数。

注記

F

ORTRAN

77

では,これを定数名

(symbolic name of a constant)

と呼んでいた。

廃止事項

(deleted feature) (

1.8

)

以前の

Fortran

規格の機能のうち,冗長になっていてほとんど使用されなくなっ

ているとみなされるもの。以前の

Fortran

規格にあってこの規格にない機能の一覧表を,

B.1

に示す。この規格で廃

止予定事項とされている機能は,次の改正の際に廃止事項になりうる。

廃止予定事項

(obsolescent feature) (

1.8

)

冗長にはなっているがまだ頻繁に使用されているとみなされる機能。

配列

(array) (

2.4.5

)

同じ型,同じ型パラメタをもつスカラデータの集合であって,要素が四角い形に配置されたも

の。配列は,名前付き配列,部分配列,構造体成分,関数値 又は 式でありうる。配列の次元数は,

1

以上とする。

注記

F

ORTRAN

77

では,すべての配列が名前付きであり変数であった。

配列ポインタ

(array pointer) (

5.1.2.5.3

)

配列へのポインタ。

配列要素

(array element) (

2.4.5

6.2.2

)

名前付き配列 又は 構造体成分である配列を構成する,個々のスカラデータ。

派生型

(derived type) (

2.4.1.2

4.5

)

成分をもつデータの型。それぞれの成分は,組込み型 又は 別の派生型と

する。

引数

(argument) (

12

)

実引数 又は 仮引数。

引数結合

(argument association) (

16.4.1.1

)

手続引用を実行している間の,実引数と仮引数との関係。

非実行文

(nonexecutable statement) (

2.3.1

)

計算処理動作が行われるときのプログラム環境を指定するために用い

る文。

非数

(NaN) (

14.7

)

IEEE

算術の非数(

Not-a-Number

)の値。定義されない値 又は 不正な演算で生成される値を

表す。

ファイル

(file) (

9

)

内部ファイル 又は 外部ファイル。

ファイル記憶単位

(file storage unit) (

9.2.4

)

書式なしファイル 又は 流れファイルの記憶単位。

副プログラム

(subprogram) (

2.2

)

関数副プログラム 又は サブルーチン副プログラム。

注記

F

ORTRAN

77

では,初期値設定プログラム単位をも副プログラムと呼んでいた。

副プログラムの分身

(instance of a subprogram) (

12.5.2.3

)

ある副プログラムで定義されている手続を,呼び出す

時に生成されるその副プログラムの複製。

符号なし

(unsigned)

言語

C

の数値型に冠する修飾語であり,その型が非負の値だけから構成されることを示すも

の。言語

C

の国際規格の

6.2.5

で定義されている。

Fortran

には同様のものはない。

不定

(undefined) (

2.5.5

)

データ実体について,確定した値をもっていない状態。

不特定記憶単位

(unspecified storage unit) (

16.4.3.1

)

ポインタ,又は ポインタでなく型が基本文字型,基本整数

型,基本実数型,倍精度実数型,基本論理型 及び 基本複素数型のいずれでもないスカラを,保持するための記憶場

所の単位。

部分実体

(subobject) (

2.4.3.1

)

データ実体の一部分であって,他の部分とは独立に引用したり確定したりできる部

分。部分実体は,配列要素,部分配列,構造体成分,部分列 又は 複素数型実体の実部 若しくは 虚部でありうる。

部分成分

(subcomponent) (

6.1.2

)

派生型の実体の部分成分とは,その実体の成分 又は その実体の部分実体の成分

のこと。

部分配列

(array section) (

2.4.5

6.2.2.3

)

配列の部分実体であって,構造体成分でないもの。

部分配列添字

(section subscript) (

6.2.2

)

部分配列選択子中の添字,ベクトル添字 又は 添字三つ組。

部分列

(substring) (

6.1.1

)

スカラ文字列の連続的な一部分。

注記

部分配列も部分列選択子を含むことができる。その場合の結果は,部分列とは呼ばず,部分配列と呼ぶ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

370

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

プログラム

(program) (

2.2.1

)

ちょうど一つの主プログラムを含むプログラム単位の一組。

プログラム単位

(program unit) (

2.2

)

プログラムの基本的な構成要素。文,注釈 及び

INCLUDE

行の列。プログ

ラム単位は,主プログラム,モジュール,外部副プログラム 又は 初期値設定プログラム単位でありうる。

ブロック

(block) (

8.1

)

ある実行構文に埋め込まれ,その構文特有の文で両端を区切られた実行構文の列。列全体

を一つのものとして扱う。

(statement) (

3.3

)

構文素の列。文は,通常は単一の行で構成するが,ある行から次の行へ文を継続することが

でき,セミコロンを用いて一つの行の中に複数の文を書くことができる。

文関数

(statement function) (

12.5.4

)

代入文と同様の形をした単一の文によって定義される手続。

文内要素

(statement entity) (

16

)

一つの文 又は 一つの文の一部分を有効範囲とする構文素によって識別される言

語要素。

文番号

(statement label) (

3.2.4

)

文の左に先行して置き,その文を参照するために用いることのできる,

5

文字以

内の数字からなる構文素。

注記

対応国際規格の構文規則中では,文番号のことを単に

label

と呼んでいる。この語は,束縛ラベル

(binding

label)

にも使われている。

ベクトル添字

(vector subscript) (

6.2.2.3.2

)

次元数

1

の整数式である部分配列添字。

変形関数

(transformational function) (

13.1

)

組込み関数 又は 組込みモジュールで定義された関数であって,要素

別処理関数でも問合せ関数でもない関数。

変数

(variable) (

2.4.3.1.1

)

プログラムを実行している間に,値を確定したり再確定したりできるデータ実体。変数

は,名前付きデータ実体,配列要素,部分配列,構造体成分 又は 部分列でありうる。

注記

F

ORTRAN

77

では,すべての変数がスカラであり名前付きであった。

void

(void)

言語

C

の型であり,値をもたないもの。言語

C

の国際規格の

6.2.5

で定義されている。

Fortran

は同様のものはない。

ポインタ

(pointer) (

2.4.6

)

POINTER

属性をもつ言語要素。

ポインタ結合

(pointer association) (

16.4.2

)

ポインタを指示先に対して指示状態にする作用。

ポインタ代入

(pointer assignment) (

7.4.2

)

ポインタ代入文の実行,又はポインタを部分実体としてもつ派生型の

データ実体への代入文の実行による,ポインタと指示先とのポインタ結合。

ポインタ代入文

(pointer assignment statement) (

7.4.2

)

ポインタ実体

=>

指示先

の形の文。

末端成分

(ultimate component) (

4.5

)

構造体について,次のいずれか。

(1)

組込み型である成分

(2)

ALLOCATABLE

属性 又は

POINTER

属性をもつ成分

(3)

ALLOCATABLE

属性も

POINTER

属性ももたない派生型成分の末端成分

丸めモード

(rounding mode) (

10.6.1.2.6

14.3

)

厳密に表現できない演算の結果を選択する方法。

IEEE

算術には,

直近丸め,

(ゼロへの)切捨て,

への)切上げ 及び (

−∞

への)切下げの四つのモードがある。入出力には更に,

COMPATIBLE

及び

PROCESSOR DEFINED

の二つのモードがある。

無指定型パラメタ

(deferred type parameter) (

4.2

)

実体の宣言時には値を指定せず,その実体の割付け時 又は ポ

インタ代入時に値を指定する長さ型パラメタ。

明示的引用仕様

(explicit interface) (

12.3.1

)

手続が引用の時点で明示的引用仕様をもてば,処理系は,その引用の

特性と宣言の特性とがこの規格で要求される関係にあることを確認できる。 手続は,次のいずれかであるとき,明示

的引用仕様をもつ。 内部手続,モジュール手続,組込み手続,引用仕様本体をもつ外部手続,自分自身の有効域内で

引用されている手続,又は 引用仕様本体をもつ仮手続。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

371

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

A

明示的初期値指定

(explicit initialization) (

5.1

)

明示的初期値指定は,型宣言文中 又は

DATA

文中での,組込み型

又は 派生型の実体に対して指定できる。暗黙的初期値指定をもつ派生型の実体は,

DATA

文中に書いてはならない。

文字

(character) (

3.1

)

英字,数字 及び その他の記号。

文字記憶単位

(character storage unit) (

16.4.3.1

)

ポインタでなく型が基本文字型であり文字長が

1

であるスカラ

を,保持するための記憶場所の単位。

文字長

(character length)

文字列の長さのこと。

文字長パラメタ

(character length parameter) (

2.4.1.1

)

文字型のデータ要素の,文字の個数を指定する型パラメタ。

モジュール

(module) (

2.2.4

11.2

)

プログラム単位であって,他のプログラム単位から参照される定義を,内部に

もっている 又は 参照しているもの。

モジュール手続

(module procedure) (

2.2.3.2

)

モジュール副プログラムによって定義される手続。

モジュール副プログラム

(module subprogram) (

2.2

)

モジュールに包まれていて内部副プログラムではない副プロ

グラム。

文字列

(character string) (

4.4.4

)

左から右へ順に

1

,

2

,

3

, . . .

と番号付けられた文字の列。

文字列の長さ

(length of a character string) (

4.4.4

)

文字列中の文字の個数。

有効域

(scoping unit) (

2.2

)

(1)

プログラム単位 又は 副プログラムから,それに包まれている有効域をすべて除いた部分。

(2)

派生型定義。

(3)

引用仕様本体から,それに包まれている有効域をすべて除いた部分。

有効項目

(effective item) (

9.5.2

)

入出力並びを

9.5.2

の規則に従って展開して得られるスカラ実体。

有効範囲

(scope) (

16

)

ある構文素がある単一の解釈をもつようなプログラムの一部分。有効範囲は,一つのプログ

ラム,一つの有効域,一つの構造構文,一つの文 又は 一つの文の一部分でありうる。

要素別処理

(elemental) (

2.4.5

7.4.1.4

12.7

)

一つの配列の要素ごとに,又は 一組の形状適合する配列 及び ス

カラの対応要素ごとに,独立に適用される演算,手続 又は 代入に冠する修飾語。

呼び出す

(invoke) (

2.2.3

)

(1)

サブルーチンを,

CALL

文 又は 利用者定義代入文によって呼ぶこと。

(2)

式の評価中に関数を,その名前 又は 演算子を用いた引用によって呼ぶこと。

(3)

後始末によって,後始末サブルーチンを呼ぶこと。

利用者定義演算

(defined operation) (

7.1.3

12.3.2.1.1

)

演算であって組込み演算でないもの。利用者定義演算は,

総称識別子に関連付けた関数によって定義する。

利用者定義代入文

(defined assignment statement) (

7.4.1.4

12.3.2.1.2

)

代入文であって組込み代入文でないも

の。利用者定義代入は,サブルーチン,及び

ASSIGNMENT(=)

の指定のある総称引用仕様によって定義する。

連携処理系

(companion processor) (

2.5.10

)

大域的なデータ 及び 手続を引用 又は 確定 若しくは 定義できる機

構。そのような言語要素を

Fortran

以外の手段で引用 又は 確定 若しくは 定義する機構であってもよい。それらの手

続は,

C

関数原型で記述することができる。

割付け変数

(allocatable variable) (

5.1.2.2

)

ALLOCATABLE

属性をもつ変数。その変数は,割り付けられている

ときにだけ,引用したり確定したりしてよい。配列である場合,割り付けられているときにだけ,形状をもつ。名前

付き変数 又は 構造体成分であってもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

372

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

B

参考

廃止事項 及び 廃止予定事項

B.1

廃止事項

廃止事項

(deleted feature)

とは,

Fortran 90

の機能のうちで冗長だとみなされてほとんど使われていないものをい

う。廃止事項の性質は,本体

1.8.1

による。

Fortran 90

の機能のうちで,この規格に含まないものを次に示す。

(1)

実数型 及び 倍精度実数型の

DO

変数。

F

ORTRAN

77

に存在し,整合性のために

Fortran 90

においても存在した,整数型に加えて実数型 及び 倍精

度実数型の

DO

変数を使用できる機能は,廃止された。同様のことは,ループ制御がなく適切な終了判定のある

DO

構文によって行える。

(2)

IF

構文の外部から

END IF

文への飛越し。

F

ORTRAN

77

において,更に整合性のために

Fortran 90

においても,

IF

構文の外から

END IF

文への飛越し

は可能であったが,これは廃止された。同様のことは,

END IF

文の直後の

CONTINUE

文への飛越しによって

行える。

(3)

PAUSE

文。

PAUSE

文は,

F

ORTRAN

66

F

ORTRAN

77

,そして整合性のために

Fortran 90

においても存在したが,廃止

された。同様のことは,適切な装置への通知の出力 及び それに続く適切な装置からの入力によって行える。

(4)

ASSIGN

文,割当て形

GO TO

文 及び 文番号割当てによる

FORMAT

文の指定。

ASSIGN

文 及び それに関連する割当て形

GO TO

文は,

F

ORTRAN

66

F

ORTRAN

77

,そして整合性のため

Fortran 90

においても存在したが,廃止された。更に,文番号の割り当てられた整数を書式識別子として用い

る機能は,

F

ORTRAN

77

及び

Fortran 90

で存在したが,廃止された。同様のことは,割当て形

GO TO

文の代

わりに他の制御構造を用い,文番号を割り当てる整変数の代わりに書式仕様をもつ基本文字型の変数を用いるこ

とによって行える。

(5)

H

形編集記述子。

F

ORTRAN

77

において,そして整合性のために

Fortran 90

においても,文字列編集記述子の代わりの形式が

あった。

F

ORTRAN

66

においては,そのような形式だけがあった。これは廃止された。

これまでの

Fortran

の国際規格の版,通称 及び

JIS

規格の版を,次に示す。

ISO R 1539

-1972

F

ORTRAN

66

JIS C 6201

6203

1967

年制定)

ISO 1539

-1980

F

ORTRAN

77

JIS C 6201

-1982

JIS X 3001

-1982

に改称)

ISO/IEC 1539

:1991

Fortran 90

JIS X 3001

-1994

ISO/IEC 1539-1

:1997

Fortran 95

JIS X 3001-1

:1998

これらの廃止事項の詳細な規定については,

Fortran 90

規格を参照。

B.2

廃止予定事項

廃止予定事項

(obsolescent feature)

とは,

Fortran 90

の機能のうちで冗長だとみなされ,より良い方法が

Fortran

90

に存在したものをいう。廃止予定事項の性質は,

1.8.2

による。廃止予定事項には,次のものがある。

(1)

算術

IF

文 →

IF

(

8.1.2.4

)

又は

IF

構文

(

8.1.2

)

を用いる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

373

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

B

(2)

DO

構文での端末文の共有 及び

END DO

文でも

CONTINUE

文でもない端末文 → 一つの

DO

文に対して一つ

END DO

文 又は

CONTINUE

文を用いる。

(3)

選択戻り →

B.2.1

参照。

(4)

計算形

GO TO

文 →

B.2.2

参照。

(5)

文関数 →

B.2.3

参照。

(6)

実行文の間の

DATA

文 →

B.2.4

参照。

(7)

文字長引継ぎ文字関数 →

B.2.5

参照。

(8)

固定形式 →

B.2.6

参照。

(9)

CHARACTER*

の形の文字型宣言 →

B.2.7

参照。

B.2.1

選択戻り

選択戻り

(alternate return)

は,引数並び中に文番号を書くことによって,呼び出された手続から戻る時に,戻り先

の実行を直接選択できるようにする。これと同じ効果は,戻った後で整変数の値を

CASE

構文で調べても得られる。

そうすることで,引数結合に関する構文上 及び 意味上の不規則性を避けることができる。例えば,

CALL SUBR_NAME (X, Y, Z, *100, *200, *300)

は,次のように書き換えることができる。

CALL SUBR_NAME (X, Y, Z, RETURN_CODE)

SELECT CASE (RETURN_CODE)

CASE (1)

...

CASE (2)

...

CASE (3)

...

CASE DEFAULT

...

END SELECT

B.2.2

計算形

GO TO

計算形

GO TO

文は,同じ計算処理を表現できて,しかもより一般的で使いやすくて効率的な手段となる

CASE

文に置き換わった。

B.2.3

文関数

文関数は,多くの直観的でない制限を伴い,その構文が代入文の構文と混同されやすいので誤りの原因となりうる。

内部関数は,文関数のより一般化された形式であり,完全にそれに取って代わる。

B.2.4

実行文の間の

DATA

F

ORTRAN

66

において,そして互換性のため

F

ORTRAN

77

及び

Fortran 90

においても,文の順序の規則は,

DATA

文が単純宣言文の後でプログラム単位中のどこにでも現われることを許していた。実行文の間に

DATA

文を置くこと

は,めったに行われていないし,不必要であり,誤りの原因となりうる。

B.2.5

文字長引継ぎ文字関数

関数結果の属性が,親子結合 又は 参照結合を通して関数から参照可能なデータ,及び 呼出しにおける実引数だけ

に依存するということが,

Fortran

の他のところの考え方であるので,関数の文字長引継ぎは,言語の不規則性をも

たらしている。この機能のある種の使用は,自動文字長関数で置き換えることができ,そこでの関数結果の長さは宣

言式で宣言される。その他の使用は,関数の引数 及び 結果に対応する引数をもつサブルーチンの使用に置き換える

ことができる。

注記

関数の仮引数は,文字長引継ぎであってもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

374

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

B

B.2.6

固定形式

固定形式は,新規プログラムのための主要な機械可読入力媒体がせん(穿)孔カードであった時代に設計された。

プログラムの新規作成 又は 修正が,一般にキーボードとディスプレイを用いて入力される現在,

1

行内のけた位置

6

7

又は

73

に位置付けることは,不必要な手間であり,誤りの原因となりうる。自由形式は,この現代的な技術に

合うように設計された。

固定形式から自由形式に変換することは,ソフトウェアツールによって簡単にできる。

B.2.7

CHARACTER*

の形の文字型宣言

Fortran 90

には,文字型の宣言において文字長パラメタ選択子を指定する形が二つあった。より古い形(

CHARACTER*

文字長)は冗長であった。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

375

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

参考

箇条の注記

C.1

箇条

4

の注記

C.1.1

組込み型 及び 派生型(

4.4

及び

4.5

参照)

F

ORTRAN

77

は,規格で明示的に定義された型(論理型,整数型,実数型,倍精度実数型,複素数型 及び 文字型)

だけを規定していた。この規格は,これらの組込み型のほかに新しい型を生成できる派生型も規定している。派生型

定義は,組込み型 及び 派生型の成分からなるデータ構造を指定する。派生型定義は,データ実体を表さず,その派

生型の名前付き実体を宣言するための型枠を表す。

TYPE POINT

INTEGER X_COORD

INTEGER Y_COORD

END TYPE POINT

この定義は,組込み型である整数型の二つの成分(

X COORD

及び

Y COORD

)からなる

POINT

と名付けら

れた新しい派生型を指定する。

TYPE (POINT) FIRST, LAST

という文は,

POINT

型の値を保持する二つの

データ実体

FIRST

及び

LAST

を宣言する。

F

ORTRAN

77

は,数学的な実数の近似として組込み型

REAL

及び

DOUBLE PRECISION

を規定していた。この規格

は,

REAL

を一般化して,近似方法を選択する型パラメタをもつ組込み型にしている。その型パラメタは,種別

(

KIND

)

と名付けられ,処理系依存の値をもつ。

DOUBLE PRECISION

は,

REAL(

k

)

の同義語として扱う。ここで,

k

は処理系

定義の種別型パラメタ値

KIND(0.0D0)

とする。

特定の種別型パラメタ値をもつことを保証するために,実定数表現に種別型パラメタを指定することができる(

4.4.2

参照)。

INTEGER Q

PARAMETER (Q = 8)

REAL (Q) B

この宣言によって,定数表現

10.93 Q

は,

B

と同じ精度をもつ。

F

ORTRAN

77

は,長さゼロの文字列を禁止していた。この規格は,それを許している(

4.4.4

参照)。

異なる派生型定義を用いて宣言された実体は,異なる派生型とする。

TYPE APPLES

INTEGER NUMBER

END TYPE APPLES

TYPE ORANGES

INTEGER NUMBER

END TYPE ORANGES

TYPE (APPLES) COUNT1

TYPE (ORANGES) COUNT2

COUNT1 = COUNT2

! APPLES

ORANGES

を混同した誤った文

APPLES

の実体と型

ORANGES

の実体のすべての成分が同じ組込み型であっても,実体は異なる型に

なる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

376

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

C.1.2

近似方法の選択(

4.4.2

参照)

プログラマは,モジュール 及び パラメタ化された実数型の使用によって,プログラム全体での実数の近似方法が

選択できる。

パラメタ化をするには,名前付き整定数に種別型パラメタ値を指定し,すべての実数型,複素数型 及び 派生型の

宣言でこの名前付き定数を使用すればよい。

INTEGER, PARAMETER :: LONG_FLOAT = 8

REAL (LONG_FLOAT) X, Y

COMPLEX (LONG_FLOAT) Z

これらの宣言文は,プログラム単位内のデータ実体

X

,

Y

及び

Z

に対して種別型パラメタ値

8

に対応する近

似方法を選択することを指定する。種別型パラメタ値

LONG FLOAT

は,

INTEGER

文 及び

PARAMETER

文をモジュール内に置き,名前付き定数

LONG FLOAT

USE

文で参照することによって,プログラム全体

で利用できる。

注記

モジュール内で

8

4

に変更すると,異なる近似方法が選択される。

処理系依存の値

4

又は

8

の使用を避けるには,

8

KIND(0.0)

又は

KIND(0.0D0)

で置き換えればよ

い。これら処理系依存の値を避けるもう一つの方法は,組込み問合せ関数

SELECTED REAL KIND

を用い

て種別値を選択することである。この関数は,最小の

10

進精度 及び 最小の

10

進指数範囲の要求をそれ

ぞれ指定する整数の引数

P

及び

R

を与えると,少なくとも

P

けたの

10

進精度をもち,正の値が少なく

とも

10

R

から

10

R

までの範囲をもつ近似方法の種別型パラメタ値を返す。上の宣言文の

8

を,例えば

SELECTED REAL KIND(10,50)

に置き換えてもよく,こうすると少なくとも

10

けたの

10

進精度をもち,

少なくとも

10

50

から

10

50

までの範囲をもつ近似方法を要求する。

種別型パラメタ値の大きさ 及び 順序に制約はない。したがって,実装に際して種別型パラメタ値の割当てには柔

軟性があり,以前に割り当てた種別型パラメタ値を変更しないで新しい種別を追加できる。

種別型パラメタ値は移植性がないので,プログラム中では直接種別型パラメタ値を使用せず,上記のような名前付

き定数(例えば,

SINGLE

IEEE SINGLE

DOUBLE

QUAD

など)だけによって使用するとよい。

C.1.3

型の拡張 及び 成分の参照許可属性(

4.5.1.1

及び

4.5.3

参照)

直接拡張型の暗黙の参照許可属性は,型定義で指定してもよい。その成分の参照許可属性は,個別に指定しても

よい。

module types

type base_type

private

!--

暗黙の参照許可属性の設定。

integer :: i

!-- i

は,非公開成分。

integer, private :: j !-- j

は,非公開成分。

integer, public :: k

!-- k

は,公開成分。

end type base_type

type, extends(base_type) :: my_type

private

!-- my_type

で宣言された成分に対する暗黙の参照許可属性の設定。

integer :: l

!-- l

は,非公開成分。

integer, public :: m

!-- m

は,公開成分。

end type my_type

end module types

subroutine sub

use types

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

377

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

type (my_type) :: x

....

call another_sub( &

x%base_type,

&!-- base_type

x

の公開副実体なので問題ない。

x%base_type%k,

&!-- x%base_type

及び

k

が公開なので問題ない。

x%k,

&!-- x%base_type%k

の短縮形なので問題ない。

x%base_type%i,

&!-- i

が非公開なので,正しくない。

x%i)

!-- x%base_type%i

の短縮形なので,正しくない。

end subroutine sub

C.1.4

抽象型

X Window

における表示オブジェクトの例

TYPE, ABSTRACT :: DRAWABLE_OBJECT

REAL, DIMENSION(3) :: RGB_COLOR=(/1.0,1.0,1.0/) !

白色

REAL, DIMENSION(2) :: POSITION=(/0.0,0.0/)

!

重心

CONTAINS

PROCEDURE(RENDER_X), PASS(OBJECT), DEFERRED :: RENDER

END TYPE DRAWABLE_OBJECT

ABSTRACT INTERFACE

SUBROUTINE RENDER_X(OBJECT, WINDOW)

CLASS(DRAWABLE_OBJECT), INTENT(IN) :: OBJECT

CLASS(X_WINDOW), INTENT(INOUT) :: WINDOW

END SUBROUTINE RENDER_X

END INTERFACE

抽象型を拡張することによって,抽象型でない型が宣言できる。

TYPE, EXTENDS(DRAWABLE_OBJECT) :: DRAWABLE_TRIANGLE !

これは抽象型ではない。

REAL, DIMENSION(2,3) :: VERTICES

!

重心に対する変数

CONTAINS

PROCEDURE, PASS(OBJECT) :: RENDER=>RENDER_TRIANGLE_X

END TYPE DRAWABLE_TRIANGLE

実際の描画手続は,

x

座標が

OBJECT%POSITION(1)+OBJECT%VERTICES(1,:)

であって,

y

座標が

OBJECT%POSITION(2)+OBJECT%VERTICES(2,:)

である

WINDOW

に三角形を描く。

SUBROUTINE RENDER_TRIANGLE_X(OBJECT, WINDOW)

CLASS(DRAWABLE_TRIANGLE), INTENT(IN) :: OBJECT

CLASS(X_WINDOW), INTENT(INOUT) :: WINDOW

...

END SUBROUTINE RENDER_TRIANGLE_X

C.1.5

ポインタ(

4.5.1

参照)

ポインタは,指示先実体との結合状態を動的に変更することのできる名前である。ある意味では,普通の変数は,

特定の実体との結合状態を固定的にもつ名前である。普通の変数名は,その変数の生存期間中同一の記憶場所を参照

する。ポインタ名は,異なる時に異なる記憶場所を参照することもあるし,記憶場所を参照しないこともある。変数

は,適当な型,型パラメタ 及び 配列の次元数の値を保持する領域のための記述子と考えてもよい。記述子に格納さ

れる値は,変数が生成された時に確定する。ポインタも記述子と考えてよいが,その値は,動的に変更して別の記憶

場所を記述することができる。ポインタが宣言された時に,記述子を保持するための領域は生成されるが,指示先実

体のための領域は生成されない。

派生型は,ポインタとして定義された成分を一つ以上もってもよい。その成分が同じ派生型の実体へのポインタで

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

378

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

あってもよい。この

再帰的

なデータ定義によって,リスト,木 及び グラフのような動的データ構造を構築するこ

とができる。

TYPE NODE

!

再帰的

な型の定義

INTEGER :: VALUE = 0

TYPE (NODE), POINTER :: NEXT_NODE => NULL ( )

END TYPE NODE

TYPE (NODE), TARGET :: HEAD

!

自動的に初期化される。

TYPE (NODE), POINTER :: CURRENT, TEMP !

ポインタを宣言する。

INTEGER :: IOEM, K

CURRENT => HEAD

! CURRENT

はリストの先頭を指す。

DO

READ (*, *, IOSTAT = IOEM) K

!

もしあれば,次の値を読む。

IF (IOEM /= 0) EXIT

ALLOCATE (TEMP)

!

新しいセルを生成する。

TEMP % VALUE = K

!

セルに値を割り当てる。

CURRENT % NEXT_NODE => TEMP

!

新しいセルをリストに加える。

CURRENT => TEMP

! CURRENT

はリストの新しい末尾を指す。

END DO

これによって,リストが組み立てられ,最後に接続されたセルのポインタは,空状態になる。リストを

たどるには,次のようなループを使用する。

CURRENT => HEAD

DO

IF (.NOT. ASSOCIATED (CURRENT % NEXT_NODE)) EXIT

CURRENT => CURRENT % NEXT_NODE

WRITE (*, *) CURRENT % VALUE

END DO

注記

リストの長さが

3

であると分かっている場合には,次のように書くこともできる。

WRITE (*,*) CURRENT % NEXT NODE % VALUE

WRITE (*,*) CURRENT % NEXT NODE % NEXT NODE % VALUE

WRITE (*,*) CURRENT % NEXT NODE % NEXT NODE % NEXT NODE % VALUE

...

C.1.6

構造体構成子 及び 総称名

総称名は,型名と同じであってもよい。これによって,型が非公開成分をもっていても,その型に対する

利用者定義の構造体構成子であるかのように見せることができる。

MODULE mytype_module

TYPE mytype

PRIVATE

COMPLEX value

LOGICAL exact

END TYPE

INTERFACE mytype

MODULE PROCEDURE int_to_mytype

END INTERFACE

!

演算子の定義など

...

CONTAINS

TYPE(mytype) FUNCTION int_to_mytype(i)

INTEGER,INTENT(IN) :: i

int_to_mytype%value = i

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

379

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

int_to_mytype%exact = .TRUE.

END FUNCTION

!

演算子に対応した手続の宣言

...

END

PROGRAM example

USE mytype_module

TYPE(mytype) x

x = mytype(17)

END

型が型パラメタをもっていても,その型は総称名として使うことができる。

MODULE m

TYPE t(kind)

INTEGER, KIND :: kind

COMPLEX(kind) value

END TYPE

INTEGER,PARAMETER :: single = KIND(0.0), double = KIND(0d0)

INTERFACE t

MODULE PROCEDURE real_to_t1, dble_to_t2, int_to_t1, int_to_t2

END INTERFACE

...

CONTAINS

TYPE(t(single)) FUNCTION real_to_t1(x)

REAL(single) x

real_to_t1%value = x

END FUNCTION

TYPE(t(double)) FUNCTION dble_to_t2(x)

REAL(double) x

dble_to_t2%value = x

END FUNCTION

TYPE(t(single)) FUNCTION int_to_t1(x,mold)

INTEGER x

TYPE(t(single)) mold

int_to_t1%value = x

END FUNCTION

TYPE(t(double)) FUNCTION int_to_t2(x,mold)

INTEGER x

TYPE(t(double)) mold

int_to_t2%value = x

END FUNCTION

...

END

PROGRAM example

USE m

TYPE(t(single)) x

TYPE(t(double)) y

x = t(1.5)

! real_to_t1

の引用。

x = t(17,mold=x)

! int_to_t1

の引用。

y = t(1.5d0)

! dble_to_t2

の引用。

y = t(42,mold=y)

! int_to_t2

の引用。

y = t(kind(0d0)) ((0,1)) !

t

に対して,構造体構成子を使用する。

END

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

380

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

C.1.7

総称型束縛手続

総称型束縛手続をもった派生型の例。

次の例と総称引用仕様宣言を用いて書き直した例との違いは,

USE(rational_numbers),ONLY : rational

が,型束縛手続の妨げになるかどうかである。利用者は,利用者定義代入 及び 拡張された演算を参照す

ることができる。

MODULE rational_numbers

IMPLICIT NONE

PRIVATE

TYPE,PUBLIC :: rational

PRIVATE

INTEGER n,d

CONTAINS

!

普通の型束縛手続

PROCEDURE :: real => rat_to_real

!

総称を用意するための個別の型束縛手続

PROCEDURE,PRIVATE :: rat_asgn_i, rat_plus_rat, rat_plus_i

PROCEDURE,PRIVATE,PASS(b) :: i_plus_rat

!

総称の型束縛手続

GENERIC :: ASSIGNMENT(=) => rat_asgn_i

GENERIC :: OPERATOR(+) => rat_plus_rat, rat_plus_i, i_plus_rat

END TYPE

CONTAINS

ELEMENTAL REAL FUNCTION rat_to_real(this) RESULT(r)

CLASS(rational),INTENT(IN) :: this

r = REAL(this%n)/this%d

END FUNCTION

ELEMENTAL SUBROUTINE rat_asgn_i(a,b)

CLASS(rational),INTENT(OUT) :: a

INTEGER,INTENT(IN) :: b

a%n = b

a%d = 1

END SUBROUTINE

ELEMENTAL TYPE(rational) FUNCTION rat_plus_i(a,b) RESULT(r)

CLASS(rational),INTENT(IN) :: a

INTEGER,INTENT(IN) :: b

r%n = a%n + b*a%d

r%d = a%d

END FUNCTION

ELEMENTAL TYPE(rational) FUNCTION i_plus_rat(a,b) RESULT(r)

INTEGER,INTENT(IN) :: a

CLASS(rational),INTENT(IN) :: b

r%n = b%n + a*b%d

r%d = b%d

END FUNCTION

ELEMENTAL TYPE(rational) FUNCTION rat_plus_rat(a,b) RESULT(r)

CLASS(rational),INTENT(IN) :: a,b

r%n = a%n*b%d + b%n*a%d

r%d = a%d*b%d

END FUNCTION

END

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

381

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

C.1.8

後始末サブルーチン(

4.5.5

4.5.5.1

4.5.5.2

及び

4.5.5.3

参照)

後始末サブルーチンとパラメタをもった派生型の例

MODULE m

TYPE t(k)

INTEGER, KIND :: k

REAL(k),POINTER :: vector(:) => NULL()

CONTAINS

FINAL :: finalize_t1s, finalize_t1v, finalize_t2e

END TYPE

CONTAINS

SUBROUTINE finalize_t1s(x)

TYPE(t(KIND(0.0))) x

IF (ASSOCIATED(x%vector)) DEALLOCATE(x%vector)

END SUBROUTINE

SUBROUTINE finalize_t1v(x)

TYPE(t(KIND(0.0))) x(:)

DO i=LBOUND(x,1),UBOUND(x,1)

IF (ASSOCIATED(x(i)%vector)) DEALLOCATE(x(i)%vector)

END DO

END SUBROUTINE

ELEMENTAL SUBROUTINE finalize_t2e(x)

TYPE(t(KIND(0.0d0))),INTENT(INOUT) :: x

IF (ASSOCIATED(x%vector)) DEALLOCATE(x%vector)

END SUBROUTINE

END MODULE

SUBROUTINE example(n)

USE m

TYPE(t(KIND(0.0))) a,b(10),c(n,2)

TYPE(t(KIND(0.0d0))) d(n,n)

...

!

このサブルーチンから戻るときには,次の処理が効果的に行われる。

! CALL finalize_t1s(a)

! CALL finalize_t1v(b)

! CALL finalize_t2e(d)

!

変数

C

に対しては,適切な手続を定義していないので,

!

後始末サブルーチンは呼び出されない。

END SUBROUTINE

後始末サブルーチンをもった直接拡張型の例

MODULE m

TYPE t1

REAL a,b

END TYPE

TYPE,EXTENDS(t1) :: t2

REAL,POINTER :: c(:),d(:)

CONTAINS

FINAL :: t2f

END TYPE

TYPE,EXTENDS(t2) :: t3

REAL,POINTER :: e

CONTAINS

FINAL :: t3f

END TYPE

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

382

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

...

CONTAINS

SUBROUTINE t2f(x) ! TYPE(t2)

で追加された成分の後始末

TYPE(t2) :: x

IF (ASSOCIATED(x%c)) DEALLOCATE(x%c)

IF (ASSOCIATED(x%d)) DEALLOCATE(x%d)

END SUBROUTINE

SUBROUTINE t3f(y) ! TYPE(t3)

で追加された成分の後始末

TYPE(t3) :: y

IF (ASSOCIATED(y%e)) DEALLOCATE(y%e)

END SUBROUTINE

END MODULE

SUBROUTINE example

USE m

TYPE(t1) x1

TYPE(t2) x2

TYPE(t3) x3

...

!

このサブルーチンから戻るときには,次の処理が効果的に行われる。

! CALL t2f(x2)

! CALL t3f(x3)

! CALL t2f(x3%t2)

! x1

は,後始末可能ではないので何もしない。

END SUBROUTINE

C.2

箇条

5

の注記

C.2.1 POINTER

属性(

5.1.2.11

参照)

ポインタを宣言するためには,

POINTER

属性を指定しなければならない。型,型パラメタ 及び 次元数は,同じ

文で指定してもよいし,一つ以上の属性宣言文で指定してもよい。それらの属性は,その文で宣言されたポインタと

結合できる指示先実体の特性を決定する。ポインタの宣言は,そのような宣言がそれぞれの名前に対して一つの記述

子を生成すると解釈できる。そのような記述子は,指定した型,型パラメタ 及び 次元数の実体 及び 部分実体を,完

全に記述し記憶域内に位置付けるのに必要なすべてのデータを含んでいる。その記述子は,空として生成される。す

なわち,実際の記憶域空間への参照を記述する値を含まずに生成される。そのような記述子の値は,ポインタが実際

の指示先空間と結合されるときに確定する。

繰返し処理でのポインタの使用例を次に示す。

PROGRAM DYNAM_ITER

REAL, DIMENSION (:, :), POINTER :: A, B, SWAP

!

ポインタを宣言する。

...

READ (*, *) N, M

ALLOCATE (A (N, M), B (N, M))

!

指示先配列を割り付ける。

! A

に値を読み込む。

...

ITER: DO

...

! A

の値を変換して

B

の値を得る。

...

IF (CONVERGED) EXIT ITER

! A

B

とを交換する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

383

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

SWAP => A; A => B; B => SWAP

END DO ITER

...

END PROGRAM DYNAM_ITER

C.2.2 TARGET

属性(

5.1.2.14

参照)

プログラムの実行中にポインタと結合できる,ポインタでない実体には,

TARGET

属性を指定しなければならな

い。この属性は,主として最適化のために規定されている。これによって,処理系は,指示先として明示的に宣言さ

れていずポインタでもない実体が,宣言した元々の名前によってだけ参照されると想定できるようになる。この規則

は,暗黙的に宣言した実体を,ポインタの指示先として使用してはならないということをも意味する。したがって,

処理系は,ポインタのある場合にも,この規則なしには不可能な最適化を行うことができる。

繰返し処理での

TARGET

属性の使用例を次に示す。

PROGRAM ITER

REAL, DIMENSION (1000, 1000), TARGET :: A, B

REAL, DIMENSION (:, :), POINTER

:: IN, OUT, SWAP

...

! A

に値を読み込む。

...

IN => A

! IN

を指示先

A

に結合する。

OUT => B

! OUT

を指示先

B

に結合する。

...

ITER: DO

...

! IN

の値を変換して

OUT

の値を得る。

...

! IN

OUT

とを交換する。

SWAP => IN; IN => OUT; OUT => SWAP

END DO ITER

...

END PROGRAM ITER

C.2.3 VOLATILE

属性(

5.1.2.16

参照)

VOLATILE

属性をもつ変数を使って,オペレーティングシステム中の非同期プロセスと通信を行う例を示す。プ

ログラムは利用者の端末でのキー入力を検知し,処理中の適当な場所に制御を移す。

この場面では,最適化コンパイラが,通信に用いる変数をレジスタに割り当てたり,フロー解析を行って

EXIT

が一度も実行されないと判断するのを抑止するために,

VOLATILE

属性が必要になる。

SUBROUTINE TERMINATE_ITERATIONS

LOGICAL, VOLATILE

::

USER_HIT_ANY_KEY

! OS

に利用者のキー入力を見張らせ,キー入力を検知した時点で直ちに変数

"USER_HIT_ANY_KEY"

! TRUE

を代入する。この擬似的な呼出しの実装は,

OS

に依存する。

CALL OS_BEGIN_DETECT_USER_KEYSTROKE( USER_HIT_ANY_KEY )

USER_HIT_ANY_KEY = .FALSE.

!

これまであったキー入力を無視する

PRINT *, " Hit any key to terminate iterations!"

DO I = 1,100

...

! R

の値を計算する

PRINT *, I, R

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

384

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

IF (USER_HIT_ANY_KEY)

EXIT

ENDDO

! OS

に利用者のキー入力を見張るのをやめさせる。

CALL OS_STOP_DETECT_USER_KEYSTROKE

END SUBROUTINE TERMINATE_ITERATIONS

C.3

箇条

6

の注記

C.3.1

構造体成分(

6.1.2

参照)

構造体の成分は,目的の成分を記述するまで,その構造体階層の各層の成分を順々に書くことによって引用される。

1.

TYPE ID_NUMBERS

INTEGER SSN

INTEGER EMPLOYEE_NUMBER

END TYPE ID_NUMBER

TYPE PERSON_ID

CHARACTER (LEN=30) LAST_NAME

CHARACTER (LEN=1) MIDDLE_INITIAL

CHARACTER (LEN=30) FIRST_NAME

TYPE (ID_NUMBERS) NUMBER

END TYPE PERSON_ID

TYPE PERSON

INTEGER AGE

TYPE (PERSON_ID) ID

END TYPE PERSON

TYPE (PERSON) GEORGE, MARY

PRINT *, GEORGE % AGE

! AGE

成分の印字

PRINT *, MARY % ID % LAST_NAME

! MARY

LAST_NAME

の印字

PRINT *, MARY % ID % NUMBER % SSN ! MARY

SSN

の印字

PRINT *, GEORGE % ID % NUMBER

! GEORGE

SSN

及び

EMPLOYEE_NUMBER

の印字

構 造 体 成 分 は ,

GEORGE % AGE

の よ う に 組 込 み 型 の デ ー タ 実 体 で あって も よ い し ,

GEORGE

% ID % NUMBER

のように派生型であってもよい。その結果の成分は,組込み型 又は 派生型のスカラ 又は

配列でありうる。

2.

TYPE LARGE

INTEGER ELT (10)

INTEGER VAL

END TYPE LARGE

TYPE (LARGE) A (5)

!

要素数

5

の配列。各配列要素は,要素数

10

の配列

ELT

!

及びスカラ

VAL

を含む。

PRINT *, A (1)

!

要素数

10

の配列

ELT

及びスカラ

VAL

の印字。

PRINT *, A (1) % ELT (3) ! A

の第

1

要素の第

3

スカラ要素の印字。

PRINT *, A (2:4) % VAL

! A

の第

2

4

要素のスカラ

VAL

の印字。

3.

親型から継承した拡張可能型の実体において,成分は,親型の成分名を用いてその全体を参照することも

できるし,また必要に応じて親型の成分名を付加することによって個別に参照することもできる。

TYPE POINT

!

基底型

REAL :: X,Y

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

385

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

END TYPE POINT

TYPE, EXTENDS(POINT)

:: COLOR_POINT

!

POINT

の直接拡張型である。

!

成分

X

Y

及び成分名

POINT

は親型から継承する。

INTEGER :: COLOR

END TYPE COLOR_POINT

TYPE(POINT) :: PV = POINT(1.0, 2.0)

TYPE(COLOR_POINT) :: CPV = COLOR_POINT(PV, 3)

!

構成子の入れ子になっている。

PRINT *, CPV%POINT

! 1.0

及び

2.0

を印刷する。

PRINT *, CPV%POINT%X, CPV%POINT%Y

!

同上

PRINT *, CPV%X, CPV%Y

!

同上

C.3.2

実行時の型を伴う割付け(

6.3.1

参照)

割付け実体の値 及び 実行時の型が他の実体から与えられて割り付けられる例を示す。例は,

IN LIST

から始まる

任意の型の実体のリスト構造を複写するものである。複写後,

LIST COPY

から始まるリスト構造の各要素は多相型の

成分

ITEM

をもつ。その値 及び 型は,

IN LIST

から始まるリスト構造の対応する要素の成分

ITEM

のものになる。

TYPE :: LIST !

任意のもののリスト構造

TYPE(LIST), POINTER :: NEXT => NULL()

CLASS(*), ALLOCATABLE :: ITEM

END TYPE LIST

...

TYPE(LIST), POINTER :: IN_LIST, LIST_COPY => NULL()

TYPE(LIST), POINTER :: IN_WALK, NEW_TAIL

! IN_LIST

LIST_COPY

に複写する

IF (ASSOCIATED(IN_LIST)) THEN

IN_WALK => IN_LIST

ALLOCATE(LIST_COPY)

NEW_TAIL => LIST_COPY

DO

ALLOCATE(NEW_TAIL%ITEM, SOURCE=IN_WALK%ITEM)

IN_WALK => IN_WALK%NEXT

IF (.NOT. ASSOCIATED(IN_WALK)) EXIT

ALLOCATE(NEW_TAIL%NEXT)

NEW_TAIL => NEW_TAIL%NEXT

END DO

END IF

C.3.3

ポインタ割付け 及び ポインタ結合

ALLOCATE

文,

DEALLOCATE

文,

NULLIFY

文 及び ポインタ代入文は,ポインタである記述子中の値を変更

する効果をもつと解釈できる。

ALLOCATE

文は,適当な実体の領域を生成しその領域を記述するのに必要な値をポイ

ンタに

割り当てる

と考えられる。

NULLIFY

文は,その領域とのポインタの結合状態を解除する。

DEALLOCATE

文は,結合状態を解除しその領域を解放する。実現方法に依存して,

DEALLOCATE

文は,記述子の中の値が有効か

どうかを指示するフラグをポインタに設定したり,ポインタが現在何も指していないことを示すある値(例えば,ゼ

ロ)で記述子の値を初期化したりする。ポインタ代入は,指示先によって占められている領域を記述するのに必要な

値をポインタである記述子に複写する。記述子は複写されるが,実体の値は複写されない。

PA

及び

PB

が両方ともポインタで,

PB

が指示先と結合している場合,

PA => PB

は,

PA

PB

と同じ指示先に結合する。

PB

が空状態である場合,

PA

も空状態となる。

この規格は,このような結合が直接的 かつ 独立に行われるように規定されている。この後で文

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

386

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

PB => D

又は

ALLOCATE (PB)

を実行しても,

PA

とその指示先との結合には何の影響も及ぼさない。文

DEALLOCATE (PB)

は,

PA

及び

PB

の双方に結合されている領域を解放する。

PB

は空状態になるが,

PA

がもはや指示先をもたないとい

うことを明示的に認識できるようにすることは,処理系には求められていない。つまり,この文を実行すると,

PA

解放された領域への

遊離したポインタ

になる。ポインタ代入文 又は

ALLOCATE

文によって

PA

が再び結合した

状態になるまで,

PA

をプログラムで使用してはならない。

DEALLOCATE

文は,前の

ALLOCATE

文によって生成された領域を解放するためにだけ使用してもよい。

無効な文

REAL, TARGET :: T

REAL, POINTER :: P

...

P => T

DEALLOCATE (P)

!

禁止

: P

の指示先は割り付けられたものではない。

ALLOCATE

文,

NULLIFY

文 及び ポインタ代入文は,指示先ではなく主としてポインタに影響を及ぼすことが

基本原則である。

ALLOCATE

文は,新しい指示先を生成するが,指定されたポインタとの結合を解除することを除

いて,古い指示先には何の効果ももたない。

NULLIFY

文もポインタ代入文も,指示先には何の効果ももたない。ポ

インタと結合している割り付けられたメモリの部分は,そのポインタが結合を解除されるか, 又は 他の指示先と結

合され, かつ 他のどのポインタもこのメモリの部分と結合していなかった場合,プログラムで参照不能になる。処

理系は,都合がよければ,このようなメモリの部分を再使用してもよい。しかし,このような参照不能なメモリを実

際に再使用するかどうかは,全く処理系依存とする。

C.4

箇条

7

の注記

C.4.1

文字代入文

F

ORTRAN

77

における

文字代入文で確定しようとするどの文字位置をも右辺の式中で引用してはならない

とい

う制限は,取り除かれた(

7.4.1.3

参照)。

C.4.2

関数引用の評価

一つの文中に複数回の関数引用が現れる場合,各関数の評価がその関数の引数の評価の後で行われる限りそれらの

関数引用は任意の順序で実行してよく,それらの値は実行の順序に依存してはならない。値が評価順序に依存しない

ので,複数の関数引用を並列に実行してもよい(

7.1.8.1

参照)。

C.4.3

式中のポインタ

ポインタは,式中で一次子として使われる場合,基本的に他のあらゆる変数と同様のものとみなされる。値を必要

とする演算子の演算対象として使われた場合,ポインタは,ポインタが示している領域に格納されている値,すなわ

ちポインタと結合している指示先実体の値を自動的に引き渡す。

C.4.4

代入文の左辺に置かれたポインタ

組込み代入文の左辺に現れたポインタもまた実体化され,そのポインタは,その時点での指示先になっている領域

への参照とみなされる。したがって,代入文は,右辺の式の値をその指示先の領域に普通に複写する。組込み代入文

については,通常の規則をすべて適用する。すなわち,式とポインタの指示先との型 及び 型パラメタは一致しなけ

ればならず,かつ それらの形状も適合しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

387

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

派生型の組込み代入文では,ポインタでない成分については代入が,ポインタである成分についてはポインタ代入

が行われる。実体化は,ポインタである部分実体に対して選択的に適用されるのではなく,スカラ実体の全体だけに

適用される。

例えば,型が

TYPE CELL

INTEGER :: VAL

TYPE (CELL), POINTER :: NEXT_CELL

END TYPE

によって定義され,実体

HEAD

及び

CURRENT

が次のように宣言されているとする。

TYPE (CELL), TARGET :: HEAD

TYPE (CELL), POINTER :: CURRENT

もし

HEAD

には新たに作られた連結リストが結合されていて,ポインタ

CURRENT

には領域が割り付けられていれば,

代入文

CURRENT = HEAD

CURRENT = CURRENT % NEXT_CELL

によって,右辺のセルの内容は,

CURRENT

が参照するセルに複写される。特に,第

2

の文の右辺では,

CURRENT

とい

うセル中のポインタである成分が選択される。このポインタは,式の文脈中にあるので実体化され,指示先の整数値

と,指示先の成分

NEXT CELL

に入っている次のセルへのポインタとを得る。左辺では,ポインタ

CURRENT

が実体化

され,現在の指示先,すなわち(整数とセルポインタからなる)セルを保持する領域を得る。右辺の整数値は左辺の

整数の領域に複写され,ポインタ成分についてはポインタ代入が行われる(右辺の記述子が左辺の記述子の領域に複

写される。)。

CURRENT => CURRENT % NEXT_CELL

この文を実行すると,

CURRENT % NEXT CELL

中の記述子の値は,

CURRENT

という名前の記述子に複写される。この

場合,

CURRENT

は異なった指示先を指すようになる。

組込み代入文では,その時点で結合されていた領域は元のままであるが,その領域に格納された値は変更される。

ポインタ代入では,ポインタは別の領域に結合される。組込み代入を用いた場合,セルの連結リストがその時点での

を通して上方ヘと移動するのに対し,ポインタ代入ではポインタがセルの連結リストを通して下方へと移動する。

C.4.5 WHERE

構文を含む

FORALL

構文の例

INTEGER :: A(5,5)

...

FORALL (I = 1:5)

WHERE (A(I,:) == 0)

A(:,I) = I

ELSEWHERE (A(I,:) > 2)

A(I,:) = 6

END WHERE

END FORALL

FORALL

構文の実行に先立って,

A

が次の値をもつとする。

A =


1

0

0

0

0

2

1

1

1

0

1

2

2

0

2

2

1

0

2

3

1

0

0

0

0


2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

388

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

構造

WHERE

文に引き続く代入文の実行後,

A

A’

の値をもつ。

1

行目による制御配列が,

1

列目に対する選別

代入に使われる。

2

行目による制御配列が,

2

列目に対する選別代入に使われる。以下同様である。

A’ =


1

0

0

0

0

1

1

1

1

5

1

2

2

4

5

1

1

3

2

5

1

2

0

0

5


選別

ELSEWHERE

文に引き続く代入文に対する制御配列は,次の式の値で定まる。

.NOT. (A(I,:) == 0) .AND. (A’(I,:) > 2)

このため,選別

ELSEWHERE

文に引き続く代入文に影響される要素は,

A(3,5)

A(4,5)

だけである。

FORALL

構文の実行後,

A

は次の値をもつ。

A =


1

0

0

0

0

1

1

1

1

5

1

2

2

4

6

1

1

3

2

6

1

2

0

0

5


C.4.6

単純

FORALL

文の例

1.

FORALL (J=1:M, K=1:N) X(K, J) = Y(J, K)

FORALL (K=1:N) X(K, 1:M) = Y(1:M, K)

これらの文は両方とも,配列

Y

1

列目から

N

列目までの要素を,配列

X

1

行目から

N

行目に複写

する。これらの文は,次の文と等価である。

X(1:N, 1:M) = TRANSPOSE (Y(1:M, 1:N) )

2.

次に示す単純

FORALL

文は,配列

J

の部分配列の五つの部分の和を計算する。

J = (/ 1, 2, 3, 4, 5 /)

FORALL (K = 1:5) J(K) = SUM (J(1:K) )

組込み関数

SUM

は純粋

(

12.6

)

であるから,単純

FORALL

文の中で利用できる。この単純

FORALL

の実行によって,

J

は次の値になる。

J = (/ 1, 3, 6, 10, 15 /)

3.

単純

FORALL

FORALL (I = 2:N-1) X(I) = (X(I-1) + 2*X(I) + X(I+1) ) / 4

は,次の文と等価である。

X(2:N-1) = (X(1:N-2) + 2*X(2:N-1) + X(3:N) ) / 4

C.5

箇条

8

の注記

C.5.1

ループ制御

Fortran

は,幾つかの形のループ制御を提供する。

(1)

繰返し数 及び

DO

変数を伴う形。これは従来からある

Fortran

DO

ループである。

(2)

ループの各実行周期の前に論理条件を検査する

(DO WHILE)

(3)

無限

DO

ループ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

389

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

C.5.2 CASE

構文

一つの

CASE

構文内では,高々一つの

CASE

ブロックが選択実行され,かつ

CASE

構文内の一つのブロックから

他のブロックへと通り抜けることはない。したがって,利用者は,ブロックからの明示的な飛出しを書く必要はない。

C.5.3 DO

構文の例

整構造

DO

構文の例を三つ示す。

1.

SUM = 0.0

READ (IUN) N

OUTER: DO L = 1, N

!

構文名をもつ

DO

READ (IUN) IQUAL, M, ARRAY (1:M)

IF (IQUAL < IQUAL_MIN) CYCLE OUTER

!

内側のループを飛び越す。

INNER: DO 40 I = 1, M

!

構文名と文番号をもつ

DO

CALL CALCULATE (ARRAY (I), RESULT)

IF (RESULT < 0.0) CYCLE

SUM = SUM + RESULT

IF (SUM > SUM_MAX) EXIT OUTER

40

END DO INNER

END DO OUTER

外側のループの繰返し数は

max(

N

, 0)

であり,その回数になるまで 又は

SUM

SUM MAX

を超えて文

EXIT OUTER

で内外二つのループが終了するまで実行される。

IQUAL

IQUAL MIN

より小さいときは,

1

番目の

CYCLE

文によって内側のループが飛び越される。

CALCULATE

から戻ってきて

RESULT

が負であっ

た場合,

2

番目の

CYCLE

文によって

SUM

への加算が飛び越される。これらのループはそれぞれ構文名を

もち,かつ 内側のループは文番号ももっている。この

EXIT

文には,内外二つのループを終了するため

に構文名を指定する必要がある。二つの

CYCLE

文には,これらがそれぞれ最も内側のループに属するの

で,構文名を指定しなくてもよい。

2.

N = 0

DO 50, I = 1, 10

J = I

DO K = 1, 5

L = K

N = N + 1

!

この文を

50

回実行する。

END DO

!

文番号付き

DO

の内側の文番号なし

DO

50 CONTINUE

上のプログラム片の実行を終了した時,

I

=11

J

=10

K

=6

L

=5

N

=50

となる。

3.

N = 0

DO I = 1, 10

J = I

DO 60, K = 5, 1

!

内側のループは実行されない。

L = K

N = N + 1

60

CONTINUE

!

文番号なし

DO

の内側の文番号付き

DO

END DO

上のプログラム片の実行を終了した時,

I

=11

J

=10

K

=5

N

=0

となり,

L

はこれらの文では確定さ

れない。

次に,不整構造

DO

構文の例を四つ示す。

4.

DO 70

READ (IUN, ’(1X,G14.7)’, IOSTAT = IOS) X
IF (IOS /= 0) EXIT
IF (X < 0.) GOTO 70
CALL SUBA (X)
CALL SUBB (X)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

390

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

...
CALL SUBY (X)
CYCLE

70

CALL SUBNEG (X)

! SUBNEG

X<0.

のときだけ呼び出される。

これは,

DO

構文の終わりの文が

END DO

文でも

CONTINUE

文でもないので,整構造

DO

構文ではない。ループは,ファイル終了条件 又

は 入出力誤りが起こるまで実行を続ける。

5.

SUM = 0.0
READ (IUN) N
DO 80, L = 1, N

READ (IUN) IQUAL, M, ARRAY (1:M)
IF (IQUAL < IQUAL_MIN) M = 0

!

内側のループを飛び越す。

DO 80 I = 1, M

CALL CALCULATE (ARRAY (I), RESULT)
IF (RESULT < 0.) CYCLE
SUM = SUM + RESULT
IF (SUM > SUM_MAX) GOTO 81

80

CONTINUE

!

この

CONTINUE

文は両方のループに共有されている。

81 CONTINUE

この例は,文番号

80

CONTINUE

文が共有されているために二つの

DO

構文が不整構造

DO

構文となる点を除けば,

1.

と類似してい

る。内側の

DO

構文全体が,外側の

DO

構文の

DO

端末となる。内側のループは,

M

0

にすることによって飛び越される。

SUM

がある値を超えた

とき,文番号

81

CONTINUE

文に飛越しすることによって内外二つのループが終了する。内側のループの中にある

CYCLE

文は,

RESULT

の値

が負であった場合に

SUM

への加算を行わなくさせる。

6.

N = 0
DO 100 I = 1, 10

J = I
DO 100 K = 1, 5

L = K

100

N = N + 1

!

この文を

50

回実行する。

この例では,一つの代入文が二つのループで共有される。このプログラム片の実行を終了した時,

I

=11

J

=10

K

=6

L

=5

N

=50

となる。

7.

N = 0
DO 200 I = 1, 10

J = I
DO 200 K = 5, 1

!

内側のループは実行されない。

L = K

200

N = N + 1

この例は,内側のループが実行されない点を除けば,前の例と類似している。このプログラム片の実行を終了した時,

I

=11

J

=10

K

=5

N

=0

となり,

L

はこれらの文では確定されない。

C.5.4

誤った

DO

構文の例

誤った形の

DO

構文の例を次に示す。

1.

DO I = 1, 10

...

END DO LOOP

!

対応する構文名がない。

2.

LOOP: DO 1000 I = 1, 10

!

対応する構文名がない。

...

1000

CONTINUE

3.

LOOP1: DO

...

END DO LOOP2

!

構文名が一致しない。

4.

DO I = 1, 10

!

文番号が必要,又は

...

...

1010 CONTINUE

! ... END DO

が必要である。

5.

DO 1020 I = 1, 10

...

1021 END DO

!

文番号が一致しない。

6.

FIRST: DO I = 1, 10

SECOND: DO J = 1, 5

...

END DO FIRST

!

不適切な

DO

の入れ子

END DO SECOND

C.6

箇条

9

の注記

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

background image

391

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

C.6.1

外部ファイル(

9.2

参照)

この規格は,ファイルのカタログ化と適合しているが,カタログ化を要求はしない。カタログ化を可能にするため

の幾つかの概念が導入してある。

C.6.1.1

ファイルの接続(

9.4

参照)

ファイルに対してどのような入出力を行うときでも,入出力に先立って,そのファイルを装置に接続しておかなけ

ればならない。ファイルが装置に接続している限り,その装置は,ファイルを指定するものとして働く。接続される

ということは,

バッファ

が割り付けられている,割り付けられていない,

ファイル制御表

が記入されている,記

入されていない,又は その他の実現手段が用いられていることを意味するものではない。接続は,その装置すなわ

ちファイルに対して

READ

文 又は

WRITE

文を(適切な条件のもとで)実行できることを意味する。接続なしで,

READ

文 又は

WRITE

文を実行してはならない。

C.6.1.2

ファイルの存在(

9.2.1

参照)

存在という性質は,接続状態とは全く別のものであり,ファイル自体の性質の一つである。処理系は,あるプログ

ラムに対して,ある時点で存在しているファイルの集合を

知っている

。このファイルの集合は,読むことのできる

テープ,カタログに載っているファイル,けん盤,プリンタなどを含んでいる。この集合は,プログラムから参照で

きないファイルを除外してもよい。それは,例えば,そのファイルが既に他のプログラムで使われている場合の安全

確保のためなどである。この規格は,これらのファイルのうちどういうものが存在しているかを規定しない。それは,

処理系が安全性,ロック,特権などを実現するのに様々な技法を採用できるようにするためである。存在とは,プロ

グラムが潜在的に処理する可能性のあるすべてのファイルを示す便宜のための概念である。

接続と存在は,

4

通り全部の組合せがある。

接続

存在

あり

あり

カードが差し込まれ,読む準備の整っているカード読取り装置

あり

なし

最初の行が印字される前のプリンタ

なし

あり

カタログに載っている

JOAN

という名前のファイル

なし

なし

処理系が認識していないテープリール上にあるファイル

ファイルの生成,削除,接続 及び 解除をする手段がある。

C.6.1.3

ファイル名(

9.4.5.8

参照)

ファイルは名前をもつことができる。ファイル名の形式は,規定しない。システムがファイルをカタログに登録す

る手段 又は テープをラベル付けする手段をもっていなければ,すべてのファイル名は実行が終了した時に消滅する。

これは正当な実現方式である。この規格は,プログラムが実行している間より長い期間,名前が存続することを要求

していない。したがって,この規格は,カタログへの登録を必要条件とはしていない。名前付けの機能は,カタログ

システムが存在しているシステムにおいて,その利用を可能にする。

C.6.1.4

ファイル探査(

9.2.2

参照)

この規格は,安全性,保護,ロック 及び その他多くの

探査の権利

の概念に関する問題について規定しない。こ

のような概念は,オペレーティングシステムの領域に含まれるものとみなす。

OPEN

文 及び

INQUIRE

文は,これらについて自然な形で拡張することができる。

ファイルに対して利用可能な探査法は,順番探査 及び 直接探査とする。処理系は,探査法別に違う種類のファイ

ルを実現してもよい。処理系は,一つの種類のファイルが,二つの異なった探査法をもつように実現してもよい。

ファイルに対する直接探査は,単純で一般的なやり方,つまり固定長の記録で実現できる。そのキーは,正の整数

とする。

C.6.2

停留入出力(

9.2.3.1

参照)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

392

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

データ転送文は,外部ファイルのファイル位置に影響を与える。

F

ORTRAN

77

では,誤り条件 又は ファイル終了

条件が発生しなければ,そのファイルは読出し 又は 書込みをした記録の後ろに位置付けられ,その記録は直前記録に

なった。この規格では,データ転送文で記録の位置付けを制御するために,

ADVANCE

指定子がある。

ADVANCE

指定子には,一つの書式付きデータ転送文から次の書式付きデータ転送文まで,ファイル位置を現在記録中にとどめ

る機能がある。値

NO

は,この機能を与える。値

YES

は,読出し 又は 書込みをした記録の後ろにファイルを位置付け

る。暗黙の値は,

YES

とする。

位置付け編集記述子 及び 斜線編集記述子は,この種の記録探査にも使用できる。しかし,位置付け編集記述子で

位置付け左限界の前に位置付けることはできない。

ある記録内に位置付けられているファイルに対して

BACKSPACE

文を実行すると,指定された装置は,現在記録

の前に位置付けられる。

最後に実行されたデータ転送文が

WRITE

文であって,ファイルがある記録に位置付けられている場合,そのファ

イルを現在記録の後ろに暗黙的に位置付けてから,ファイル終了記録を書き込む。すなわち,停留

WRITE

文に続い

REWIND

文,

BACKSPACE

文 又は

ENDFILE

文を実行すると,ファイルを現在出力記録の終わりに位置付けて

から,ファイル終了記録を書き込む。

停留データ転送文では,

SIZE

指定子を使用できる。

SIZE

指定子で指定した変数は,その入力文のデータ編集記述

子によって読まれた値の列を構成する文字の個数になる。

この文字数は,入力項目並びの中に入力項目が一つだけある場合,その項目に対応する文字の個数であるので,特

に役に立つ。

EOR

指定子は,停留データ転送文の実行中に記録終了条件が発生したことを示すのに利用できる。記録終了条件

は,誤り条件ではない。入力項目が記録に含まれている文字数よりも多くの文字を要求する場合,この指定子が指定

されていて,かつ

PAD=’YES’

が有効であるとき,その入力項目は空白で埋められる。すなわち,入力項目は首尾よ

く完了することを意味する。そして,そのファイルは,現在記録の後ろに位置付けられる。

IOSTAT

指定子が指定さ

れていれば,組込みモジュール

ISO FORTRAN ENV

の名前付き定数

IOSTAT EOR

の値で確定になり,データ転送文は

終了する。プログラムの実行は,

EOR

指定子に指定されている文から継続される。

EOR

指定子は,記録終了条件が

発生した時に実行の制御を行う機能を与える。入出力

DO

形反復の

DO

変数は,最後に確定された値になり,入力項

目並び中の他の残されている項目は,記録終了条件が発生した時の確定の状態が保存される。

SIZE

指定子が指定さ

れている場合,その値は,この

READ

文の実行中にデータ編集記述子によって読まれた文字数になる。

停留入力のために,処理系は,記録を部分的に読む必要はない。処理系は,記録全体を内部バッファに読み込み,

引き続く入力文それぞれに対して記録の引き続く部分を切り出していってもよい。

端末装置への停留出力が即時の表示をもたらすような実装においては,そのような書出しを入力要求の出力機構と

して利用できる。この場合,次の文

WRITE (*, FMT=’(A)’, ADVANCE=’NO’) ’CONTINUE?(Y/N): ’

は,次の入力要求

CONTINUE?(Y/N):

を後続の改行なしで表示することになる。

その応答は,次のような形の文によって読まれ,

READ (*, FMT=’(A)’) ANSWER

次のように入力要求と同じ行に入力することができる。

CONTINUE?(Y/N): Y

規格は,停留入出力の実装がこの方法で動作することを要求しない。例えば,出力の表示が現在の記録の完了まで

延期されるような,停留出力の実装もまた,規格合致である。しかしながら,そのような実装では,この種の入力要

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

393

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

求機構を動作させることはできない。

C.6.3

非同期入出力

この規格では,伝統的に提供されてきた非同期入出力を

BUFFERIN

及び

BUFFEROUT

のような機能によって

制限するのではなく,既存の

Fortran

文法の上に構築している。これは,非同期入出力の実装の代替手段を可能にし,

既存の規格合致プログラムを非同期入出力が使用できるように改変するための作業を単純化する。

すべての処理系が実際に入出力を非同期に行うわけではなく,すべての処理系が複雑な入出力並びをもつデータ転

送文を非同期の方法で取り扱えるわけでもない。そのような処理系でも,規格合致である。それぞれの

Fortran

処理

系の仕様文書に,入出力を非同期で実行するとしたらそれがいつであるかを記述することを期待する。

この規格は,非同期入出力について少なくとも二つの異なった概念モデルを認めている。

モデル

1

では,項目並びが一つの連続名前付き配列のように単純であり,入出力が書式なしであるときに,処理系

が非同期入出力を行う。実装コストが少なくて済み,伝統的な大型メインフレーム・マシンにとって最も好都合なシ

ナリオである。

モデル

2

では,処理系は次のどちらを実行することもできる。

(1)

出力において,入出力ライブラリの内部に完全に書式付けしたバッファを生成し,バッファの非同期出力を開始

したら,直ちにプログラムの次の文に戻る。処理系は,事前に行った

WRITE

の終了を待っても待たなくても

よい。

(2)

入出力並びの番地を,利用者のプログラムを実行する処理系とは独立して並び項目の処理をするもう一つの処理

系 又は プロセスに渡す。並び項目の番地は,非同期の

READ

文 又は

WRITE

文の実行が終了する前に計算し

ておかなければならない。それでも,

READ (

...

)

N,(a(i),i=1,N)

のような場合を扱うために,並び項目処理

の順番についての要求がある。

この規格は,利用者が完了を一切待たずに大量の非同期入出力要求を出し,その後にその一部 又は 全部を待てる

ようにしている。これらの入出力要求をそれぞれ個別に追跡することは,不可能であり不適当かもしれない。

すべての要求を実行時ライブラリが追跡する必要はない。

READ

文 又は

WRITE

文に

ID

指定子を指定していな

い場合,実行時ライブラリは,この個別の要求が成功裏に完了してしまえば覚えておく必要がない。誤り条件 又は

終了条件が発生した場合,処理系は,その装置へのいずれの入出力処理の最中にでも報告することができる。

READ

文 又は

WRITE

文に

ID

指定子を指定している場合,処理系の入出力実行時ライブラリは,個々の入出力要求に対す

る誤り条件 又は 終了条件を追跡しておくことが要求される。しかし,入出力要求が例外条件なしで完了した場合は,

実行時ライブラリは

ID

指定子の値を忘れてしまうことができる。典型的には,実行時ライブラリは,最後の一つ 又

は ごく少数の要求だけを追跡するかもしれない。そのため,利用者が特定の要求に対して待機操作

(WAIT)

を実行

したとき,ライブラリはその要求を認識している(そして誤り処理に関して正しく対処する。)か,又は その要求が

成功裏に終了して忘れ去った要求の一つであると仮定する(そして誤り条件も終了条件も発生せずに単に戻る。)かの

いずれかである。正しい

ID

指定子の値を指定することは,利用者の義務となる。処理系に対して,正しくない

ID

定子の値を見つけることは要求されていない。誤り条件 又は 終了条件を発生する処理中の入出力要求を,処理系が

それらの条件を追跡するために使うメモリが尽きるまでに幾つ対処できるかについては,当然,処理系に依存した制

限がある。

SIZE

指定子の変数に対する制限は,処理系がその変数を更新してそれについて忘れることが(要求の処理

開始後 かつ 待機操作の前なら)いつでもできるように考えられている。それが,各種の待機操作に

SIZE

指定子が許

されていない理由である。実行時ライブラリが個々の要求から追跡すると期待されているのは,例外条件(ファイル

の誤り 又は 終了)だけであり,かつ

ID

指定子が存在するときだけである。

END

指定子 及び

EOR

指定子は,すべ

ての待機操作となりうる文に許されていない。したがって,この状況に対処するためには,待機操作の後で

IOSTAT

指定子の変数を調べなければならない。

WAIT

文が入出力の完了を待つ一般的な方法となることを期待して,この選

択がなされた(そして,

WAIT

文は

END

指定子 及び

EOR

指定子を用意している。)。この特定の選択は,哲学的な

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

394

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

ものであり,重大な技術的困難さによるものではない。

IOSTAT

指定子の変数を正しく設定するという要求は,後続する待機操作が正しい

IOSTAT

の値を返すために,

EOR

条件がどの入出力要求に対して起こったかを記憶することを実装に要求する。したがって,

END

条件 及び

ERR

条件と同様にその情報を追跡するために利用可能な記憶容量が制限されるので,

EOR

条件となりうる実行中の停留

入出力要求の個数には,処理系が定義した制限がある。

C.6.4 OPEN

文(

9.4.5

参照)

ファイルは,事前接続による方法 又は

OPEN

文の実行による方法のいずれかの方法で装置に接続される。事前接

続は,プログラムが実行を開始する前に,

Fortran

外部の手段によって完了している。例えば,ジョブ制御動作 又は

処理系の暗黙動作によって接続される。事前接続されたファイルに対して,

OPEN

文を実行する必要はない(

9.4.4

参照)。

OPEN

文は,事前接続されていない存在するファイルを探査する手段を与える。

OPEN

文には,ファイル名を指

定する方法(名前による

OPEN

)とファイル名を指定しない方法(装置による

OPEN

)のいずれかを使用する。ど

ちらの場合も装置を与える。名前による

OPEN

は,指定されたファイルを指定された装置に接続する。装置による

OPEN

は,処理系が定めた暗黙のファイルを指定された装置に接続する(その暗黙のファイルは,名前をもってもも

たなくてもよい。)。

したがって,ファイルが接続され,処理可能な状態になる方法には,次の三つがある。すなわち,事前接続,名前

による

OPEN

及び 装置による

OPEN

である。いったんファイルが接続されてしまうと,

Fortran

の規格には,その

ファイルがどのような方法で接続されたかを知る手段はない。

OPEN

文は,新しいファイルを生成するためにも使用できる。実際,この

3

種類の接続方法のいずれも,存在しな

いファイルに対して実行できる。装置が事前接続されている場合,最初の記録を書くことによってファイルが生成さ

れる。他の二つの方法では,

OPEN

文を実行することによってファイルが生成される。

OPEN

文を実行する時,

OPEN

文に指定されている装置は,既にファイルに接続されていてもファイルに接続さ

れていなくてもよい。装置が既にファイルに接続されている場合(事前接続であっても,事前の

OPEN

文によってで

も),

OPEN

文に

FILE

指定子を省略すると,そのファイルと装置との接続は維持される。この

OPEN

文は,空白解

釈モード,小数点編集モード,空白補充モード,入出力丸めモード,囲み記号モード 又は 符号モードの値を変更する

ために使用する。

ACTION

指定子の値が

WRITE

である場合,

READ

文は,この接続を参照してはならない。

ACTION=’WRITE’

は,

BACKSPACE

文による位置付け 又は 値

APPEND

をもつ

POSITION

指定子を指定することによる位置付けを禁止しな

い。しかし,処理系が位置付けを達成するためにファイルを読むことが必要ならば,

BACKSPACE

文 及び

POSITION=

’APPEND’

を含む

OPEN

文の実行は,失敗することがありうる。

次の例は,これらの規則を説明している。最初の例では,装置

10

SCRATCH

ファイルに事前接続されており,

OPEN

文が

PAD

指定子の値を

YES

に変更する。

CHARACTER (LEN = 20) CH1

WRITE (10, ’(A)’) ’THIS IS RECORD 1’

OPEN (UNIT = 10, STATUS = ’OLD’, PAD = ’YES’)

REWIND 10

READ (10, ’(A20)’) CH1

! CH1

の値は

’THIS IS RECORD 1

になる。

次の例では,装置

12

は,初めは

FRED

という名前のファイルに接続されており,

OLD

の状態である。

2

回目の

OPEN

文で装置

12

を再び開く。そのとき,ファイル

FRED

との接続は維持し,

DELIM

指定子の値を

QUOTE

に変更する。

CHARACTER (LEN = 25) CH2, CH3

OPEN (12, FILE = ’FRED’, STATUS = ’OLD’, DELIM = ’NONE’)

CH2 = ’"THIS STRING HAS QUOTES."’

!

文字列

CH2

は引用符を含む。

WRITE (12, *) CH2

!

囲み記号なしで書く。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

395

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

OPEN (12, DELIM = ’QUOTE’)

!

引用符が囲み記号になる。

REWIND 12

READ (12, *) CH3

! CH3

の値は

’THIS STRING HAS QUOTES.

になる。

次の例は,正しくない。なぜなら,

STATUS

指定子の値を変更しようとしているからである。

OPEN (10, FILE = ’FRED’, STATUS = ’OLD’)

WRITE (10, *) A, B, C

OPEN (10, STATUS = ’SCRATCH’)

! FRED

SCRATCH

ファイルにしようとしている。

この例は,次のように,いったん装置を閉じることにすれば正しくなる。

OPEN (10, FILE = ’FRED’, STATUS = ’OLD’)

WRITE (10, *) A, B, C

CLOSE (10)

OPEN (10, STATUS = ’SCRATCH’)

!

別の

SCRATCH

ファイルを開く。

C.6.5

接続属性(

9.4.3

参照)

OPEN

文の実行 又は 事前接続によって装置がファイルに接続されるとき,次の接続属性が確定する。

(1)

探査法は,接続に際して,順番探査,直接探査又は 流れ探査のいずれかに確定する(

9.4.5.1

参照)。

(2)

記録形は,存在しているか 又は 接続によって生成されるファイルへの接続に際して,書式付き 又は 書式なし

のいずれかに確定する。

OPEN

文の実行による接続の場合,記録形が指定されていなければ,暗黙の記録形(探

査法に依存する。

9.2.2

参照)に確定する。存在するファイルを事前接続したとき,事前接続によって記録形が

確定する。存在しないファイルを事前接続したとき,記録形が確定してもよく,記録形の確定はファイルが(例

えば書式付き 又は 書式なしの

WRITE

文の実行によって)生成されるまで遅延されてもよい(

9.4.5.9

参照)。

(3)

記録長は,確定してもよい。探査法が直接探査であれば,接続によって,ファイルの各記録の長さを指定する記

録長が確定する。存在するファイルは,すべての記録の記録長が同一ではない場合,直接探査として接続しては

ならない。

探査法が順番探査の場合は,記録を可変長にできる。この場合,確定した記録長は,ファイル中の記録長の最

大値になる(

9.4.5.12

参照)。

これらの概念 及び 動作を,処理系のカタログ 及び ジョブ制御の取決めに合わせるときには幅広い許容範囲があ

る。ある処理系は,存在しているか 又は プログラムによって生成されるファイルの集合を指定するジョブ制御動作

を要求するかもしれない。ある処理系は,実行に先立って,全くジョブ制御動作を要求しないかもしれない。この規

格では,処理系が動的にファイルを開く,閉じる 及び 生成する操作を行うことを認めている。しかし,処理系にそ

の能力を要求してはいない。

Fortran

以外の文脈での

開く

(open)”

は,意味としてテープの装着,コンソールメッセージ,スプーリング,ラベ

ル検査,安全性検査などを含んでいることがある。これらの動作は,

Fortran

の外部でのジョブ制御動作で起こって

もよいし,

OPEN

文の実行で起こってもよいし,ファイルに対する最初の読込み 又は 書出しの実行で起こってもよ

い。

OPEN

文は,ファイルの接続属性を記述するが,物理的な動作は引き起こしても引き起こさなくてもよい。この

規格で要求された以外のファイルの性質を定めることは,処理系作成者の自由である。

C.6.6 CLOSE

文(

9.4.6

参照)

同様に,

閉じる

は,意味としてテープの取外し,保護などを含んでいることがある。この動作は,実行の終わり

で暗黙的に起こってもよい。

CLOSE

文は,そのような動作を引き起こしても引き起こさなくてもよい。これは,こ

の規格で要求された以外のファイルの性質を,処理系作成者が自由に定める一例である。しかし,ある装置に対する

CLOSE

文の後で,同じファイル 又は 同じ装置上の別のファイルに対して

OPEN

文を実行することはかまわない。

処理系は,単にプログラムの実行の終了によってファイルを閉じるという物理的な動作をしたいという理由で,この

順序を拒否してはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

396

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

C.7

箇条

10

の注記

C.7.1

記録の個数(

10.3

,

10.4

及び

10.7.2

参照)

明示的に書式を指定した前進入力文によって読み込む記録の個数は,次の規則によって決まる。すなわち,記録は,

書式制御の開始時(入力項目並びが空であっても),書式の中の斜線編集記述子に出会った時,及び 書式の終端で書

式制御の戻りが起こった時に読み込まれる。

明示的に書式を指定した前進出力文によって書き出す記録の個数は,次の規則によって決まる。すなわち,記録は,

書式の中の斜線編集記述子に出会った時,書式の終端で書式制御の戻りが起こった時,及び 出力文の実行の終了時

(出力項目並びが空であっても)に書き出される。したがって,

n

個の連続する斜線が他の二つの編集記述子の間に

あると,記録を印字したときに

n

1

行の空白行が出力される。

n

個の連続する斜線が書式全体の始め 又は 終わり

にあると,記録を印字したときに

n

行の空白行が出力される。書式全体が

n

個の斜線

(

n >

0)

を含み,他の編集記

述子を含んでいない場合,その記録を印字したときに

n

+ 1

行の空白行が出力される。

次の文は,記録を印字したときに

2

行の空白行を書き出す。

PRINT 3

3 FORMAT (/)

C.7.2

並び入力(

10.9.1

参照)

並び入力の例を次に示す。ここでは,空白文字を

で表す。

1.

プログラム:

J = 3

READ *, I

READ *, J

順番探査入力ファイル:

記録

1:

␣1␣,4␣␣␣␣␣

記録

2:

,2␣␣␣␣␣␣␣␣

実行結果:

I

= 1,

J

= 3

2

番目の

READ

文は,

2

番目の記録を読む。記録の中の最初のコンマが空値を示すので,

J

は再確定さ

れない。

2.

プログラム:

CHARACTER A*8, B*1

READ *, A, B

順番探査入力ファイル:

記録

1:

’␣␣␣␣␣␣␣␣’

記録

2:

’QXY’␣’Z’

実行結果:

A

=

’␣␣␣␣␣␣␣␣’

,

B

=

’Q’

1

番目の記録で,右端のアポストロフィは定数を囲むものと解釈される(記録の終わりによって組が分

離されているので,

1

個のアポストロフィを表す

2

連のアポストロフィの

1

番目とはならない。)ので,

A

には文字定数

’␣␣␣␣␣␣␣␣’

が転送される。記録の終わりは空白として働き,ここでは二つの定数の間にあ

るので,値区切り子となる。

C.8

箇条

11

の注記

C.8.1

主プログラム 及び 初期値設定プログラム単位(

11.1

及び

11.3

参照)

主プログラム 及び 初期値設定プログラム単位の名前は,

Fortran

の中で明示的に使用することはない。これは,文

書化のため 及び 処理系による利用のために有効である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

397

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

処理系は,名前のない主プログラム 又は 名前のない初期値設定プログラムに対して,暗黙の名前を割り当てるよ

うに実現してもよい。しかし,この名前が,規格合致プログラムの他の大域名と重複してはならない。これは,暗黙

の名前を規格合致プログラムに許されない名前(例えば,一般に名前として許されない文字を含める。)とするか,又

は 任意のプログラムに対して,暗黙の名前をそこで使われていないものに変更する外部的機構を用意することによっ

て可能となる。

C.8.2

依存翻訳(

11.2

参照)

この規格は,以前からの規格と同様に,プログラムを複数の単位に分割して,実行の準備段階でそれらを別々に

翻訳するように規格合致処理系を実現することを意図している。このような処理系を一般に,分割翻訳

(separate

compilation)

を提供しているという。この規格のもとでの分割翻訳の実現方法と,

F

ORTRAN

77

国際規格のもとでの

分割翻訳の実現方法との間には,重要な違いがある。

F

ORTRAN

77

国際規格のもとでは,プログラム単位を翻訳する

のに必要な情報は,すべてそのプログラム単位中に指定されていた。そのため,それぞれのプログラム単位の翻訳は,

他の部分から完全に独立していた。今回の規格のもとでは,プログラム単位は別のモジュールに指定してあった情報

を使用できるので,そのモジュールに依存することになる。処理系でこの依存性を実現するには,モジュールの翻訳

結果に依存してプログラム単位を翻訳することになろう。このようにして依存性を実現した処理系を一般に,依存翻

(dependent compilation)

を提供しているという。

ここでの依存性は,今回の

Fortran

処理系がそのことを関知しているという意味においてだけ,新しいものである。

同様な情報の依存性は,

F

ORTRAN

77

国際規格のもとでも存在していた。しかし,依存性を解決する情報を伝えるた

めに,複数のプログラム単位に情報を重複して指定するのは,利用者の責任であった。分割しながらも依存した翻訳

を可能にすれば,情報を重複して記述するよりも多くの潜在的な利点が得られる。それらを次に示す。

(1)

情報をプログラム中の

1

か所に指定することによって,その情報を使用する他のプログラム単位を矛盾なく翻訳

することができる。重複記述では,誤って異なる指定をしてしまう可能性がある。指定のための文章がすべての

プログラム単位で一致するように

INCLUDE

行を使用したとしても,他の指定(例えば

IMPLICIT

文)がその

文章の解釈を変えてしまうことがある。

(2)

プログラムの更新時に,処理系は,別のプログラム単位が別の版の(非互換な)モジュールを使用して翻訳され

たかどうかの識別を補助することができる。ただし,処理系にそのような補助を提供することを要求しているわ

けではない。一方,情報の重複記述における不一致は,検出がはるかに困難となる。

(3)

情報は,モジュールに入れることによって

パッケージ化

することができる。モジュールなしでは,重複した

指定をしばしばプログラム単位内の他の指定と調整しなければならず,そのような情報の便利な

パッケージ化

は,困難である。

(4)

モジュール中の指定を

1

回翻訳しておいてから繰り返し参照するように処理系を実現することができるので,処

理系が複数のプログラム単位中にある重複した指定を翻訳しなければならない場合よりも,効率が向上する可能

性がある。

モジュールの公開部分が引用時に利用可能でなければならないという要求規定の正確な意味は,処理系依存である。

例えば,処理系は,モジュールの翻訳後にだけそのモジュールを利用可能とし,モジュールが分割翻訳してある場合

には,それを使用するプログラム単位の翻訳時にそのモジュールの翻訳結果をコンパイラが識別できなければならな

いことを要求してもよい。

C.8.2.1 USE

文 及び 依存翻訳(

11.2.1

参照)

USE

文のもう一つの効用は,名前管理についての拡張機能である。モジュール中の幾つかの要素だけを選んで使用

したい場合には,そのモジュール中の他のすべての要素の名前については気にせずに,そうすることができる。同じ

名前の要素を含む

2

個の異なるモジュールを使用する必要がある場合に,その重複に対処する方法は何通りかある。

同じ名前の要素を使用しないときは,それらは単に無視すればよい。両方のモジュールにある同じ名前が同じ要素を

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

398

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

参照するものであるとき(例えば,両方のモジュールが第

3

のモジュールからそれを得ているとき)は,その名前の

表すものについての混同はないので,その名前を自由に使用することができる。それらの要素が違うものであって,

その一方 又は 両方を使用するときは,

USE

文の局所的な仮称指定機能によって,

USE

文を含むプログラム単位内で

これらの要素に別々の名前を与えることができる。

ONLY

指定子を使用しない

USE

文と比較して,常に

ONLY

指定子を使用する効用は,それぞれ参照する要素の参

照先であるモジュールがプログラム単位内で明示的に宣言されることである。つまり,それぞれの要素がどこで定義

されているかを見つけるために,他のプログラム単位を探す必要がないことになる。これによって保守費用を削減す

ることができる。

分割依存翻訳

(dependent but separate compilation)

の典型的な実現方法は,モジュールの名前から導き出される

名前のファイル(又は ファイル要素)にモジュールの翻訳結果を保存することである。ただし,モジュールの名前は,

Fortran

での規則によって規定され,ファイルシステムで許される名前によってではない。そのため,処理系によっ

ては,

Fortran

の名前からファイルシステムの名前への写像を備える必要がある。

モジュールの翻訳結果は,そのモジュールに明示的に記述してある情報だけを含んでもよいし(他のモジュールに

明示的に記述してある情報への

ポインタ

を含む。),そのモジュールで指定されるすべての情報を含んでもよい(他

のモジュールに明示的に記述してある情報の複製を含む。)。前者の方法のほうが記憶場所の容量を節約できるように

見えるが,後者の方法をとれば,

USE

文の処理に必要な処理を大幅に軽減するとともに,

USE

文によるモジュール

の論理的な

入れ子

に制限を課する必要を避けることができる。

モジュール内で宣言した変数は,共通ブロック内の変数とほぼ同じ原理で定義状態を保持する。つまり,

SAVE

性をもつ変数はプログラムの実行中ずっと定義状態を保持するが,

SAVE

属性をもたない変数はそのモジュールを参

照する有効域の実行中だけ定義状態を保持する。場合によっては,次のような

USE

USE MY_MODULE, ONLY:

を有効域に挿入して,その有効域から参照している他の手続がこのモジュールを経由して連絡できるようにすること

が適切である。このような場合,この有効域自体はモジュールの要素を参照しないが,モジュール内で

SAVE

指定し

ていない変数が,その有効域の実行中は定義状態を保持することになる。

有効域に暗黙の型宣言と

USE

文の両方を使用すると,検出できない誤りの可能性が増加する。

検出できない誤りの例を次に示す。

SUBROUTINE SUB

USE MY_MODULE

IMPLICIT INTEGER (I-N), REAL (A-H, O-Z)

X = F (B)

A = G (X) + H (X + 1)

END SUBROUTINE SUB

ここで,

X

は,暗黙の型宣言をした実数型の変数とモジュール

MY MODULE

から得られた変数のどちらでもありうる。

更に,

SUB

の動作とは無関係に,

MY MODULE

内の変更によって,一方から他方へ変わるかもしれない。このような状

況に起因する論理的な誤りは,検出が非常に困難になることがある。そのため,これらの機能を一緒に使用すること

は避けるのが望ましい。

C.8.2.2

参照許可属性

参照許可属性(

PUBLIC

属性 及び

PRIVATE

属性)は,モジュール中でだけ宣言でき,モジュール中の言語要素

を,モジュールを引用する有効域で実際に関係のある要素とそうでない要素とに区別する。この情報は,処理系の効率

をよくするために使用することができる。例えば,ひとたびモジュールを翻訳してしまえば,非公開要素に関する多

くの情報を捨ててもよい。そうすれば,記憶域とその情報を検索するための時間を節約できる。同様に,そのモジュー

ルをある版から別の版に切り替えたとき,二つの版で異なっている点がそれらの版に含まれる非公開要素だけである

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

399

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

ことが認識できれば,そのモジュールを使用するプログラム単位を再翻訳しないですませることができる。

C.8.3

モジュールの使用例

C.8.3.1

同一の共通ブロックの例

ある共通ブロックとそれに関連したすべての宣言文を,例えば

MY COMMON

という名前のモジュール中に記述し,次

の形式の

USE

文で参照することができる。

USE MY_COMMON

これは,仮称指定なしでモジュール全体を参照する。これは,共通ブロックのすべての分身が同一であることを保

証する。モジュール

MY COMMON

は,二つ以上の共通ブロックをもってもよい。

C.8.3.2

大域的データの例

モジュールは,データ実体を含むだけでもよい。

MODULE DATA_MODULE

SAVE

REAL A (10), B, C (20,20)

INTEGER :: I=0

INTEGER, PARAMETER :: J=10

COMPLEX D (J,J)

END MODULE DATA_MODULE

この方法で大域的になるデータ実体は,型の任意の組合せであってよい。

一部のデータを参照可能にするには,次のように

ONLY

句付きの

USE

文を書く。

USE DATA_MODULE, ONLY: A, B, D

すべてのデータを参照可能にするには,次の

USE

文を書く。

USE DATA_MODULE

名前の衝突を避けるために,仮称指定付きでデータを参照できる。それは,次の形式を用いる。

USE DATA_MODULE, AMODULE => A, DMODULE => D

C.8.3.3

派生型の例

ある派生型をモジュール中で定義して,複数のプログラム単位中から参照してもよい。

MODULE SPARSE

TYPE NONZERO

REAL A

INTEGER

I, J

END TYPE NONZERO

END MODULE SPARSE

これは,一つの実数型成分と二つの整数型成分から構成される型を定義する。それらは,行列のゼロでない要素の

値と行位置・列位置の添字を表す。

C.8.3.4

大域的割付け配列の例

多くのプログラムは,プログラムの実行前には大きさが不明な,大きな割付け配列を必要とする。このようなプロ

グラムの簡単な形式を,次に示す。

PROGRAM GLOBAL_WORK

CALL CONFIGURE_ARRAYS

!

適切な割付けを実行する。

CALL COMPUTE

!

その配列を計算に使う。

END PROGRAM GLOBAL_WORK

MODULE WORK_ARRAYS

!

作業用配列

INTEGER

N

REAL, ALLOCATABLE, SAVE :: A (:), B (:, :), C (:, :, :)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

400

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

END MODULE WORK-ARRAYS

SUBROUTINE CONFIGURE_ARRAYS

!

作業用配列の設定処理

USE WORK_ARRAYS

READ (*, *)

N

ALLOCATE (A (N), B (N, N), C (N, N, 2 * N))

END SUBROUTINE CONFIGURE_ARRAYS

SUBROUTINE COMPUTE

USE WORK_ARRAYS

...

!

配列

A

B

C

を含む計算

END SUBROUTINE COMPUTE

典型的には,多くの副プログラムが,この作業用配列を参照する。そのような副プログラムには,次の文を書く。

USE WORK_ARRAYS

C.8.3.5

手続ライブラリの例

ライブラリ中の外部手続に対する引用仕様宣言は,一つのモジュールにまとめることができる。これには,引数キー

ワードと省略可能な引数が使用でき,引用に対する静的検査が行える。応用ごとに特有の引数キーワードを使用して,

異なった応用向きの異なった版を作成できる。

MODULE LIBRARY_LLS

INTERFACE

SUBROUTINE LLS (X, A, F, FLAG)

REAL X (:, :)

!

次の文中の

SIZE

は組込み関数である。

REAL, DIMENSION (SIZE (X, 2)) :: A, F

INTEGER FLAG

END SUBROUTINE LLS

...

END INTERFACE

...

END MODULE LIBRARY_LLS

このモジュールは,サブルーチン

LLS

を次のようにして起動できるようにする。

USE LIBRARY_LLS

...

CALL LLS (X = ABC, A = D, F = XX, FLAG = IFLAG)

...

C.8.3.6

演算子の拡張の例

組込み演算子記号を拡張して付加的な意味をもつようにするため,

INTERFACE

文の

OPERATOR

句に演算子記

号を指定した引用仕様宣言を,モジュールの中に書くことができる。

例えば,可変長の文字列として機能する二つの派生型実体の連結を行うように,

//

を拡張することができる。型

MATRIX

に対する行列加算 及び 型

INTERVAL

に対する区間加算を行うように,

+

を拡張することもできる。

モジュールは,このような引用仕様宣言を複数個含むことができる。演算子は,

Fortran

又は 他の言語を用いて外

部関数として定義し,その手続引用仕様をモジュール中に書く。

C.8.3.7

データ抽象化の例

モジュールは,複数のプログラム単位中で冗長な情報の宣言をしないですませる簡単な方法を提供する以外に,抽

象データ型の表現や演算の定義のように,関連する言語要素を

パッケージ化

する便利な方法を提供する。次のモ

ジュールの例は,整数型の値を要素とする集合を,抽象データ型

SET

として定義している。標準的な集合演算である

UNION

INTERSECTION

及び

DIFFERENCE

が用意してある。関数

CARDINALITY

は,引数の集合の基数(要素の個数)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

401

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

を返す。関数

ELEMENT

及び

SUBSET

は,論理値を返す。

ELEMENT

は,演算子

.IN.

を定義し,

SUBSET

は,演算子

<=

を拡張している。

ELEMENT

は,与えられたスカラ整数値が与えられた集合の要素であるかどうかを判定し,

SUBSET

は,与えられた集合が与えられた別の集合の部分集合であるかどうかを判定する(二つの集合の一方が他方の部分集

合であるかどうかを調べるには,まず基数を比較すると効率がよい。また,二つの集合が等しいかどうかを調べるに

は,両方の集合が共に他方の部分集合であるかどうかを調べればよい。)。

変形関数

SETF

は,整数値のベクトルから重複する値を削除して,対応する集合に変換する。したがって,定数値

のベクトルは,定数集合として使用できる。逆変形関数

VECTOR

は,集合を受け取って,その要素を昇順に並べたベ

クトルにして返す。このモジュールでは,集合データ実体の基数の最大値を

200

にしている。

MODULE INTEGER_SETS

!

このモジュールは,モジュール機能の使用方法を説明するためのものである。

!

新しい型をその演算とともに定義している。

INTEGER, PARAMETER :: MAX_SET_CARD = 200

TYPE SET

!

SET

を定義する。

PRIVATE

INTEGER CARD

INTEGER ELEMENT (MAX_SET_CARD)

END TYPE SET

INTERFACE OPERATOR (.IN.)

MODULE PROCEDURE ELEMENT

END INTERFACE OPERATOR (.IN.)

INTERFACE OPERATOR (<=)

MODULE PROCEDURE SUBSET

END INTERFACE OPERATOR (<=)

INTERFACE OPERATOR (+)

MODULE PROCEDURE UNION

END INTERFACE OPERATOR (+)

INTERFACE OPERATOR (-)

MODULE PROCEDURE DIFFERENCE

END INTERFACE OPERATOR (-)

INTERFACE OPERATOR (*)

MODULE PROCEDURE INTERSECTION

END INTERFACE OPERATOR (*)

CONTAINS

INTEGER FUNCTION CARDINALITY (A)

!

集合

A

の基数を返す。

TYPE (SET), INTENT (IN) :: A

CARDINALITY = A % CARD

END FUNCTION CARDINALITY

LOGICAL FUNCTION ELEMENT (X, A)

!

要素

X

が集合

A

に含まれるか

INTEGER, INTENT (IN) :: X

!

どうかを決定する。

TYPE (SET), INTENT (IN) :: A

ELEMENT = ANY (A % ELEMENT (1 : A % CARD) == X)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

402

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

END FUNCTION ELEMENT

FUNCTION UNION (A, B)

!

集合

A

B

の和集合

TYPE (SET) UNION

TYPE (SET),INTENT (IN) :: A, B

INTEGER J

UNION = A

DO J = 1, B % CARD

IF (.NOT. (B % ELEMENT (J) .IN. A)) THEN

IF (UNION % CARD < MAX_SET_CARD) THEN

UNION % CARD = UNION % CARD + 1

UNION % ELEMENT (UNION % CARD) = B % ELEMENT (J)

ELSE

!

集合の最大の大きさを超えた…

END IF

END IF

END DO

END FUNCTION UNION

FUNCTION DIFFERENCE (A, B)

!

集合

A

B

の差集合

TYPE (SET) DIFFERENCE

TYPE (SET), INTENT (IN) :: A, B

INTEGER J, X

DIFFERENCE % CARD = 0

!

空集合

DO J = 1, A % CARD

X = A % ELEMENT (J)

IF (.NOT. (X .IN. B)) DIFFERENCE = DIFFERENCE + SET (1, X)

END DO

END FUNCTION DIFFERENCE

FUNCTION INTERSECTION (A, B)

!

集合

A

B

の共通集合

TYPE (SET) INTERSECTION

TYPE (SET), INTENT (IN) :: A, B

INTERSECTION = A - (A - B)

END FUNCTION INTERSECTION

LOGICAL FUNCTION SUBSET (A, B)

!

集合

A

が集合

B

の部分集合か

TYPE (SET), INTENT (IN) :: A, B

!

どうかを決定する。

INTEGER I

SUBSET = A % CARD <= B % CARD

IF (.NOT. SUBSET) RETURN

!

効率をよくするため。

DO I = 1, A % CARD

SUBSET = SUBSET .AND. (A % ELEMENT (I) .IN. B)

END DO

END FUNCTION SUBSET

TYPE (SET) FUNCTION SETF (V)

!

要素のベクトルを

INTEGER V (:)

!

重複する要素を削除した集合

INTEGER J

!

に変形する関数。

SETF % CARD = 0

DO J = 1, SIZE (V)

IF (.NOT. (V (J) .IN. SETF)) THEN

IF (SETF % CARD < MAX_SET_CARD) THEN

SETF % CARD = SETF % CARD + 1

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

403

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

SETF % ELEMENT (SETF % CARD) = V (J)

ELSE

!

集合の最大の大きさを超えた…

END IF

END IF

END DO

END FUNCTION SETF

FUNCTION VECTOR (A)

!

集合

A

の要素の値を

TYPE (SET), INTENT (IN) :: A

!

昇順に並べたベクトルに変形する。

INTEGER, POINTER :: VECTOR (:)

INTEGER I, J, K

ALLOCATE (VECTOR (A % CARD))

VECTOR = A % ELEMENT (1 : A % CARD)

DO I = 1, A % CARD - 1

! A % CARD

が大きい場合は,

DO J = I + 1, A % CARD

!

もっとよい整列方法を使用するのがよい。

IF (VECTOR (I) > VECTOR (J)) THEN

K = VECTOR (J); VECTOR (J) = VECTOR (I); VECTOR (I) = K

END IF

END DO

END DO

END FUNCTION VECTOR

END MODULE INTEGER_SETS

INTEGER SETS

の使用例(

A

,

B

及び

C

SET

型の変数とし,

X

は整変数とする。)

! A

11

個以上の要素をもつかどうかを調べる。

IF (CARDINALITY (A) > 10)

! X

A

の要素であって

B

の要素でないことを調べる。

IF (X .IN. (A - B))

! C

1

100

の整数と

B

の共通集合

A

の和集合にする。

C = A + B * SETF ((/ (I, I = 1, 100) /))

! A

の要素に

2

100

の範囲の偶数があるかどうかを調べる。

IF (CARDINALITY (A * SETF ((/ (I, I = 2, 100, 2) /))) > 0)

!

集合

B

の要素を昇順に印刷する。

PRINT *, VECTOR (B)

C.8.3.8

仮称指定された公開要素の例

USE

文で参照する要素を仮称指定したい場合がある。引用されたモジュールが再び

USE

文を含むときには,注意

する必要がある。

USE

文の仮称指定の機能の例を示す。

MODULE J; REAL JX, JY, JZ; END MODULE J

MODULE K

USE J, ONLY : KX => JX, KY => JY

! KX

及び

KY

はモジュール

K

の局所名

REAL KZ

! KZ

はモジュール

K

の局所名

REAL JZ

! JZ

はモジュール

K

の局所名

END MODULE K

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

404

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

PROGRAM RENAME

USE J; USE K

!

モジュール

J

の要素

JX

は,

JX

及び

KX

という名前で参照できる。

!

モジュール

J

の要素

JY

は,

JY

及び

KY

という名前で参照できる。

!

モジュール

K

の要素

KZ

は,

KZ

という名前で参照できる。

!

モジュール

J

の要素

JZ

とモジュール

K

の要素

JZ

とは異なる要素であるので,

!

参照してはならない。

...

END PROGRAM RENAME

C.9

箇条

12

の注記

C.9.1

外部手続の可搬性の問題(

12.3.2.2

参照)

EXTERNAL

属性(

5.1.2.6

参照)をもつような明示的宣言をせずに外部手続を引用している有効域には,可搬性

についての潜在的な問題がある。その手続の名前は,別の処理系では非標準組込み手続の名前であるかもしれず,そ

のような処理系では,その手続名は組込み手続名として解釈される。(そのような処理系は,非標準組込み手続を引

用しているとして,そのプログラムを規格合致プログラムでないとみなす。)

EXTERNAL

属性をもつ名前を宣言す

ると,その引用は,同じ名前の組込み手続の有無にかかわらず,外部手続引用と解釈されるようになる。

注記

手続の型を宣言しただけでは,たとえ同じ名前をもつ組込み手続の型と矛盾している場合でも,その手

続が外部関数と解釈されることはない。

C.9.2 Fortran

以外の手段で定義された手続(

12.5.3

参照)

処理系は,

Fortran

以外の外部手続を定義する手段を提供することを要求されてはいない。そのような手段として

は,機械のアセンブラ語,他の高水準言語,非標準拡張機能をもつ

Fortran

,別の

Fortran

処理系(例えば,既存の

F

ORTRAN

77

処理系)によって提供される

Fortran

などがありうる。

Fortran

以外の手段で定義された手続は,それが

Fortran

のプログラム単位内に含まれず,大域名を用いて引用さ

れるので,外部手続とみなされる。この

外部

という用語は,手続を定義する手段を制限するものと解釈しないほ

うがよい。例えば,その

Fortran

以外の手段自身が,内部手続 及び 外部手続に対応する機能をもっている場合には,

それらを使用してもよい。

Fortran

以外の手段を用いて大域名をもつ

内部

手続を作ることができれば,そのような

内部

手続を

Fortran

において外部手続とみなすようにしてもよい。外部手続を定義する

Fortran

以外の手段は,そ

れらの手続の構成に関する制限も含めて,完全に処理系依存とする。

Fortran

処理系は,

Fortran

以外の手段で定義された手続が

Fortran

の環境中の要素に,

Fortran

で書かれた手続と

同じ基準でだけ影響を及ぼすことができるように制限してもよい。例えば,変数が手続の引数でないときには,手続

の引用による局所変数の値の変更を禁止してもよい。

C.9.3

手続引用仕様(

12.3

参照)

F

ORTRAN

77

では,外部手続の引用仕様は,その手続の引用の形 及び 引用するプログラム単位での手続名の宣言

から推定することができた。この規格では,引数キーワード,省略可能な引数などの機能があるために,仮引数に結

合される実引数の性質から仮引数についての十分な情報を推定することは不可能である。しかも,配列関数結果,ポ

インタ関数結果などの機能があるために,手続の宣言に対して必要な拡張は,

F

ORTRAN

77

での宣言の扱いと同じよ

うなやり方ではできない。したがって,手続の引用仕様についてのすべての情報が,それを引用する有効域内で利用

できるような機構が提供されている。

F

ORTRAN

77

の場合と同様にして引用仕様を推定しなければならない手続は,

暗黙的引用仕様をもつという。引用仕様が完全に知られている手続は,明示的引用仕様をもつという。

プログラム中に存在しない手続の引用仕様本体は,その手続を全く引用していない又は 他のいかなる方法によって

も使用されない場合には,有効域内にあってもよい。この規則によって,処理系は,あるモジュールがライブラリ中

のすべての手続の引用仕様本体を含む場合に,そのモジュールを引用しても,それらのライブラリ手続が自動的にそ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

405

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

のプログラムの一部になってしまわないようにすることができる。この場合,実際に引用されているライブラリ手続

だけがプログラムの一部となる。(これを実装するためには,引用仕様本体があっただけで外部参照を生成してはな

らない。)

C.9.4

抽象引用仕様(

12.3

参照) 及び 手続ポインタ成分(

4.5

参照)

利用者が登録したり呼び出したりできるコールバックの一覧を与えるライブラリモジュールの例を示す。

MODULE callback_list_module

!

!

利用者用の型であり,利用者自身のデータによって拡張する。

!

TYPE callback_data

END TYPE

!

!

コールバック手続の抽象引用仕様。

!

ABSTRACT INTERFACE

SUBROUTINE callback_procedure(data)

IMPORT callback_data

CLASS(callback_data),OPTIONAL :: data

END SUBROUTINE

END INTERFACE

!

!

コールバックの一覧を表す型。

!

TYPE callback_list

PRIVATE

CLASS(callback_record),POINTER :: first => NULL()

END TYPE

!

!

内部的

:

一つのコールバックの登録ごとに一つ作成される。

!

TYPE,PRIVATE :: callback_record

PROCEDURE(callback_procedure),POINTER,NOPASS :: proc

CLASS(callback_record),POINTER :: next

CLASS(callback_data),POINTER :: data => NULL();

END TYPE

PRIVATE invoke,forward_invoke

CONTAINS

!

!

省略可能なデータをもつコールバック手続を登録する。

!

SUBROUTINE register_callback(list, entry, data)

TYPE(callback_list),INTENT(INOUT) :: list

PROCEDURE(callback_procedure) :: entry

CLASS(callback_data),OPTIONAL :: data

TYPE(callback_record),POINTER :: new,last

ALLOCATE(new)

new%proc => entry

IF (PRESENT(data)) ALLOCATE(new%data,SOURCE=data)

new%next => list%first

list%first => new

END SUBROUTINE

!

!

内部的

:

一つのコールバックを呼び出し,その登録情報を捨てる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

406

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

!

SUBROUTINE invoke(callback)

TYPE(callback_record),POINTER :: callback

IF (ASSOCIATED(callback%data) THEN

CALL callback%proc(callback%data)

DEALLOCATE(callback%data)

ELSE

CALL callback%proc

END IF

DEALLOCATE(callback)

END SUBROUTINE

!

!

登録した順番とは逆の順番で手続を呼び出す。

!

SUBROUTINE invoke_callback_reverse(list)

TYPE(callback_list),INTENT(INOUT) :: list

TYPE(callback_record),POINTER :: next,current

current => list%first

NULLIFY(list%first)

DO WHILE (ASSOCIATED(current))

next => current%next

CALL invoke(current)

current => next

END DO

END SUBROUTINE

!

!

内部的

:

順方向のモードでの呼び出し。

!

RECURSIVE SUBROUTINE forward_invoke(callback)

TYPE(callback_record),POINTER :: callback

IF (ASSOCIATED(callback%next)) CALL forward_invoke(callback%next)

CALL invoke(callback)

END SUBROUTINE

!

!

登録した順番で手続を呼び出す。

!

SUBROUTINE invoke_callback_forward(list)

TYPE(callback_list),INTENT(INOUT) :: list

IF (ASSOCIATED(list%first)) CALL forward_invoke(list%first)

END SUBROUTINE

END

C.9.5

引数の結合 及び 評価(

12.4.1.2

参照)

この規格で許されている引数結合と,

F

ORTRAN

77

及び

F

ORTRAN

66

で提供されている引数結合との間には,大

きな違いがある。

F

ORTRAN

77

及び

F

ORTRAN

66

では,一つの実引数は,連続した記憶単位の列に限られていた。長

さを引き継ぐ文字型の仮引数を除いて,記憶単位の列における構造は,常に呼び出された手続内で決定し,実引数か

ら得ることはなかった。このため,

F

ORTRAN

66

及び

F

ORTRAN

77

では,先頭の記憶単位の位置だけを用意するこ

とによって引数結合が実装できた(ただし,文字型引数の場合は,長さも用意する必要がある。)。しかし,この規格

では,

(部分配列のように)連続した記憶場所をもたない引数を許しており,

(形状引継ぎ仮引数のように)実引数から

構造に関する付加的な情報を引き継ぐ仮引数を許している。したがって,この規格で許されている引数結合を実装す

るには,より一般性のある機構をもたなければならない。

F

ORTRAN

77

処理系によって定義された手続の引用 又は そのような手続からの引用を実装する処理系にとって実

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

407

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

質的な利点があるように,明示的引用仕様に関する要求規定によって,引数結合を実装するために,

F

ORTRAN

66

F

ORTRAN

77

と同じ)単純な機構で十分か,又は より一般性のある機構が必要であるかを決定できる(

12.3.1.1

参照)。すなわち,処理系は,手続の引用仕様が

F

ORTRAN

77

の機能だけを使用している場合にはその手続では単純

な機構を想定し,それ以外の場合(例えば,形状引継ぎの引数 又は 省略可能な引数がある場合)には,より一般性

のある機構を想定するという実装方式をとることができる。引用の時点では,引用仕様が明示的である場合にはその

引用仕様から適切な機構を判断でき,引用仕様が暗黙的である場合には単純な機構を使用すればよい。

注記

手続の想定している機構が単純な機構であると判断できた場合には,処理系は,実引数のために連続し

た一時的な記憶場所を割り付け,実引数を一時的な記憶場所に複写し,実引数の代わりに一時的な記憶場

所を用いて手続を引用し,一時的な記憶場所の中身を実引数に複写し直し,一時的な記憶場所を解放する

必要があるかもしれない。

上の実装方式は,これらの規則の設計の根拠となったものではあるが,唯一の可能な実装方式というわけではない。

例えば,ある処理系において,

F

ORTRAN

77

の引数結合に必要な情報は

F

ORTRAN

77

の場合と同じ場所に置き,

加的な

情報は

F

ORTRAN

77

の引数結合だけを想定している手続の処理を妨げない場所に置く,という方法で一般的

な引数結合を実装することもできる。このような実装方式であれば,引数結合の翻訳は,引用仕様が明示的であるか

暗黙的であるかとは無関係にできる。

式の評価に関する規定は,最も効率的な方法で式の値を得られるように,かなりの柔軟性を処理系に与えている。

例えば,式の値を他の方法で決定できる場合には,演算対象を評価しなかったり部分的にだけ評価したりしてもよい

7.1.8.1

参照)。この柔軟性は,関数の引数の評価にも適用され,引数の評価順序の変更,引数の評価の遅延 及び 引

数の評価の省略が許される。処理系は,引数の評価を遅らせることがプログラムの結果に影響を及ぼさないならば,

手続の実行がその引数の値を参照するまで,手続引用の中の引数の評価を遅らせてもよい。同様の制約のもとで処理

系は,手続の実行中に引用されない引数の評価を完全に省略してもよい。このことは,処理系に,

(例えば,並列処理

のような)最適化のための自由を与えている。

C.9.6

引数としてのポインタ 及び 指示先(

12.4.1.2

参照)

仮引数をポインタとして宣言した場合には,それはポインタである実引数とだけ結合することができ,仮引数と実

引数の特性は,一致しなければならない。そのような結合に対する実装モデルの一つは,実ポインタの記述子の値を

仮ポインタに複写するものである。実ポインタが指示先と結合している場合には,その指示先は仮ポインタを通して

参照できるようになる。仮ポインタが,手続の実行中に別の指示先と結合した場合には,この指示先は,手続の実行

が終了した後も実ポインタを通して参照できる。仮ポインタが,その手続の終了時に存在しなくなる局所的な指示先

と結合した場合には,その実ポインタは,

遊離した

ままの不定状態になる。このような状態のポインタを使用する

ことはできない。

手続の実行が終了した時,

TARGET

属性をもつスカラ 又は 形状引継ぎ配列である仮引数と結合していて,かつ

確定になっているポインタは,その仮引数に対応する実引数が

TARGET

属性をもち,ベクトル添字をもつ部分配列

でない場合に,その実引数と結合したままになる。

REAL, POINTER :: PBEST

REAL, TARGET :: B (10000)

CALL BEST (PBEST, B)

!

戻った時,

PBEST

B

最適な

要素と

...

!

結合している。

CONTAINS

SUBROUTINE BEST (P, A)

REAL, POINTER, INTENT (OUT)

:: P

REAL, TARGET, INTENT (IN)

:: A (:)

...

!

最適な要素

A(I)

を見つける。

P => A (I)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

408

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

RETURN

END SUBROUTINE BEST

END

手続

BEST

が終了した時,ポインタ

PBEST

B

1

要素と結合している。

TARGET

属性をもたない実引数と,

TARGET

属性をもつ仮引数が結合してもよい。これによって,そのような仮

引数を含む手続の実行中に,ポインタがその仮引数と結合することが許される。

INTEGER LARGE(100,100)

CALL SUB (LARGE)

...

CALL SUB ()

CONTAINS

SUBROUTINE SUB(ARG)

INTEGER, TARGET, OPTIONAL :: ARG(100,100)

INTEGER, POINTER, DIMENSION(:,:) :: PARG

IF (PRESENT(ARG)) THEN

PARG => ARG

ELSE

ALLOCATE (PARG(100,100))

PARG = 0

ENDIF

...

!

この部分に

PARG

の引用を多数含む。

IF (.NOT. PRESENT(ARG)) DEALLOCATE(PARG)

END SUBROUTINE SUB

END

サブルーチン

SUB

中で,ポインタ

PARG

は,仮引数

ARG

又は 割り付けられた指示先のどちらかと結合す

る。このサブルーチンの大部分では,これ以外に組込み関数

PRESENT

を呼び出さずに

PARG

を引用できる。

C.9.7

多相的引数結合(

12.4.1.3

参照)

次の例は,

4.54

で定義された派生型を使って多相的引数結合の規則を示している。

TYPE(POINT) :: T2

TYPE(COLOR_POINT) :: T3

CLASS(POINT) :: P2

CLASS(COLOR_POINT) :: P3

!

仮引数が多相的であり,実引数が固定の型である。

SUBROUTINE SUB2 ( X2 ); CLASS(POINT) :: X2; ...

SUBROUTINE SUB3 ( X3 ); CLASS(COLOR_POINT) :: X3; ...

CALL SUB2 ( T2 ) !

正しい

-- T2

の宣言時の型が

X2

の宣言時の型と同じ。

CALL SUB2 ( T3 ) !

正しい

-- T3

の宣言時の型が

X2

の宣言時の型から拡張されている。

CALL SUB3 ( T2 ) !

誤り

-- T2

の宣言時の型は,

X3

の宣言時の型とは同じでもなく,

!

X3

の宣言時の型から拡張されたものでもない。

CALL SUB3 ( T3 ) !

正しい

-- T3

の宣言時の型が

X3

の宣言時の型と同じ。

!

実引数が多相的であり,仮引数が固定の型である。

SUBROUTINE TUB2 ( D2 ); TYPE(POINT) :: D2; ...

SUBROUTINE TUB3 ( D3 ); TYPE(COLOR_POINT) :: D3; ...

CALL TUB2 ( P2 ) !

正しい

-- P2

の宣言時の型が

D2

の宣言時の型と同じである。

CALL TUB2 ( P3 ) !

誤り

-- P3

の宣言時の型が

D2

の宣言時の型とは異なる。

CALL TUB2 ( P3%POINT ) !

上記の例に代わる正しい例。

CALL TUB3 ( P2 ) !

誤り

-- P2

の宣言時の型が

D3

の宣言時の型とは異なる。

SELECT TYPE ( P2 ) !

上記の例に代わる正しい条件の例。

CLASS IS ( COLOR_POINT ) ! P2

の実行時の型が

D3

の宣言時の型と同じであるか

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

409

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

CALL TUB3 ( P2 )

!

又は

D3

の宣言時の型から拡張された型である場合に

!

動作する。

CLASS DEFAULT

!

そうでない場合には動作しない。

END SELECT

CALL TUB3 ( P3 ) !

正しい

-- P3

の宣言時の型が

D3

の宣言時の型と同じである。

!

実引数と仮引数の両方が多相的な型である。

CALL SUB2 ( P2 ) !

正しい

-- P2

の宣言時の型が

X2

の宣言時の型と同じである。

CALL SUB2 ( P3 ) !

正しい

-- P3

の宣言時の型が

X2

の宣言時の型からの拡張である。

CALL SUB3 ( P2 ) !

誤り

-- P2

の宣言時の型は,

X3

の宣言時の型と同じでもなく,

!

X3

の宣言時の型から拡張されたものでもない。

SELECT TYPE ( P2 ) !

直前の例に代わる正しい条件の例。

CLASS IS ( COLOR_POINT ) ! P2

の実行時の型が

X3

の宣言時の型と同じであるか

CALL SUB3 ( P2 )

!

又は

X3

の宣言時の型から拡張された型である場合に

!

動作する。

CLASS DEFAULT

!

そうでない場合には動作しない。

END SELECT

CALL SUB3 ( P3 ) !

正しい

-- P3

の宣言時の型が

X3

の宣言時の型と同じである。

C.10

箇条

15

の注記

C.10.1

実行環境

この規格では,プログラムに,

Fortran

以外の手段によって定義されている手続を含むことができる。これは,実

行環境の初期化の問題 及び 実行環境間の相互作用の問題を引き起こす。

次のことができれば,適切にこれらの問題を解決するための実装は自由である。

(1)

ヒープの割付け 及び 解放(例えば,

Fortran

サブプログラムにおける

ALLOCATE

文 及び

DEALLOCATE

文,

並びに 言語

C

の関数における

malloc

及び

free

)は,干渉せずに実行できる。

(2)

外部ファイルに対する入出力は,別の手段によって定義された手続が,同じ外部ファイルに対して入出力を行う

場合を除いて,干渉せずに実行できる。

(3)

入出力の事前接続は,各言語の規格によって要求されるように存在する。

(4)

初期化されるデータは,各言語の規格に従って初期化される。

C.10.2 Fortran

と言語

C

の関数との相互利用可能性の例

次の二つの例は,

Fortran

と言語

C

の関数との相互利用可能性を示す。一つは

Fortran

から言語

C

を呼び出す例,

もう一つは言語

C

から

Fortran

を呼び出す例である。それぞれの例で,

Fortran

実引数,

Fortran

仮引数 及び 言語

C

の仮引数の対応を示す。

C.10.2.1 Fortran

から言語

C

を呼び出す例

言語

C

の関数原型:

int C_Library_Function(void* sendbuf, int sendcount,

int *recvcounts);

Fortran

のモジュール:

MODULE FTN_C_1

USE, INTRINSIC :: ISO_C_BINDING

END MODULE FTN_C_1

MODULE FTN_C_2

INTERFACE

INTEGER (C_INT) FUNCTION C_LIBRARY_FUNCTION &

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

410

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

(SENDBUF, SENDCOUNT, RECVCOUNTS) &

BIND(C, NAME=

C_Library_Function

)

USE FTN_C_1

IMPLICIT NONE

TYPE (C_PTR), VALUE :: SENDBUF

INTEGER (C_INT), VALUE :: SENDCOUNT

TYPE (C_PTR), VALUE :: RECVCOUNTS

END FUNCTION C_LIBRARY_FUNCTION

END INTERFACE

END MODULE FTN_C_2

モジュール

FTN C 2

は,言語

C

の仮引数に対応する

Fortan

の仮引数の宣言を含む。モジュール

FTN C 1

内では,組込み

モジュール

ISO C BINDING

を参照している。

BIND

属性の

NAME

指定子によって,

Fortran

’C LIBRARY FUNCTION’

を言語

C

の大文字と小文字を区別する名前

’C Library Function’

に変更している。

注記

12.39

も参照せよ。

言語

C

1

番目の仮引数は

void

型の

sendbuf

へのポインタであり,

C PTR

型であって

VALUE

属性をもつ

Fortran

仮引数

SENDBUF

に対応する。

言語

C

2

番目の仮引数は

int

型の

sendcount

であり,

INTEGER(C INT)

型であって

VALUE

属性をもつ

Fortran

仮引数

SENDCOUNT

に対応する。

言語

C

3

番目の仮引数は

int

型の

recvcounts

へのポインタであり

, C PTR

型であって

VALUE

属性をもつ

Fortran

仮引数

RECVCOUNTS

に対応する。

Fortran

の呼出し列

USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_INT, C_FLOAT, C_LOC

USE FTN_C_2

...

REAL (C_FLOAT), TARGET

:: SEND(100)

INTEGER (C_INT)

:: SENDCOUNT

INTEGER (C_INT), ALLOCATABLE, TARGET :: RECVCOUNTS(:)

...

ALLOCATE( RECVCOUNTS(100) )

...

CALL C_LIBRARY_FUNCTION(C_LOC(SEND), SENDCOUNT, &

C_LOC(RECVCOUNTS))

...

先行するコードは,上に示した

Fortran

仮引数と結合する

Fortran

実引数の宣言を含む。

Fortran

1

番目の実引数は,配列

SEND

の第

1

要素のアドレスであり,

REAL(C FLOAT)

型であって

TARGET

性をもつ。このアドレスは,組込み関数

C LOC

が返す。この実引数は,

C PTR

型であって

VALUE

属性をもつ

Fortran

仮引数

SENDBUF

と結合する。

Fortran

2

番目の実引数は,

INTEGER(C INT)

型の

SENDCOUNT

であり,

INTEGER(C INT)

型であって

VALUE

属性をもつ

Fortran

仮引数

SENDCOUNT

と結合する。

Fortran

3

番目の実引数は,割付け配列

RECVCOUNTS

の第

1

要素のアドレスであり,

REAL(C FLOAT)

型であっ

TARGET

属性をもつ。このアドレスは,組込み関数

C LOC

が返す。この実引数は,

C PTR

型であって

VALUE

属性をもつ

Fortran

仮引数

RECVCOUNTS

と結合する。

C.10.2.2

言語

C

から

Fortran

を呼び出す例

Fortran

のコード:

SUBROUTINE SIMULATION(ALPHA, BETA, GAMMA, DELTA, ARRAYS) BIND(C)

USE, INTRINSIC :: ISO_C_BINDING

IMPLICIT NONE

INTEGER (C_LONG), VALUE

:: ALPHA

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

411

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

REAL (C_DOUBLE), INTENT(INOUT)

:: BETA

INTEGER (C_LONG), INTENT(OUT)

:: GAMMA

REAL (C_DOUBLE),DIMENSION(*),INTENT(IN) :: DELTA

TYPE, BIND(C) :: PASS

INTEGER (C_INT) :: LENC, LENF

TYPE (C_PTR) :: C, F

END TYPE PASS

TYPE (PASS), INTENT(INOUT) :: ARRAYS

REAL (C_FLOAT), ALLOCATABLE, TARGET, SAVE :: ETA(:)

REAL (C_FLOAT), POINTER :: C_ARRAY(:)

...

! C_ARRAY

を言語

C

で割り付けられた配列と結合する

CALL C_F_POINTER (ARRAYS%C, C_ARRAY, (/ARRAYS%LENC/) )

...

!

配列を割り付け,言語

C

で利用できるようにする

ARRAYS%LENF = 100

ALLOCATE (ETA(ARRAYS%LENF))

ARRAYS%F = C_LOC(ETA)

...

END SUBROUTINE SIMULATION

言語

C

の構造体宣言:

struct pass {int lenc, lenf; float *c, *f;};

言語

C

の関数原型:

void simulation(long alpha, double *beta, long *gamma,

double delta[], struct pass *arrays);

言語

C

の呼出し列:

simulation(alpha, &beta, &gamma, delta, &arrays);

上に示した

Fortran

コードは,サブルーチン

SIMULATION

を記述している。このサブルーチンは,言語

C

void

関数

simulation

に対応する。

Fortran

サブルーチンは,組込みモジュール

ISO C BINDING

を参照する。

このサブルーチンの

1

番目の

Fortran

仮引数は,

INTEGER(C LONG)

型であって

VALUE

属性をもつ

ALPHA

であ

る。この仮引数は,言語

C

long

型仮引数

alpha

に対応する。

2

番目の

Fortran

仮引数は,

REAL(C DOUBLE)

型であって

INTENT(INOUT)

属性をもつ

BETA

である。この仮

引数は,言語

C

double

型へのポインタである仮引数

beta

に対応する。言語

C

の呼出し列における実引数として

アドレスが渡される。

3

番目の

Fortran

仮引数は,

INTEGER(C LONG)

型であって

INTENT(OUT)

属性をもつ

GAMMMA

である。この仮

引数は,言語

C

long

型へのポインタである仮引数

gamma

に対応する。言語

C

の呼出し列における実引数としてア

ドレスが渡される。

4

番目の

Fortran

仮引数は,

REAL(C DOUBLE)

型であって

INTENT(IN)

属性をもつ,大きさ引継ぎ配列

DELTA

である。この仮引数は,言語

C

double

型配列である仮引数

delta

に対応する。言語

C

の実引数も

double

型配列

である。

5

番目の

Fortran

仮引数は,言語

C

で割り付けられた配列 及び

Fortran

で割り付けられた配列にアクセスするた

めの構造体

ARRAYS

である。これらの配列の長さは,成分

LENC

及び

LENF

に保持され,それらの

C

アドレスは成分

C

及び

F

に保持される。

C.10.2.3

相互利用できないデータを用いた言語

C

を呼び出す例

多くの

Fortran

処理系は,言語

C

処理系が用意しないことがある

16

バイトの実数を用意する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

412

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

Fortran

プログラマが,これらの実数の配列に対するメッセージ渡しライブラリから言語

C

の手続を使うとする。

この手続の言語

C

関数原型は

void ProcessBuffer(void *buffer, int n_bytes);

であり,対応する

Fortran

引用仕様は,次のとおりである。

USE, INTRINSIC :: ISO_C_BINDING

INTERFACE

SUBROUTINE PROCESS_BUFFER(BUFFER,N_BYTES) BIND(C,NAME="ProcessBuffer")

IMPORT :: C_PTR, C_INT

TYPE(C_PTR), VALUE :: BUFFER !

配列

buffer

C

アドレス

INTEGER(C_INT), VALUE :: N_BYTES ! buffer

内のバイト数

END SUBROUTINE PROCESS_BUFFER

END INTERFACE

もし

Fortran

処理系の

C LOC

が適切なアドレスを返すならば,これは

C LOC

を用いて行える。

REAL(R_QUAD), DIMENSION(:), ALLOCATABLE, TARGET :: QUAD_ARRAY

...

CALL PROCESS_BUFFER(C_LOC(QUAD_ARRAY), INT(16*SIZE(QUAD_ARRAY),C_INT))

!

この処理系では一つの

quad

実数型は,

16

バイトをとる

C.10.2.4

言語

C

Fortran

との間の不透明な連絡の例

次の例は,

C

プログラムから利用できる現代的なオブジェクト指向乱数生成器の

Fortran

での作り方を示している。

USE, INTRINSIC :: ISO_C_BINDING

!

このコードはモジュール内にあると仮定

TYPE RANDOM_STREAM

!

一様乱数生成器

(URNG -- Uniform Random Number Generator)

CONTAINS

PROCEDURE(RANDOM_UNIFORM), DEFERRED, PASS(STREAM) :: NEXT

!

ストリームから次の数を生成

END TYPE RANDOM_STREAM

ABSTRACT INTERFACE

! Fortran

URNG

の抽象引用仕様

SUBROUTINE RANDOM_UNIFORM(STREAM, NUMBER)

IMPORT :: RANDOM_STREAM, C_DOUBLE

CLASS(RANDOM_STREAM), INTENT(INOUT) :: STREAM

REAL(C_DOUBLE), INTENT(OUT) :: NUMBER

END SUBROUTINE RANDOM_UNIFORM

END INTERFACE

基底型

RANDOM STREAM

の多相的実体は,

C

と相互利用可能ではない。しかし,多相的でもなくパラメタ付けされて

もいない別の派生型の中にそれをパッケージ化することによって,言語

C

で利用できるそのような乱数生成器を作る

ことができる。

TYPE :: URNG_STATE !

この型は相互利用可能ではないので

BIND(C)

は書かない

CLASS(RANDOM_STREAM), ALLOCATABLE :: STREAM

END TYPE URNG_STATE

次の二つの手続によって,言語

C

のプログラムから

Fortran

一様乱数生成器が利用できるようになる。

!

一様乱数生成器の初期化

SUBROUTINE INITIALIZE_URNG(STATE_HANDLE, METHOD) &

BIND(C, NAME="InitializeURNG")

TYPE(C_PTR), INTENT(OUT) :: STATE_HANDLE

! URNG

に対する不透明なハンドル

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

413

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

CHARACTER(C_CHAR), DIMENSION(*), INTENT(IN) :: METHOD

!

使用されるアルゴリズム

TYPE(URNG_STATE), POINTER :: STATE

!

実際の

URNG

実体

ALLOCATE(STATE)

!

この例では示さないが,メモリリークを避けるために対応する後始末が必要

! METHOD

に依存する実行時の型で

STATE%STREAM

を割り付ける

...

STATE_HANDLE=C_LOC(STATE)

!

言語

C

に戻るために不透明なハンドルを獲得

END SUBROUTINE INITIALIZE_URNG

!

乱数の生成

SUBROUTINE GENERATE_UNIFORM(STATE_HANDLE, NUMBER) &

BIND(C, NAME="GenerateUniform")

TYPE(C_PTR), INTENT(IN), VALUE :: STATE_HANDLE

! INITIALIZE_URNG

の呼出しによって得られた不透明なハンドル

REAL(C_DOUBLE), INTENT(OUT) :: NUMBER

TYPE(URNG_STATE), POINTER :: STATE

!

実際の

URNG

へのポインタ

CALL C_F_POINTER(CPTR=STATE_HANDLE, FPTR=STATE)

!

不透明なハンドルを使用可能なポインタに変換

CALL STATE%STREAM%NEXT(NUMBER)

! NUMBER

を生成するために型束縛手続

NEXT

を使用

END SUBROUTINE GENERATE_UNIFORM

C.11

箇条

16

の注記

C.11.1

親子結合の例(

16.4.1.3

参照)

親子結合の正しい例を

1.

及び

2.

に,誤った例を

3.

に示す。

1.

正しい親子結合

PROGRAM A

INTEGER I, J

...

CONTAINS

SUBROUTINE B

INTEGER I

! I

を宣言したことによって,プログラム

A

での

I

の宣言が隠れる。

...

I = J

!

親子結合によって,プログラム

A

の変数

J

を使用する。

END SUBROUTINE B

END PROGRAM A

2.

正しい親子結合

PROGRAM A

TYPE T

...

END TYPE T

...

CONTAINS

SUBROUTINE B

IMPLICIT TYPE (T) (C)

!

上のプログラム

A

内で宣言した型

T

ではなく,

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

414

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

!

下のサブルーチン

B

内で宣言する型

T

を参照する。

...

TYPE T

...

END TYPE T

...

END SUBROUTINE B

END PROGRAM A

3.

誤った親子結合

PROGRAM Q

REAL (KIND = 1) :: C

...

CONTAINS

SUBROUTINE R

REAL (KIND = KIND (C)) :: D

!

この宣言は誤り。下の本文参照。

REAL (KIND = 2) :: C

...

END SUBROUTINE R

END PROGRAM Q

サブルーチン

R

D

の宣言に使用している

C

は,プログラム

Q

で宣言された

C

ではなくサブルーチン

R

内で宣言された

C

を参照していることになる。しかし,

C

D

の宣言で使用するよりも前に宣言してお

かなければならない(

7.1.7

参照)ので,これは誤りである。

C.11.2

明白な総称を保証する規則(

16.2.3

参照)

16.2.3

の規則は,次のことを保証する。

総称の集合中で,個別手続それぞれの引用を可能にすること。

総称手続を正しく引用するために,引用される個別手続が明白に決定されること。

引用される個別手続が,プログラムの実行開始前(翻訳中)に決定されること。

個別手続は,特定の型,種別型パラメタ 及び 次元数の引数に固定した性質によって区別される。総称集合中のあ

る手続の正しい引用は,他の手続が受け入れられない引数をもっていること,他の手続が必要とする引数をもってい

ないこと 又は 固定した性質の一つが異なっていることによって,他の手続の引用とは区別される。

データ要素の宣言時の型は固定した性質をもつが,多相的な変数は,ある制約下で仮引数と実引数との型の不一致

が許されている。二つの仮引数を区別する条件は,型が適合していないことであり,単に型が異なるだけではない。

(これは,後にこの細分箇条に出てくる例

BAD6

で示されている。)

同じ制約下での型の不一致は,型が適合している二つの仮引数が共通にもっている種別型パラメタの値に基づいて

区別されることを意味する。もしそれらの一つが,他方がもっていない種別型パラメタをもっていても,それらを区

別するのには関係がない。

次元数は固定した性質であるが,手続が個別名で引用されるとき,配列の仮引数の幾つかの形式では,次元数が一

致していなくてもよい。次元数が常に総称を区別するのに使えるようにするため,手続が総称として引用されるとき

は,それらの引数について次元数の不一致は許されない。更に,要素別処理手続が配列引数を受け入れられるという

事実は,これらの規則を適用するときに考慮されない。要素別処理手続とそうでない手続との間には,明らかなあい

まいさがある。その場合,その引用は,要素別処理でない手続への引用と解釈される。

演算子 又は 利用者定義代入として引用された手続では,構文的に区別された引数は,引数リストの中の個別の位

置に配置される。それらの手続を区別する規則は,引数の位置の一つによって引数を区別することが可能であるとい

うことである。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

415

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

利用者定義の派生型入出力手続では,引数

dtv

だけがそのプログラム内で明示的に書くものであり,区別する必要

がある。引数

dtv

はスカラである必要があるので,それらは次元数では区別できない。したがって,この規則は,実

際には型 及び 種別型パラメタだけに影響する。

名前で識別される総称手続では,規則は更に複雑となる。それは,省略可能な引数が省略されたり,引数が位置 又

は 名前のいずれかによって指定されるからである。

当該実体仮引数をもつ型束縛手続という特別な場合,当該実体仮引数は,構文で区別して参照される。そのとき,

規則

(

2

)

が適用される。当該実体仮引数の型は,同じ有効域内の当該実体仮引数が型不適合とならない手段を強いる。

したがって,この規則は,実際には種別型パラメタ 及び 次元数だけに影響する。

名前付けられた総称を区別する主な手段は,規則

(

3

)

である。その規則の最もよくある応用は,単一の引数が

(

3a

)

及び

(

3b

)

の両方を満足することである。

INTERFACE GOOD1

FUNCTION F1A(X)

REAL :: F1A,X

END FUNCTION F1A

FUNCTION F1B(X)

INTEGER :: F1B,X

END FUNCTION F1B

END INTERFACE GOOD1

GOOD1(1.0)

又は

GOOD1(X=1.0)

と書くと,

F1A

の引用になる。これらの引用が実数の定数値

1.0

を与えているの

に対して,

F1B

が整数の引数を必要としているからである。

この例 及び 以降の例は,区別する性質としての型をもつ引用仕様本体を示している。これは,それらの例を書い

たり示したりすることをより容易にしている。ここで示されている原則は,それらの手続が他のある手段で明示的引

用仕様をもつとき 又は 種別型パラメタ 若しくは 次元数が区別する性質であるとき,等しく適用できる。

一つのよくある形は,引数が一方の個別手続には必要とされ,他方には全く存在しないことによって,

(

3a

)

及び

(

3b

)

を満足するものである。

INTERFACE GOOD2

FUNCTION F2A(X)

REAL :: F2A,X

END FUNCTION F2A

FUNCTION F2B(X,Y)

COMPLEX :: F2B

REAL :: X,Y

END FUNCTION F2B

END INTERFACE GOOD2

GOOD2(0.0,1.0)

GOOD2(0.0,Y=1.0)

又は

GOOD2(Y=1.0,X=0.0)

と書くと,

F2B

の引用になる。

F2A

は,

2

番目

の位置に引数をもたないし,名前

Y

である引数ももたないからである。この方法は,引数が存在するかどうかによっ

て,関数に異なる結果の型,異なる種別型パラメタ 又は 異なる次元数をもたせたいとき,省略可能な引数に対する

一つの代替手段として使われる。組込み関数の多くで,引数

DIM

はこのように働く。

引数を異なる位置 及び 名前によって区別することも可能である。

INTERFACE GOOD3

SUBROUTINE S3A(W,X,Y,Z)

REAL :: W,Y

INTEGER :: X,Z

END SUBROUTINE S3A

SUBROUTINE S3B(X,W,Z,Y)

REAL :: W,Z

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

416

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

INTEGER :: X,Y

END SUBROUTINE S3B

END INTERFACE GOOD3

S3A

を引用するために

GOOD3(1.0,2,3.0,4)

と書くと,

3

番目 及び

4

番目の引数が

S3B

の引用に一致するが,

1

目 及び

2

番目の引数は

S3B

の引用に一致しない。

S3B

への引用と一致させるために,最初の二つの引数を引数キーワー

ドを使って入れ換えて書いた場合,最後の二つの引数は,引数キーワードを使って

GOOD3(X=2,W=1.0,Z=4,Y=3.0)

と書かなければならない。このとき,名前付けされた引数

Y

及び 引数

Z

は区別される。

規則

(

3

)

の順序の条件は,重要である。

INTERFACE BAD4

!

この引用仕様は正しくない。

SUBROUTINE S4A(W,X,Y,Z)

REAL :: W,Y

INTEGER :: X,Z

END SUBROUTINE S4A

SUBROUTINE S4B(X,W,Z,Y)

REAL :: X,Y

INTEGER :: W,Z

END SUBROUTINE S4B

END INTERFACE BAD4

この例では,引数

Y

及び 引数

Z

は位置によって区別され,引数

W

及び 引数

X

は名前によって区別される。この順

番で,

BAD4(1.0,2,Y=3.0,Z=4)

と書くことは可能であるが,

S4A

及び

S4B

の両方を正しく引用することになる。

規則

(

1

)

では,規則

(

3

)

で対応できない幾つかの場合を区別することができる。

INTERFACE GOOD5

SUBROUTINE S5A(X)

REAL :: X

END SUBROUTINE S5A

SUBROUTINE S5B(Y,X)

REAL :: Y,X

END SUBROUTINE S5B

END INTERFACE GOOD5

規則

(

3

)

を適用しようとすると,正しくない順番ではあるが,位置

2

及び 名前

Y

BAD4

の例のように区別でき

る。しかし,同じようなあいまいな引用を構成しようとしても,

GOOD5(1.0,X=2.0)

は,二つの異なる実引数を仮引

X

と結合することになってしまうので,

S5A

の引用となることはない。

S5B

が二つの実引数を必要とすることを認

識すると,規則

(

3

)

はこの場合に該当する。

S5A

は二つ以上の引数を受け入れることはできない。

規則

(

1

)

の適用は,拡張可能型が現れるとき,更に複雑となる。

FRUIT

が拡張可能型であって,

PEAR

及び

APPLE

FRUIT

の拡張であり,

BOSC

PEAR

の拡張であるとき,一見すると,次の方法で区別可能に見えるが,制約され

た型の不一致が許されるので,

BAD6(A PEAR,A BOSC)

S6A

及び

S6B

の両方への正しい引用となる。

INTERFACE BAD6

!

この引用仕様は正しくない。

SUBROUTINE S6A(X,Y)

CLASS(PEAR) :: X,Y

END SUBROUTINE S6A

SUBROUTINE S6B(X,Y)

CLASS(FRUIT) :: X

CLASS(BOSC) :: Y

END SUBROUTINE S6B

END INTERFACE BAD6

存在するそれぞれの型に対して規則

(

1

)

を試みることは,重要である。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

417

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

INTERFACE GOOD7

SUBROUTINE S7A(X,Y,Z)

CLASS(PEAR) :: X,Y,Z

END SUBROUTINE S7A

SUBROUTINE S7B(X,Z,W)

CLASS(FRUIT) :: X

CLASS(BOSC) :: Z

CLASS(APPLE),OPTIONAL :: W

END SUBROUTINE S7B

END INTERFACE GOOD7

最も一般的な型を見ると,

S7A

は最少 かつ 最多で三つの

FRUIT

型の引数をもっている。同じく,

S7B

は最少で二

つ,最多で三つの引数をもっている。最も個別の型を見ると,

S7A

は最少でゼロ,最多で三つの

BOSC

型の引数をもっ

ている。同じく,

S7B

は最少で一つ,最多で二つの引数をもっている。しかし,中間の型を見ると,

S7A

は最少 かつ

最多で三つの

PEAR

型の引数をもっている。同じく,

S7B

は最少で一つ,最多で二つの引数をもっている。

S7A

の最少

S7B

の最多を超しているので,これらは区別できる。

特定の性質をもつ最少数の引数を識別するのに,省略可能な引数を除外し,

TKR

適合性を調べる。このために,対

応する実引数は,それらの性質をもつ必要がある。特定の性質をもつ最多数の引数を識別するのに,省略可能な引数

をもち,区別できないことを調べる。このため,もつ必要のないそれらの性質をもつ実引数を含める。

これらの規則は,それらに一致する手続の引用が明白であることを保証するのに十分である。しかし,明白である

ことを示すことができるにもかかわらず,これらの規則が適用できない例もある。

INTERFACE BAD8

!

この引用仕様は正しくない。

!

あいまいではないという事実があるにもかかわらず。

SUBROUTINE S8A(X,Y,Z)

REAL,OPTIONAL :: X

INTEGER :: Y

REAL :: Z

END SUBROUTINE S8A

SUBROUTINE S8B(X,Z,Y)

INTEGER,OPTIONAL :: X

INTEGER :: Z

REAL :: Y

END SUBROUTINE S8B

END INTERFACE BAD8

この引用仕様は,規則

(

3

)

に適合しない。なぜならば,位置の対応によって区別できる必要な引数がないからであ

る。しかし,省略可能な引数の不一致を無関係にするために,後ろの引数は,引数キーワードで指定しなければなら

ず,名前による区別は,うまく機能する。この引用仕様は正しくないにもかかわらず,規格合致

Fortran

処理系は,そ

のような理由付けをすることを要求されない。すべての場合に対応する規則は,利用するには複雑すぎる。

BAD8

の第

1

の引数のような区別可能な形式を認識しないのに加えて,規則では,型,種別型パラメタ 及び 次元数

以外のどんな性質に基づく区別もしない。

INTERFACE BAD9

!

この引用仕様は正しくない。

!

あいまいではないという事実があるにもかかわらず。

SUBROUTINE S9A(X)

REAL :: X

END SUBROUTINE S9A

SUBROUTINE S9B(X)

INTERFACE

FUNCTION X(A)

REAL :: X,A

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

418

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

END FUNCTION X

END INTERFACE

END SUBROUTINE S9B

SUBROUTINE S9C(X)

INTERFACE

FUNCTION X(A)

REAL :: X

INTEGER :: A

END FUNCTION X

END INTERFACE

END SUBROUTINE S9C

END INTERFACE BAD9

S9A

の正しい引数である実数のデータ実体は,

S9B

及び

S9C

の正しい引数である手続とは完全に分離している。ま

た,

S9B

の正しい引数である手続は,

S9C

の正しい引数である手続とも分離している。なぜならば,前者は実数の引数

を,後者は整数の引数を必要としているからである。繰返しになるが,この引用仕様は正しくなく,規格合致

Fortran

処理系は,総称の集合が正しいかどうかを決めるときに,このような性質を検査する必要はない。重ねて,すべての

場合に対応する規則は,利用するには複雑すぎる。

C.12

配列機能の注記

C.12.1

機能のまとめ

ここでは,主要な配列機能をまとめる。

C.12.1.1

全体配列の式 及び 代入(

7.4.1.2

及び

7.4.1.3

参照)

新しい重要な機能は,全体配列の式及び 代入が許されるようになったことである。例えば,

A

B

C

及び

D

が同

じ形状の配列であるとき,

A = B + C * SIN (D)

という文を書くことができる。この解釈は要素ごとに行われる。すなわち,

D

の各要素に対して正弦関数が適用され,

それぞれの結果は対応する

C

の要素と掛け合わされ,対応する

B

の要素に加えられて,対応する

A

の要素に代入さ

れる。関数(利用者が書いた関数を含む。)は,配列値であってよい。更に,スカラの版と総称的であってよい。すべ

ての配列は,式中で 又は 代入文の左右で形状適合しなければならない。すなわち,厳密に同じ形状(次元数 及び 各

次元の寸法)でなければならない。ただし,スカラはどこに含んでもよい。スカラは,形状適合する配列に配布され

たものとして解釈される。式の評価は,代入に先立って行われる。

C.12.1.2

部分配列(

2.4.5

及び

6.2.2.3

参照)

全体配列が使用できるときはいつでも,部分配列も使用できる。例えば,

A (:, 1:N, 2, 3:1:-1)

という部分配列は,第

1

次元のすべての位置,第

2

次元の

1

から

N

までの位置,第

3

次元の

2

の位置,及び 第

4

元の

1

から

3

までの位置を逆順に含む。この例は,いろいろな形を説明するための作為的なものである。普通は,次

の例のように配列の行 又は 列を選ぶために使う。

A (:, J)

C.12.1.3 WHERE

文(

7.4.3

参照)

WHERE

文は,形状適合する論理配列を使って,式中 及び 代入の個々の演算を選別するのに用いる。例えば,

WHERE (A > 0) B = LOG (A)

は,

A

の正の成分だけの対数を求め,正の成分の位置においてだけ代入を行う。

WHERE

文には,ブロックの形(

WHERE

構文)もある。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

419

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

C.12.1.4

自動割付け配列 及び 割付け変数(

5.1

及び

5.1.2.5.3

参照)

ソフトウェアのモジュール化に寄与する二つの有用な機能は,自動割付け配列 及び 割付け配列を含む割付け変数

ができたことである。自動割付け配列は,サブルーチンの入口で生成し,戻る時に消去する。割付け配列は,次元数

が固定される。しかし,実際の大きさ及び 生存期間は,明示的な

ALLOCATE

文 及び

DEALLOCATE

文によって

プログラマが完全に制御できる。

SUBROUTINE X (N, A, B)

REAL WORK (N, N); REAL, ALLOCATABLE :: HEAP (:, :)

という宣言は,自動割付け配列

WORK

及び 割付け配列

HEAP

を定義する。

注記

自動割付け配列の実現に適する記憶域の仕組みは,スタックであろう。割付け変数のためには,ヒープ

が必要となるであろう。

C.12.1.5

配列構成子(

4.7

参照)

配列(特に配列定数)は,次の例に示すような配列構成子によって構成できる。

(/ 1.0, 3.0, 7.2 /)

これは,大きさが

3

1

次元配列となる。

(/ (1.3, 2.7, L = 1, 10), 7.1 /)

これは,大きさが

21

1

次元配列になり,実定数

1.3

2.7

との組を

10

回繰り返した列に

7.1

を付け加えたも

のになる。

(/ (I, I = 1, N) /)

は,整数

1

,

2

, . . . ,

N

になる。この方法は,

1

次元配列だけを構成できる。

2

次元以上の配列は,組込み関数

RESHAPE

を用いて構成することができる。

C.12.2

配列機能によって,配列を使用するプログラムのほとんどは,考えたり書いたりするのが簡単になった。今や配列

を含んでいるアルゴリズムの多くは,全体配列の一連の計算として便利に書くことができる。

C.12.2.1

無条件の配列計算

最も簡単な例として,

A = B + C

S = SUM (A)

などの文は

DO

ループ全体の代わりができる。今までは,配列の加算,配列要素の合計などをするのにループが必要

になっていた。

更に,簡単に書ける無条件の配列演算の例を示す。

行列積

P = MATMUL (Q, R)

配列要素の最大値

L = MAXVAL (P)

N

の階乗

F = PRODUCT ((/ (K, K = 2, N) /))

フーリエ級数

F

=

N

i

=1

a

i

×

cos

x

i

も,配列式が要素ごとに計算されるという性質(箇条

7

参照)を用いれば,

DO

ループを書かずに計算することができる。つまり,次のように書くことができる。

F = SUM (A * COS (X))

このとき,

F

の計算における各段階は,次の配列になっている。

A = (/ A(1), ..., A(N) /)

X = (/ X(1), ..., X(N) /)

COS(X) = (/ COS(X(1)), ..., COS(X(N)) /)

A * COS(X) = (/ A(1) * COS(X(1)), ..., A(N) * COS(X(N)) /)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

420

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

最後のスカラの結果は,この最後の段階の配列要素を合計して簡単に得られる。このように,処理系は計算の各段

階で配列を処理している。

C.12.2.2

条件付き配列計算

上の例のフーリエ級数において,ここでは,係数

a

i

の絶対値が

0

.

01

より小さいという条件を満たす項

a

i

cos

x

i

けの総和を計算したいとする。正確には,次の条件付きフーリエ級数を計算する。

CF

=

|

a

i

|

<

0

.

01

a

i

×

cos

x

i

ここで,

i

は,前例と同じく

1

N

の範囲を動く。

この式の値は,組込み関数

SUM

の引数

MASK

を使って計算できる。引数

MASK

で,配列

A*COS(X)

の要素のうち選

別式が真となる要素だけに限定する。正確には,選別式として論理配列式

ABS(A) < 0.01

を指定する。この式の評

価の段階を次に示す。

A = (/ A(1), ..., A(N) /)

ABS(A) = (/ ABS(A(1)), ..., ABS(A(N)) /)

ABS(A) < 0.01 = (/ ABS(A(1)) < 0.01, ..., ABS(A(N)) < 0.01 /)

したがって,求める条件付きフーリエ級数は,次のように書ける。

CF = SUM (A * COS (X), MASK = ABS (A) < 0.01)

選別式がすべて偽のときは,

CF

の値はゼロになる。

配列の部分集合を定義する選別式は,

WHERE

文の動作においても重要である。例えば,配列全体にゼロを代入す

るには,単に

A = 0

と記述すればよいが,値が負の要素に対してだけゼロを代入するには,次の条件付き代入文を書

かなければならない。

WHERE (A .LT. 0)

A = 0

WHERE

文を使うと,通常の配列代入文を補って,論理式によって限定しうるような配列の任意の部分集合への代

入が可能となる。

C.12.2.3

に示すイジング模型で,

WHERE

文が通常の配列代入文より優れていることを示す。

C.12.2.3

簡単なプログラム(イジング模型)

イジング模型

(Ising model)

は,

3

次元ユークリッド空間内のモンテカルロシミュレーションとして知られていて,

ある種の物理学の研究に役立つ。これがどのようなプログラムになるか考えてみる。この模型は,形状が

(

N

,

N

,

N

)

論理型配列として記述できる。それぞれの格子点の状態を一つの論理変数で表し,真を上向きスピン,偽を下向きス

ピンとみなす。

イジング模型は,状態が次々に遷移することによって働く。次の状態への遷移は,局所的な確率過程に従う。

1

の遷移で,すべての格子点の状態が同時に遷移する。ある格子点のスピン状態は,それを取り囲む

6

個の隣接格子点

の状態だけに依存するある規則に従って,反転するか否かが決まる。立方体の模型の境界面上の格子点では,隣接格

子点は,

3

次元の周期性を仮定して定義される。その結果,格子は,すべての方向に周期的に複製され,空間全体に

拡張される。

状態遷移の規則は,次のとおりである。

6

個の隣接格子点のうち,その格子点と同じスピンをもつものの個数が

3

個以下である場合は,その格子点のスピンは反転する。同じスピンをもつものの個数が

4

個,

5

個 又は

6

個である場

合は,それぞれ

P(4)

P(5)

又は

P(6)

の確率でスピンが反転する。

(この規則は,長く動作させると隣接する格子点

の状態が均等になるように働く。)

C.12.2.3.1

解くべき問題

イジング模型を,全体配列を使った

Fortran

の文に翻訳するために解決すべき問題を次に示す。

(1)

同じスピンをもつ隣接格子点を数える。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

421

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

(2)

乱数の配列を返す配列関数を用意する。

(3)

どの格子点を反転すべきかを決定する。

C.12.2.3.2 Fortran

による解

計算に必要な配列を次に示す。

LOGICAL ISING (N, N, N), FLIPS (N, N, N)

INTEGER ONES (N, N, N), COUNT (N, N, N)

REAL THRESHOLD (N, N, N)

計算に必要な配列関数を次に示す。

FUNCTION RAND (N)

REAL RAND (N, N, N)

状態遷移の確率は,配列で次のように指定する。

REAL P (6)

まず,それぞれの格子点

g

に対して,

g

と同じスピンをもつ隣接格子点の個数を求める。

配列

ISING

が与えられたと仮定すると,次の文

ONES = 0

WHERE (ISING) ONES = 1

によって,

ISING

をそっくりそのまま反映し,上向きスピンは

1

,下向きスピンは

0

とした配列

ONES

を求めること

ができる。

次に,

ISING

のすべての格子点に対して,

6

個の隣接格子点のスピンの計数を配列

COUNT

に求める。

COUNT

は,隣

接格子点の相対位置を表現した

6

個の配列の和で計算する。

6

個の配列は,それぞれ配列

ONES

をある次元に沿って

1

要素分だけ循環移動することで得られる。

COUNT = CSHIFT (ONES, SHIFT = -1, DIM = 1) &

& + CSHIFT (ONES, SHIFT =

1, DIM = 1) &

& + CSHIFT (ONES, SHIFT = -1, DIM = 2) &

& + CSHIFT (ONES, SHIFT =

1, DIM = 2) &

& + CSHIFT (ONES, SHIFT = -1, DIM = 3) &

& + CSHIFT (ONES, SHIFT =

1, DIM = 3)

このとき

COUNT

は,イジング模型の格子点が下向きスピンをもつ場合でも,上向きスピンをもつ隣接格子点の個数

を求めたことになる。しかし,下向きスピンをもつ格子点に対しては,下向きスピンをもつ隣接格子点の個数を求め

なければならないので,次の文で

COUNT

を修正する。

WHERE (.NOT. ISING) COUNT = 6 - COUNT

これらの

同じ状態の隣接格子点

の個数を使って,どの格子点を反転すべきかを決定する。この決定は,配列

FLIPS

の要素を真にすることで表す。反転は,区間

0

p <

1

の一様乱数に基づいて決定する。それぞれの格子点に対して,

乱数を配列関数

RAND

で与える。格子点の状態は,与えられたしきい値より乱数の値が小さいときに反転する。格子

点の同傾向隣接格子点が

3

個以下である場合は,しきい値を

1

にして,その格子点を必ず反転させる(乱数

p

は常に

1

より小さい。)。格子点の同傾向隣接格子点が

4

個,

5

個 又は

6

個である場合は,しきい値をそれぞれ

P(4)

P(5)

又は

P(6)

にして,その格子点を望みの確率で反転させる(

P(4)

P(5)

及び

P(6)

は,

0

1

の範囲の値をもつ引数

とする。)。

しきい値の計算は,次の文で得られる。

THRESHOLD = 1.0

WHERE (COUNT == 4) THRESHOLD = P (4)

WHERE (COUNT == 5) THRESHOLD = P (5)

WHERE (COUNT == 6) THRESHOLD = P (6)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

422

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

反転すべきスピンは,次の文で得られる。

FLIPS = RAND (N) <= THRESHOLD

イジング模型を次の状態に遷移させるために残ったのは,

FLIPS

の真に対応して

ISING

のスピンを反転させる処理

だけである。

WHERE (FLIPS) ISING = .NOT. ISING

C.12.2.3.3 Fortran

サブルーチンの全容

イジング模型の一連の状態遷移を,完結したサブルーチンの形で次に示す。

SUBROUTINE TRANSITION (N, ISING, ITERATIONS, P)

LOGICAL ISING (N, N, N), FLIPS (N, N, N)

INTEGER ONES (N, N, N), COUNT (N, N, N)

REAL THRESHOLD (N, N, N), P (6)

DO I = 1, ITERATIONS

ONES = 0

WHERE (ISING) ONES = 1

COUNT = CSHIFT (ONES, -1, 1) + CSHIFT (ONES, 1, 1) &

& + CSHIFT (ONES, -1, 2) + CSHIFT (ONES, 1, 2) &

& + CSHIFT (ONES, -1, 3) + CSHIFT (ONES, 1, 3)

WHERE (.NOT. ISING) COUNT = 6 - COUNT

THRESHOLD = 1.0

WHERE (COUNT == 4) THRESHOLD = P (4)

WHERE (COUNT == 5) THRESHOLD = P (5)

WHERE (COUNT == 6) THRESHOLD = P (6)

FLIPS = RAND (N) <= THRESHOLD

WHERE (FLIPS) ISING = .NOT. ISING

END DO

CONTAINS

FUNCTION RAND (N)

REAL RAND (N, N, N)

CALL RANDOM_NUMBER (HARVEST = RAND)

RETURN

END FUNCTION RAND

END

C.12.2.3.4

記憶場所の削減

配列

ISING

は,

(やや分かりにくくはなるが,

)模型を常に

ONES

で表すことで削除できる。配列

FLIPS

は,次に示

すように

2

個の文を結合することで削除できる。

WHERE (RAND (N) <= THRESHOLD) ISING = .NOT. ISING

しかし,一時的な配列が余分に必要となるであろう。このように,全体配列の操作では,記憶場所を節約できる範

囲は限られている。

N

の値が小さい場合は,これは問題にならず,全体配列操作の使用によってよい実行速度を得ら

れると考えられる。

N

の値が大きい場合は,記憶場所の問題は重要になり,操作を平面ごとに行うことによって,お

そらく十分な効率が得られる。プログラムの美しさは損なわれるが,

ISING

以外の配列の大きさは,

N

3

の程度だった

のを

N

2

の程度にできる。

C.12.3

数式の翻訳 及び 配列処理

配列処理機能を使うと,多くの数式は,直接

Fortran

の式に変換できる。

C.12.3.1

C.12.3.9

では,次の配列の宣言がしてあるものとする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

423

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

REAL X (N), A (M,N)

幾つかの数式及び それに対応する

Fortran

の式の例を,次に示す。

C.12.3.1

積の和

N

j

=1

M

i

=1

a

ij

は,

Fortran

では次のとおりに記述できる。

SUM (PRODUCT (A, DIM=1))

PRODUCT

の引数

DIM=1

は,配列

A

の各列内で縦に乗算することを指定する。

A

が配列


B

C

D

E

F

G


であると

き,

SUM(PRODUCT(A,DIM=1))

の結果は,

BE

+

CF

+

DG

になる。

C.12.3.2

和の積

M

i

=1

N

j

=1

a

ij

は,

Fortran

では次のとおりに記述できる。

PRODUCT (SUM (A, DIM = 2))

SUM

の引数

DIM=2

は,配列

A

の各行内で横に加算することを指定する。

A

が配列


B

C

D

E

F

G


であるとき,

PRODUCT(SUM(A,DIM=2))

の結果は,

(

B

+

C

+

D

)

*

(

E

+

F

+

G

)

になる。

C.12.3.3

選択要素の加算

x

i

>

0

.

0

x

i

は,

Fortran

では次のとおりに記述できる。

SUM (X, MASK = X > 0.0)

MASK

は,

1

次元配列中の正の要素を選別する。

X

がベクトル

(0

.

0

,

0

.

1

,

0

.

2

,

0

.

3

,

0

.

2

,

0

.

1

,

0

.

0)

であるとき,

SUM(X,

MASK=X>0.0)

の結果は,

0

.

7

になる。

C.12.4

残差平方和

N

i

=1

(

x

i

x

mean

)

2

は,

Fortran

では次のとおりに記述できる。

XMEAN = SUM (X) / SIZE (X)

SS = SUM ((X - XMEAN) ** 2)

結果の

SS

は,残差平方和になる。

C.12.5

ベクトルのノルム(無限大ノルム 及び

1

ノルム)

ベクトル

X

= (

X(1)

, . . . ,

X(N)

)

の無限大ノルム(最大値ノルム)は,

ABS(X(1))

, . . . ,

ABS(X(N))

の最大値であ

るので,

MAXVAL(ABS(X))

の値になる。

ベクトル

X

1

ノルムは,

ABS(X(1))

, . . . ,

ABS(X(N))

の和であるので,

SUM(ABS(X))

の値になる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

424

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

C.12.6

行列のノルム(無限大ノルム 及び

1

ノルム)

行列

A

= (

A(I,J)

)

の無限大ノルムは,行列

ABS(A(I,J))

の行和の最大値であるので,

MAXVAL(SUM(ABS(A),DIM=2))

の値になる。

行列

A

= (

A(I,J)

)

1

ノルムは,行列

ABS(A(I,J))

の列和の最大値であるので,

MAXVAL(SUM(ABS(A),DIM=1))

の値になる。

C.12.7

論理問合せ

論理問合せ組込み関数は,表のデータについてのかなり複雑な質問に対して,ループ 及び 条件構文を使用しない

で答を求める。例として,学生のテスト成績表に対する質問の答を考える。学生数を

M

,科目数を

N

2

次元の成績

表を

T(M,N)

とする。表

T

は整数型行列であって,その要素は

0

100

の得点であるとする。

例題:

3

人の学生についての

4

科目の成績表

T

=


85

76

90

60

71

45

50

80

66

45

21

55


がある。

質問: それぞれの学生の最高得点は?

解答:

MAXVAL(T,DIM=2)

になる。例題では,

[ 90

,

80

,

66 ]

になる。

質問: 総得点の平均点は?

解答:

SUM(T)/SIZE(T)

になる。例題では,

62

になる。

質問: 表内で得点が平均点以上の件数は?

解答:

ABOVE=T > SUM(T)/SIZE(T); N=COUNT(ABOVE)

になる。例題では,

ABOVE

は論理型配列


t

t

t

.

t

.

.

t

t

.

.

.


t

は真,

.

は偽)になり,

COUNT(ABOVE)

6

になる。

質問: 平均点以上の中での最低点は何点か?

解答:

ABOVE

が上の論理型配列であるとして,

MINVAL(T,MASK=ABOVE)

になる。例題では,

66

になる。

質問: すべての得点が平均点以上の学生はいるか?

解答:

ABOVE

が上の論理型配列であるとして,

ANY(ALL(ABOVE,DIM=2))

の結果が真か偽かによって

はい

いえ

になる。例題では,

いいえ

になる。

C.12.8

並列計算

最も単純な並列処理は,多数の演算対象に対して同じことを同時にすることである。行列の加算は,並列処理の典

型的な例題である。配列代入文

A=B+C

は,同一の形状をもつ配列

B

及び

C

中の要素を並列に加算し,その和を配列

A

に並列に代入することを指定する。

行列加算の例で並列に行われる処理は,もちろん加算処理である。行列加算を並列処理として実現しているのは,

配列式を要素ごとに評価する機能である。

他の簡単な並列処理アルゴリズムについても,実現する手段として,要素ごとの計算が期待できる。

C.12.9

配列要素ごとの計算の例

同じ次数の多項式が多数あるときに,各式の係数を行列の行に配置し,その列に対してホーナー法を適用して評価

することができる。

次の

3

次多項式を評価する方法を,プログラム部分によって示す。

P

(

t

) = 1 + 2

t

3

t

2

+ 4

t

3

Q

(

t

) = 2

3

t

+ 4

t

2

5

t

3

R

(

t

) = 3 + 4

t

5

t

2

+ 6

t

3

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

425

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

C

3

式を同時に同じ点

t

=

X

について計算する。結果のベクトル

[

P

(

X

)

, Q

(

X

)

, R

(

X

) ]

を,実数型配列

RESULT(3)

代入する。

RESULT

を計算するプログラム部分は,次のただ一つの文になる。

RESULT = M(:,1) + X * ( M(:,2) + X * ( M(:,3) + X * M(:,4) ))

ここで,係数行列

M(3,4)

の値は


1

2

3

4

2

3

4

5

3

4

5

6


とする。

C.12.10

ビット操作手続 及び ビット問合せ関数

手続

IOR

IAND

NOT

IEOR

ISHFT

ISHFTC

IBITS

及び

IBCLR

は,アメリカ陸軍規格

MIL-STD 1753

で,

スカラの引数に対して定義されている。この規格では,配列の引数に対しても配列の結果を返すように拡張した。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

426

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

参考

構文規則

D.1

全構文規則の抽出

箇条

1

R101

XYZ

並び

is

XYZ

[

,

XYZ

] ...

R102

XYZ

is

名前

R103

スカラ

XYZ

is

XYZ

C101

(R103)

スカラ

XYZ

は,スカラでなければならない。

箇条

2

R201

プログラム

is

プログラム単位

[

プログラム単位

] ...

R202

プログラム単位

is

主プログラム

or

外部副プログラム

or

モジュール

or

初期値設定プログラム単位

R203

外部副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

R204

宣言部

is

[ USE

] ...

[ IMPORT

] ...

[

暗黙型宣言部

]

[

宣言構文

] ...

R205

暗黙型宣言部

is

[

暗黙型宣言部文

] ...

IMPLICIT

R206

暗黙型宣言部文

is

IMPLICIT

or

PARAMETER

or

FORMAT

or

ENTRY

R207

宣言構文

is

派生型定義

or

ENTRY

or

列挙体定義

or

FORMAT

or

引用仕様宣言

or

PARAMETER

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

427

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

手続宣言文

or

単純宣言文

or

型宣言文

or

文関数定義文

R208

実行部

is

実行構文

[

実行部構文

] ...

R209

実行部構文

is

実行構文

or

FORMAT

or

ENTRY

or

DATA

R210

内部副プログラム部

is

CONTAINS

内部副プログラム

[

内部副プログラム

] ...

R211

内部副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

R212

単純宣言文

is

参照許可宣言文

or

ALLOCATABLE

or

ASYNCHRONOUS

or

BIND

or

COMMON

or

DATA

or

DIMENSION

or

EQUIVALENCE

or

EXTERNAL

or

INTENT

or

INTRINSIC

or

NAMELIST

or

OPTIONAL

or

POINTER

or

PROTECTED

or

SAVE

or

TARGET

or

VOLATILE

or

VALUE

R213

実行構文

is

単純実行文

or

ASSOCIATE

構文

or

CASE

構文

or

DO

構文

or

FORALL

構文

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

428

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

IF

構文

or

SELECT TYPE

構文

or

WHERE

構文

R214

単純実行文

is

ALLOCATE

or

代入文

or

BACKSPACE

or

CALL

or

CLOSE

or

CONTINUE

or

CYCLE

or

DEALLOCATE

or

ENDFILE

or

END FUNCTION

or

END PROGRAM

or

END SUBROUTINE

or

EXIT

or

FLUSH

or

FORALL

or

GO TO

or

IF

or

INQUIRE

or

NULLIFY

or

OPEN

or

ポインタ代入文

or

PRINT

or

READ

or

RETURN

or

REWIND

or

STOP

or

WAIT

or

単純

WHERE

or

WRITE

or

算術

IF

or

計算形

GO TO

C201

(R208)

実行部は,

END FUNCTION

文,

END PROGRAM

文 及び

END SUBROUTINE

文を含んで

はならない。

R215

キーワード

is

名前

箇条

3

R301

文字

is

英数字下線

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

429

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

特殊文字

R302

英数字下線

is

英字

or

数字

or

下線

R303

下線

is

R304

名前

is

英字

[

英数字下線

] ...

C301

(R304)

名前の最大の長さは,

63

文字とする。

R305

定数

is

定数表現

or

名前付き定数

R306

定数表現

is

整定数表現

or

実定数表現

or

複素定数表現

or

論理定数表現

or

文字定数表現

or

10

進定数表現

R307

名前付き定数

is

名前

R308

整定数

is

定数

C302

(R308)

整定数は,整数型でなければならない。

R309

文字定数

is

定数

C303

(R309)

文字定数は,文字型でなければならない。

R310

組込み演算子

is

べき乗演算子

or

乗除演算子

or

加減演算子

or

連結演算子

or

関係演算子

or

否定演算子

or

論理積演算子

or

論理和演算子

or

論理等否演算子

R311

利用者定義演算子

is

利用者定義単項演算子

or

利用者定義

2

項演算子

or

拡張組込み演算子

R312

拡張組込み演算子

is

組込み演算子

R313

文番号

is

数字

[

数字

[

数字

[

数字

[

数字

] ] ] ]

C304

(R313)

文番号の少なくとも一つの数字は,

0

以外でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

430

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

箇条

4

R401

型指定子

is

組込み型指定子

or

派生型指定子

C401

(R401)

派生型指定子には,抽象型(

4.5.6

参照)を指定してはならない。

R402

型パラメタ値

is

スカラ整数式

or

*

or

:

C402

(R402)

種別型パラメタに対する型パラメタ値は,初期値式でなければならない。

C403

(R402)

型パラメタ値としての

:

は,

POINTER

属性 又は

ALLOCATABLE

属性をもつ要素 又は 成

分の宣言内でだけ使用できる。

R403

組込み型指定子

is

INTEGER

[

種別型パラメタ選択子

]

or

REAL

[

種別型パラメタ選択子

]

or

DOUBLE PRECISION

or

COMPLEX

[

種別型パラメタ選択子

]

or

CHARACTER

[

文字選択子

]

or

LOGICAL

[

種別型パラメタ選択子

]

R404

種別型パラメタ選択子

is

(

[

KIND =

]

スカラ整数初期値式

)

C404

(R404)

スカラ整数初期値式の値は,負であってはならず,処理系に存在する表現方法を指定しなければ

ならない。

R405

任意符号付き整定数表現

is

[

符号

]

整定数表現

R406

整定数表現

is

数字列

[

種別

]

R407

種別

is

数字列

or

スカラ整定数名

R408

任意符号付き数字列

is

[

符号

]

数字列

R409

数字列

is

数字

[

数字

] ...

R410

符号

is

+

or

-

C405

(R407)

スカラ整定数名は,整数型の名前付き定数でなければならない。

C406

(R407)

種別の値は,負であってはならない。

C407

(R407)

種別の値は,処理系に存在する表現方法を指定しなければならない。

R411

10

進定数表現

is

2

進定数表現

or

8

進定数表現

or

16

進定数表現

R412

2

進定数表現

is

B’

数字

[

数字

] ...

or

B"

数字

[

数字

] ...

"

C408

(R412)

数字は,

0

又は

1

のいずれかでなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

431

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R413

8

進定数表現

is

O’

数字

[

数字

] ...

or

O"

数字

[

数字

] ...

"

C409

(R413)

数字は,

0

7

のいずれかでなければならない。

R414

16

進定数表現

is

Z’

16

進数字

[ 16

進数字

] ...

or

Z"

16

進数字

[ 16

進数字

] ...

"

R415

16

進数字

is

数字

or

A

or

B

or

C

or

D

or

E

or

F

C410

(R411)

10

進定数表現は,

DATA

文の初期値定数として,数値組込み関数

DBLE

REAL

若しくは

INT

の仮引数

A

に結合する実引数として,又は 組込み関数

CMPLX

の仮引数

X

若しくは

Y

と結合する実引数と

してだけ書くことができる。

R416

任意符号付き実定数表現

is

[

符号

]

実定数表現

R417

実定数表現

is

有効数字部

[

指数部英字 指数部

] [

種別

]

or

数字列 指数部英字 指数部

[

種別

]

R418

有効数字部

is

数字列

.

[

数字列

]

or

.

数字列

R419

指数部英字

is

E

or

D

R420

指数部

is

任意符号付き数字列

C411

(R417)

種別 及び 指数部英字の両方の指定がある場合,指数部英字は

E

でなければならない。

C412

(R417)

種別の値は,処理系に存在する近似方法を指定しなければならない。

R421

複素定数表現

is

(

実部

,

虚部

)

R422

実部

is

任意符号付き整定数表現

or

任意符号付き実定数表現

or

名前付き定数

R423

虚部

is

任意符号付き整定数表現

or

任意符号付き実定数表現

or

名前付き定数

C413

(R421)

複素定数表現中のそれぞれの名前付き定数は,整数型 又は 実数型でなければならない。

R424

文字パラメタ選択子

is

文字長パラメタ選択子

or

( LEN =

型パラメタ値

, KIND =

スカラ整数初期値式

)

or

(

型パラメタ値

,

[

KIND =

]

スカラ整数初期値式

)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

432

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

( KIND =

スカラ整数初期値式

[

, LEN =

型パラメタ値

]

)

R425

文字長パラメタ選択子

is

(

[

LEN =

]

型パラメタ値

)

or

*

文字長

[

,

]

R426

文字長

is

(

型パラメタ値

)

or

スカラ整定数表現

C414

(R424)

スカラ整数初期値式の値は,非負とし,処理系のもつ表現方法を指定しなければならない。

C415

(R426)

スカラ整定数表現は,種別の指定を含んではならない。

C416

(R424 R425 R426)

型パラメタ値

*

は,次の用途の場合にだけ用いてよい。

(1)

仮引数を宣言する場合

(2)

名前付き定数を宣言する場合

(3)

ALLOCATE

文の型指定子中であって,それぞれの割付け実体が引継ぎ文字長をもつ文字型の仮

引数である場合

(3.5)

型保持文

(

8.1.5

)

の型指定子 又は 派生型指定子中にある場合

(4)

外部関数において,関数結果の文字長パラメタを宣言する場合

C417

関数名は,

その型が文字型であって,外部関数の結果の名前であるか 又は 仮引数の関数名である場合以外は,

型パラメタ値

*

で宣

言してはならない。

C418

関数名は,その関数が配列関数,ポインタ関数,再帰的関数 又は 純粋関数であるとき,型パラメタ値

*

で宣言してはならない。

C419

(R425)

文字長パラメタ選択子中の省略可能なコンマは,その宣言型指定子が型宣言文中にある場合にだけ指定してよい。

C420

(R425)

文字長パラメタ選択子中の省略可能なコンマは,型宣言文中に区切りの

2

連コロンがない場合にだけ指定してよい。

C421

(R424)

文字値文関数 又は 文字型の文関数仮引数に対して指定する長さは,初期値式でなければならない。

R427

文字定数表現

is

[

種別

_

]

[

表現可能文字

] ...

or

[

種別

_

]

"

[

表現可能文字

] ...

"

C422

(R427)

種別の値は,処理系に存在する表現方法を指定しなければならない。

R428

論理定数表現

is

.TRUE.

[

_

種別

]

or

.FALSE.

[

_

種別

]

C423

(R428)

種別の値は,処理系に存在する表現方法を指定しなければならない。

R429

派生型定義

is

TYPE

[

型パラメタ定義文

] ...

[

型定義属性宣言文

] ...

[

成分定義部

]

[

型束縛手続部

]

END TYPE

R430

TYPE

is

TYPE

[ [

,

型属性指定子並び

]

::

]

型名

[

(

型パラメタ名並び

)

]

R431

型属性指定子

is

参照許可指定子

or

EXTENDS (

親型名

)

or

ABSTRACT

or

BIND ( C )

C424

(R430)

派生型の型名は,

DOUBLEPRECISION

とも,この規格が規定するどの組込み型の名前とも同じで

あってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

433

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C425

(R430)

同じ型属性指定子は,一つの

TYPE

文中に

2

回以上書いてはならない。

C426

(R431)

親型名は,それ以前に定義されている拡張可能型

(

4.5.6

)

の名前でなければならない。

C427

(R429)

型定義が遅延束縛

(

4.5.4

)

を含むか 又は 継承

(

4.5.6.1

)

する場合は,

ABSTRACT

を指定しなけれ

ばならない。

C428

(R429)

ABSTRACT

を指定する場合は,その型は拡張可能でなければならない。

C429

(R429)

EXTENDS

を指定する場合は,

SEQUENCE

を指定してはならない。

R432

型定義属性宣言文

is

成分

PRIVATE

or

SEQUENCE

C430

(R429)

同じ型定義属性宣言文は,一つの派生型定義中に

2

回以上書いてはならない。

R433

END TYPE

is

END TYPE

[

型名

]

C431

(R433)

END TYPE

に続いて型名の指定を書く場合,その型名は対応する

TYPE

文の型名と同じでなけ

ればならない。

R434

SEQUENCE

is

SEQUENCE

C432

(R438)

SEQUENCE

を指定する場合は,それぞれのデータ成分は,組込み型であるか 又は 連続した派生

型でなければならない。

C433

(R429)

SEQUENCE

を指定する場合は,型束縛手続部を記述してはならない。

R435

型パラメタ定義文

is

INTEGER

[

種別型パラメタ選択子

]

,

型パラメタ属性指定子

::

型パラメタ宣言並び

R436

型パラメタ宣言

is

型パラメタ名

[

=

スカラ整数初期値式

]

C434

(R435)

派生型定義の型パラメタ定義文における型パラメタ名は,その派生型定義の

TYPE

文中の型パ

ラメタ名の一つでなければならない。

C435

(R435)

派生型定義の

TYPE

文内のそれぞれの型パラメタ名は,その派生型定義の型パラメタ定義文中

の型パラメタ名として現れなければならない。

R437

型パラメタ属性指定子

is

KIND

or

LEN

R438

成分定義部

is

[

成分定義文

] ...

R439

成分定義文

is

データ成分定義文

or

手続成分定義文

R440

データ成分定義文

is

宣言型指定子

[ [

,

成分属性指定子並び

]

::

]

成分宣言並び

R441

成分属性指定子

is

POINTER

or

DIMENSION (

成分配列形状指定

)

or

ALLOCATABLE

or

参照許可指定子

R442

成分宣言

is

成分名

[

(

成分配列形状指定

)

] [

*

文字長

] [

成分初期値指定

]

R443

成分配列形状指定

is

明示上下限並び

or

無指定上下限並び

R444

成分初期値指定

is

=

初期値式

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

434

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

=>

空初期化

C436

(R440)

同じ成分属性指定子は,一つの成分定義文中に

2

回以上書いてはならない。

C437

(R440)

キーワード

CLASS

(

5.1.1.2

)

で宣言する成分は,

ALLOCATABLE

属性 又は

POINTER

属性を

もっていなければならない。

C438

(R440)

成分に

POINTER

属性の指定がない場合,その成分定義文の宣言型指定子は,

CLASS(*)

であ

るか,又は 組込み型 若しくは それ以前に定義された派生型を指定しなければならない。

C439

(R440)

成分に

POINTER

属性の指定がある場合,その成分定義文の宣言型指定子は,

CLASS(*)

である

か,又は 組込み型 若しくは 任意の参照可能な派生型(その型自体を含む。)を指定しなければならない。

C440

(R440) POINTER

属性 又は

ALLOCATABLE

属性を指定する場合,成分配列形状指定は,無指定上下

限並びでなければならない。

C441

(R440) POINTER

属性の指定も

ALLOCATABLE

属性の指定もない場合,成分配列形状指定は,明示

上下限並びでなければならない。

C442

(R443)

明示上下限の上下限は,初期値式であるか,又は 宣言関数の引用 及び 名前付き定数(その部分

実体も含む。)以外のいかなる実体特定子の引用も含まない宣言式でなければならない。

C443

(R440)

成分に

ALLOCATABLE

属性と

POINTER

属性の両方を指定してはならない。

C444

(R442) “

*

文字長

は,型指定が文字型である場合にだけ指定してよい。

C445

(R439)

成分定義文の型パラメタ値は,コロンであるか,初期値式であるか,又は,宣言関数の引用も,

名前付き定数 及び その部分実体を除くいかなる実体特定子も含まない宣言式であるかのいずれかでなけ

ればならない。

C446

(R440)

成分初期値指定を書いたとき,その成分宣言並びの前の区切りの

2

連コロンを省略してはなら

ない

C447

(R440)

成分初期値指定に

=>

を書いたとき,実体は,

POINTER

属性をもたなければならない。初期

値指定に

=

を書いたとき,実体は,

POINTER

属性 又は

ALLOCATABLE

属性をもってはならない。

C447a

(R440)

成分初期値指定を書いたとき,成分のそれぞれの型パラメタ 及び 配列上下限は,初期値式で

なければならない。

R445

手続成分定義文

is

PROCEDURE (

[

手続引用仕様

]

),

手続成分属性指定子並び

::

手続宣言並び

R446

手続成分属性指定子

is

POINTER

or

PASS

[

(

引数名

)

]

or

NOPASS

or

参照許可宣言

C448

(R445)

同じ手続成分属性指定子は,一つの手続成分定義文中に

2

回以上書いてはならない。

C449

(R445)

手続成分属性指定子並びには,

POINTER

属性を書かなければならない。

C450

(R445)

手続ポインタ成分が,暗黙の引用仕様をもつか 又は 引数をもたない場合は,

NOPASS

を指定し

なければならない。

C451

(R445)

PASS(

引数名

)

を指定する場合は,引用仕様はその引数名を名前とする仮引数をもたなければな

らない。

C452

(R445)

同じ手続成分属性指定子並びに

PASS

及び

NOPASS

を同時に指定してはならない。

C453

当該実体仮引数は,ポインタでもなく割付け実体でもないスカラ仮データ実体でなければならず,その宣

言時の型は確定する型と同じでなければならない。すべての長さ型パラメタは,引き継がれる。確定する

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

435

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

型が拡張可能型(

4.5.6

参照)であるときに限り,多相的(

5.1.1.2

参照)でなければならない。

VALUE

属性をもってはならない。

R447

成分

PRIVATE

is

PRIVATE

C454

(R447)

成分

PRIVATE

文は,その型定義がモジュールの宣言部にある場合にだけ書くことができる。

R448

型束縛手続部

is

CONTAINS

[

束縛

PRIVATE

]

手続束縛文

[

手続束縛文

] ...

R449

束縛

PRIVATE

is

PRIVATE

C455

(R448)

束縛

PRIVATE

文は,型定義がモジュールの宣言部にあるときだけ書くことができる。

R450

手続束縛文

is

個別束縛

or

総称束縛

or

後始末束縛

R451

個別束縛

is

PROCEDURE

[

(

引用仕様名

)

] [ [

,

束縛属性並び

]

::

]

束縛名

[

=>

手続名

]

C456

(R451) “

=>

手続名

を書いたとき,区切りの

2

連コロンを省略してはならない。

C457

(R451) “

=>

手続名

を書いたとき,引用仕様名を書いてはならない。

C458

(R451)

手続名は,参照可能なモジュール手続名か 又は 明示的引用仕様をもった外部手続名でなければ

ならない。

R452

総称束縛

is

GENERIC

[

,

参照許可属性

]

::

総称指定

=>

束縛名並び

C459

(R452)

モジュールの宣言部内で,それぞれの総称束縛は,その派生型において同じ総称指定をもつ他の

すべての総称束縛と同じ参照許可属性を,明示的 又は 暗黙的に指定しなければならない。

C460

(R452)

束縛名並びの束縛名は,その型の個別束縛の名前でなければならない。

C461

(R452)

総称指定が総称名でないとき,それぞれの個別束縛は,当該実体仮引数

(

4.5.3.3

)

をもたなけれ

ばならない。

C462

(R452)

総称指定が

OPERATOR(

利用者定義演算子

)

であるとき,それぞれの束縛の引用仕様は

12.3.2.1.1

で示す指定方法に従っていなければならない。

C463

(R452)

総称指定が

ASSIGNMENT(=)

であるとき,それぞれの束縛の引用仕様は

12.3.2.1.2

で示す指定方

法に従っていなければならない。

C464

(R452)

総称指定が派生型入出力総称指定であるとき,それぞれ束縛の引用仕様は

9.5.3.7

で示す指定方

法に従っていなければならない。引数

dtv

9.5.3.7.2

参照)の型は,その派生型定義の型名でなければ

ならない。

R453

束縛属性

is

PASS

[

(

引数名

)

]

or

NOPASS

or

NON OVERRIDABLE

or

DEFERRED

or

参照許可指定子

C465

(R453)

同じ束縛属性は,一つの束縛属性並び中に

2

回以上書いてはならない。

C466

(R451)

束縛の引用仕様が定義している型の仮引数をもたないとき,

NOPASS

を書かなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

436

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C467

(R451)

PASS(

引数名

)

を書いたとき,束縛の引用仕様には,引数名をもった仮引数を書かなければなら

ない。

C468

(R453)

一つの束縛属性並びに

PASS

NOPASS

を同時に書いてはならない。

C469

(R453)

一つの束縛属性並びに

NON OVERRIDABLE

DEFERRED

を同時に書いてはならない。

C470

(R453)

引用仕様名を書いたときに限り

DEFERRED

を書かなければならない。

DEFERRED

を書いたときに

限り,引用仕様名を書かなければならない。

C471

(R451)

上書き束縛

(

4.5.6.2

)

は,上書きするものの束縛が遅延するときだけ,

DEFERRED

属性を指定

しなければならない。

C472

(R451) NON OVERRIDABLE

属性をもった継承束縛

(

4.5.6.1

)

を上書きしてはならない。

R454

後始末束縛

is

FINAL

[

::

]

後始末サブルーチン名並び

C473

(R454)

後始末サブルーチン名は,ちょうど一つの仮引数をもつモジュール手続の名前でなければなら

ない。その引数は,省略不可であり,定義しようとする派生型の,ポインタでもなく,割付け変数でもな

く,多相的でもない変数でなければならない。仮引数は,

INTENT(OUT)

であってはならない。

C474

(R454)

同じ型に対して,後始末サブルーチン名を

2

回以上指定してはならない。

C475

(R454)

同じ型に対して,同じ種別型パラメタ 及び 同じ次元数をもった仮引数をもつ後始末サブルーチ

ン名を

2

回以上指定してはならない。

R455

派生型指定子

is

型名

[

(

型パラメタ指定並び

)

]

R456

型パラメタ指定

is

[

キーワード

=

]

型パラメタ値

C476

(R455)

型名は,参照可能な派生型の名前でなければならない。

C477

(R455)

型パラメタ指定並びは,型がパラメタをもつときだけ書かなければならない。

C478

(R455)

その型の各パラメタに対応して,高々一つの型パラメタ指定が存在しなければならない。型パラ

メタが暗黙の値をもっていないとき,その型パラメタに対応する型パラメタ指定が存在しなければなら

ない。

C479

(R456)

型パラメタ指定並びの型パラメタ指定に先行する

キーワード

=

を省略するときだけ,型パラメ

タ指定から

キーワード

=

を省略できる。

C480

(R456)

キーワードは,その型のパラメタ名でなければならない。

C481

(R456)

仮引数 若しくは 結合名の宣言 又は 仮引数の割付けのいずれかのときだけ,型パラメタ指定の

型パラメタ値として

*

を使うことができる。

R457

構造体構成子

is

派生型指定子

(

[

成分指定並び

]

)

R458

成分指定

is

[

キーワード

=

]

成分データ源

R459

成分データ源

is

or

データ指示先

or

手続指示先

C482

(R457)

派生型指定子には,抽象型

(

4.5.6

)

を指定してはならない。

C483

(R457)

成分には,高々一つの成分指定を書くことができる。

C484

(R457)

成分が成分指定をもつとき,継承結合されたいかなる成分に対しても,成分指定を与えてはなら

ない。

C485

(R457)

成分は,暗黙の初期値設定をもたず,成分指定をもっているか暗黙の初期値設定をもっている他

の成分と継承結合していないとき,成分指定をもたなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

437

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C486

(R458)

その構成子中の先行する各成分指定から

キーワード

=

を省略するときだけ,成分指定から

キーワード

=

を省略できる。

C487

(R458)

キーワードは,その型の成分の名前でなければならない。

C488

(R457)

型名 及び 成分指定が書かれた型のすべての成分は,構造体構成子を含んでいる有効域内で参照

可能でなければならない。

C489

(R457)

派生型指定子が総称名と同じ型名であるとき,成分指定並びは,総称引用として解決される

(

12.4.4.1

)

関数引用の有効な実引数指定並びであってはならない。

C490

(R459)

データ指示先は,手続ポインタではないポインタ成分に対応しなければならない。手続指示先

は,手続ポインタである成分に対応しなければならない。

C491

(R459)

データ指示先は,対応する成分と同じ次元数でなければならない。

R460

列挙体定義

is

列挙体定義文

列挙子定義文

[

列挙子定義文

] ...

列挙体定義終了文

R461

列挙体定義文

is

ENUM , BIND ( C )

R462

列挙子定義文

is

ENUMERATOR

[

::

]

列挙子並び

R463

列挙子

is

名前付き定数

[

=

スカラ整数初期値式

]

R464

列挙体定義終了文

is

END ENUM

C492

(R462)

列挙子に

=

を書いたとき,列挙子並びの前に,区切りの

2

連コロンを書かなければならない。

R465

配列構成子

is

(/

配列構成子指定

/)

or

左角括弧 配列構成子 右角括弧

R466

配列構成子指定

is

型指定子

::

or

[

型指定子

::

]

配列構成項目並び

R467

左角括弧

is

[

R468

右角括弧

is

]

R469

配列構成項目

is

or

配列構成

DO

形反復

R470

配列構成

DO

形反復

is

(

配列構成項目並び

,

配列構成

DO

制御

)

R471

配列構成

DO

制御

is

配列構成

DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

R472

配列構成

DO

変数

is

スカラ整変数

C493

(R472)

配列構成

DO

変数は,名前付き変数でなければならない。

C494

(R466)

型指定子が省略されたとき,一つの配列構成子中の配列構成項目の式の型 及び 種別型パラメタ

は,すべて同じでなければならない。

C495

(R466)

型指定子が組込み型を指定するとき,一つの配列構成子中の配列構成項目の式の型は,

7.8

指定したとおりに型指定子の型の変数と型が適合する組込み型でなければならない。

C496

(R466)

型指定子が派生型を指定するとき,一つの配列構成子中の配列構成項目の式の型は,その派生型

であって,型指定子で指定した型と同じ種別型パラメタ値をもたなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

438

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C497

(R470)

配列構成

DO

形反復の配列構成

DO

変数に,その配列構成

DO

形反復に含まれる配列構成

DO

形反復の配列構成

DO

変数と同じ変数を指定してはならない。

箇条

5

R501

型宣言文

is

宣言型指定子

[ [

,

属性指定子

] ...

::

]

データ要素宣言並び

R502

宣言型指定子

is

組込み型指定子

or

TYPE (

派生型指定子

)

or

CLASS (

派生型指定子

)

or

CLASS (

*

)

C501

(R502)

宣言型指定子において,

:

及び

*

以外の型パラメタ値は,宣言式でなければならない。

C502

(R502) “

CLASS(

派生型指定子

)

の場合,その派生型指定子には,拡張可能型を指定しなければならない。

C503

(R502) “

TYPE(

派生型指定子

)

の場合,その派生型には,抽象型(

4.5.6

参照)を指定してはならない。

R503

属性指定子

is

参照許可指定子

or

ALLOCATABLE

or

ASYNCHRONOUS

or

DIMENSION (

配列形状指定

)

or

EXTERNAL

or

INTENT (

授受特性指定

)

or

INTRINSIC

or

言語束縛指定子

or

OPTIONAL

or

PARAMETER

or

POINTER

or

PROTECTED

or

SAVE

or

TARGET

or

VALUE

or

VOLATILE

R504

データ要素宣言

is

実体名

[

(

配列形状指定

)

] [

*

文字長

] [

初期値指定

]

or

関数名

[

*

文字長

]

C504

(R504)

データ要素宣言中に現れる

:

*

以外の文字長中の型パラメタ値は,宣言式でなければな

らない。

R505

実体名

is

名前

C505

(R505)

実体名は,データ実体の名前でなければならない。

R506

初期値指定

is

=

初期値式

or

=>

空初期化

R507

空初期化

is

関数引用

C506

(R507)

関数引用は,引数なしの組込み関数

NULL

の引用でなければならない。

C507

(R501)

同じ属性指定子を,一つの型宣言文中で

2

回以上指定してはならない。

C508

一つのデータ要素には,一つの有効域内で,どの属性も

2

回以上明示的に指定してはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

439

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C509

(R501)

CLASS

によって宣言された要素は,仮引数であるか,

ALLOCATABLE

属性 又は

POINTER

性をもっていなければならず,

VALUE

属性をもってはならない。

C510

(R501) POINTER

属性 又は

ALLOCATABLE

属性をもって宣言された配列は,無指定上下限並び

5.1.2.5.3

参照)の形の配列形状指定で指定しなければならない。

C511

(R501) ALLOCATABLE

属性 及び

POINTER

属性をもたない関数結果としての実体名に対する配列形

状指定は,明示上下限並びでなければならない。

C512

(R501) POINTER

属性を指定したとき,

ALLOCATABLE

属性,

TARGET

属性, 及び

INTRINSIC

属性は指定してはならない。

C513

(R501) TARGET

属性を指定したとき,

POINTER

属性,

EXTERNAL

属性,

INTRINSIC

属性 及び

PARAMETER

属性は指定してはならない。

C514

(R501) PARAMETER

属性は,仮引数,ポインタ,割付け要素,関数 及び 共通ブロック中の実体には

指定してはならない。

C515

(R501) INTENT

属性,

VALUE

属性 及び

OPTIONAL

属性は,仮引数に対してだけ指定してよい。

C516

(R501) INTENT

属性は,

POINTER

属性をもたない仮手続には指定してはならない。

C517

(R501) SAVE

属性は,共通ブロック中の個々の実体,仮引数,手続,関数結果,自動割付けデータ実体

及び

PARAMETER

属性をもつ実体には指定してはならない。

C518

一つのデータ要素は,

INTRINSIC

属性をもつとき,

EXTERNAL

属性をもつことはできない。

C519

(R501)

データ要素宣言並び中の関数以外のデータ要素には,

EXTERNAL

属性 及び

INTRINSIC

属性

を指定してはならない。

C520

(R504) “

*

文字長

は,型指定が文字型である場合にだけ指定してよい。

C521

(R504)

関数名は,外部関数,組込み関数,仮手続関数,手続ポインタ 又は

文関数

の名前でなければな

らない。

C522

(R501) PARAMETER

属性(

5.1.2.10

参照)があるときは,初期値指定を省略してはならない。

C523

(R501)

初期値指定を書いたとき,そのデータ要素宣言並びの前の区切りの

2

連コロンを省略してはなら

ない。

C524

(R504)

初期値指定は,実体名が仮引数,関数結果,型宣言が初期値設定プログラム単位以外にある名前

付き共通ブロック中の実体,無名共通ブロック中の実体,割付け変数,外部名,組込み名 又は 自動割付

け実体のいずれかであるならば,指定してはならない。

C525

(R504)

初期値指定に

=>

を書いたとき,実体は,

POINTER

属性をもたなければならない。初期値指

定に

=

を書いたとき,実体は,

POINTER

属性をもってはならない。

C526

(R501) VOLATILE

属性を指定したとき,

PARAMETER

属性,

INTRINSIC

属性,

EXTERNAL

属性,

及び

INTENT(IN)

属性は,指定してはならない。

C527

(R501) VALUE

属性を指定したとき,

PARAMETER

属性,

EXTERNAL

属性,

POINTER

属性,

ALLO-

CATABLE

属性,

DIMENSION

属性,

VOLATILE

属性,

INTENT(INOUT)

属性 及び

INTENT(OUT)

属性は,指定してはならない。

C528

(R501) VALUE

属性を指定したとき,長さ型パラメタ値は,省略するか,初期値式で指定しなければな

らない。

C529

(R501) VALUE

属性は,仮手続に対して指定してはならない。

C530

(R501) ALLOCATABLE

属性,

POINTER

属性 及び

OPTIONAL

属性は,手続言語束縛指定子をもつ

手続の仮引数に対して指定してはならない。

C531

(R503)

言語束縛指定子は,モジュールの宣言部にだけ書くことができる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

440

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C532

(R501)

言語束縛指定子で宣言された要素は,相互利用可能変数(

15.2

参照)でなければならない。

C533

(R501)

言語束縛指定子が

NAME

指定子とともに指定された場合,データ要素宣言並びはただ一つの

データ要素宣言でなければならない。

C534

(R503) PROTECTED

属性は,モジュールの宣言部にだけ書くことができる。

C535

(R501) PROTECTED

属性は,共通ブロック中にない手続ポインタ 又は 名前付き変数に対してだけ指

定できる。

C536

(R501) PROTECTED

属性を指定したとき,

INTRINSIC

属性 及び

PARAMETER

属性は,指定して

はならない。

PROTECTED

属性と

EXTERNAL

属性を同時に指定するときは,

POINTER

属性も指定

しなければならない。

C537

PROTECTED

属性をもつポインタでない実体が参照結合で参照された場合,その実体は,変数定義文

脈(

16.5.7

参照) 及び ポインタ代入文中のデータ指示先 又は 手続指示先に現れてはならない。

C538

PROTECTED

属性をもつポインタである実体が参照結合で参照された場合,それは,次のいずれにも

現れてはならない。

(1)

NULLIFY

文中のポインタ実体

(2)

ポインタ代入文中のデータポインタ実体 又は 手続ポインタ実体

(3)

ALLOCATE

文中 又は

DEALLOCATE

文中の割付け実体

(4)

仮引数に

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもつポインタがあるような手続

を引用するとき,その仮引数に結合する実引数

R508

参照許可指定子

is

PUBLIC

or

PRIVATE

C539

(R508)

参照許可指定子は,モジュールの宣言部にだけ書くことができる。

R509

言語束縛指定子

is

BIND ( C

[

, NAME

=

スカラ文字初期値式

]

)

C540

(R509)

スカラ文字初期値式は,基本文字型の種別をもたなければならない。

R510

配列形状指定

is

明示上下限並び

or

引継ぎ上下限並び

or

無指定上下限並び

or

大きさ引継ぎ配列形状指定

C541

(R510)

次元数は,最大

7

次元とする。

R511

明示上下限

is

[

下限

:

]

上限

R512

下限

is

宣言式

R513

上限

is

宣言式

C542

(R511)

上下限が初期値式でない形状明示配列は,副プログラム 又は 引用仕様本体の中でだけ宣言で

きる。

R514

引継ぎ上下限

is

[

下限

]

:

R515

無指定上下限

is

:

R516

大きさ引継ぎ配列形状指定

is

[

明示上下限並び

,

] [

下限

:

]

*

C543

大きさ引継ぎ配列形状指定は,仮引数の配列上下限の宣言以外に現れてはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

441

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C544

INTENT(OUT)

属性をもつ大きさ引継ぎ配列は,多相的であってはならず,後始末可能な型,割付け可

能な末端成分をもつ型,及び 暗黙的初期値指定が指定された型であってはならない。

R517

授受特性指定

is

IN

or

OUT

or

INOUT

C545

(R517) INTENT(IN)

属性をもつポインタでない実体は,変数確定文脈(

16.5.7

参照)に現れてはなら

ない。

C546

(R517) INTENT(IN)

属性をもつポインタ実体は,次の箇所に現れてはならない。

(1)

NULLIFY

文中のポインタ実体

(2)

ポインタ代入文中のデータポインタ実体 又は 手続ポインタ実体

(3)

ALLOCATE

文 又は

DEALLOCATE

文中の割付け実体

(4)

仮引数に

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもつポインタがあるような手続を

引用するとき,その仮引数に結合する実引数

C547

(R503)(R1216)

総称組込み手続の名前が明示的に

INTRINSIC

属性をもつと宣言され,更にそれが,同

一の有効域内で参照可能な一つ以上の総称引用仕様

(

12.3.2.1

)

の総称名でもあるとき,引用仕様内の手

続 及び 個別名をもつ組込み手続は,すべて関数 又は すべてサブルーチンでなければならない。個別名

である組込み手続と引用仕様内の手続は,

16.2.3

のとおり特性が異なる。

R518

参照許可宣言文

is

参照許可指定子

[ [

::

]

参照対象並び

]

R519

参照対象

is

参照対象名

or

総称指定

C548

(R518)

参照許可宣言文は,モジュールの宣言部にだけ書くことができる。参照対象並びを省略した参照

許可宣言文は,一つのモジュールの宣言部内に高々一つ指定できる。

C549

(R519)

それぞれの参照対象名は,名前付き変数,手続,派生型,名前付き定数 又は 変数群の名前でな

ければならない。

R520

ALLOCATABLE

is

ALLOCATABLE

[

::

]

実体名

[

(

無指定上下限並び

)

]

[

,

実体名

[

(

無指定上下限並び

)

] ] ...

R521

ASYNCHRONOUS

is

ASYNCHRONOUS

[

::

]

実体名並び

R522

BIND

is

言語束縛指定子

[

::

]

束縛要素並び

R523

束縛要素

is

要素名

or

/

共通ブロック名

/

C550

(R522) BIND

文中の束縛要素に要素名が含まれる場合,その

BIND

文は,モジュールの宣言部に現れな

ければならず,その要素は相互利用可能変数でなければならない(

15.2.4

及び

15.2.5

参照)。

C551

(R522)

言語束縛指定子が

NAME

指定子である場合,束縛要素並び中の要素は,

1

個だけとする。

C552

(R522)

束縛要素が共通ブロックである場合,その中の各変数は,相互利用可能でなければならない

15.2.4

及び

15.2.5

参照)。

R524

DATA

is

DATA

初期化対応

[ [

,

]

初期化対応

] ...

R525

初期化対応

is

初期化項目並び

/

初期値表現並び

/

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

442

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R526

初期化項目

is

変数

or

初期化

DO

形反復

R527

初期化

DO

形反復

is

(

初期化

DO

形項目並び

,

初期化

DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

)

R528

初期化

DO

形項目

is

配列要素

or

スカラ構造体成分

or

初期化

DO

形反復

R529

初期化

DO

変数

is

スカラ整変数

C553

(R526)

初期化項目である変数において,添字,部分配列添字,部分列開始位置 及び 部分列終了位置は,

初期値式でなければならない。

C554

(R526)

初期化項目並び中 又は 初期化

DO

形項目並び中に特定子を書いた変数は,仮引数,参照結合 若

しくは 親子結合によって参照可能な変数,

DATA

文が初期値設定プログラム単位以外にある名前付き共

通ブロックの変数,無名共通ブロックの変数,関数名,関数結果名,自動割付け実体 又は 割付け変数で

あってはならない。

C555

(R526)

初期化項目として書く初期化

DO

形項目 又は 変数は,ポインタ実体の実体特定子であってはな

らない。

C556

(R529)

初期化

DO

変数は,名前付き変数でなければならない。

C557

(R527)

初期化

DO

形反復のスカラ整数式は,定数,部分定数 及び 外側を囲む初期化

DO

形反復の

DO

変数だけを一次子とする式でなければならない。各演算は,組込みでなければならない。

C558

(R528)

配列要素は,変数でなければならない。

C559

(R528)

スカラ構造体成分は,変数でなければならない。

C560

(R528)

スカラ構造体成分は,添字並びをもつ部分参照を少なくとも一つ含まなければならない。

C561

初期化

DO

形項目である配列要素 又は スカラ構造体成分において,各添字は,定数,部分定数 又は そ

の初期化

DO

形反復 若しくは 外側を囲む初期化

DO

形反復の

DO

変数だけを一次子とする式でなけれ

ばならない。各演算は,組込みでなければならない。

R530

初期値表現

is

[

初期値反復数

*

]

初期値定数

R531

初期値反復数

is

スカラ整定数

or

スカラ整部分定数

C562

(R531)

初期値反復数は,正 又は ゼロでなければならない。初期値反復数が名前付き定数であるとき,

それは,同じ有効域内で前もって宣言されているか,又は 参照結合 若しくは 親子結合によって参照可

能になっていなければならない。

R532

初期値定数

is

スカラ定数

or

スカラ部分定数

or

任意符号付き整定数表現

or

任意符号付き実定数表現

or

空初期化

or

構造体構成子

C563

(R532) DATA

文中の定数値が名前付き定数 又は 構造体構成子であるとき,名前付き定数 及び 派生型

は,その有効域内で既に宣言されているか参照結合 又は 親子結合で参照できなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

443

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C564

(R532)

初期値定数が構造体構成子であるとき,各成分は,初期値式でなければならない。

R533

整部分定数

is

部分定数

C565

(R533)

整部分定数は,整数型でなければならない。

R534

部分定数

is

特定子

C566

(R534)

部分定数は,定数の部分実体でなければならない。

C567

(R534)

すべての添字,部分列開始位置 及び 部分列終了位置は,初期値式でなければならない。

R535

DIMENSION

is

DIMENSION

[

::

]

配列名

(

配列形状指定

)

[

,

配列名

(

配列形状指定

)

] ...

R536

INTENT

is

INTENT (

授受特性指定

)

[

::

]

仮引数名並び

R537

OPTIONAL

is

OPTIONAL

[

::

]

仮引数名並び

R538

PARAMETER

is

PARAMETER (

名前付き定数定義並び

)

R539

名前付き定数定義

is

名前付き定数

=

初期値式

R540

POINTER

is

POINTER

[

::

]

ポインタ宣言並び

R541

ポインタ宣言

is

実体名

[

(

無指定上下限並び

)

]

or

手続要素名

C568

(R541)

手続要素名には,

EXTERNAL

属性

(

5.1.2.6

)

を明示的に指定しなければならない。

R542

PROTECTED

is

PROTECTED

[

::

]

要素名並び

R543

SAVE

is

SAVE

[ [

::

]

保存要素並び

]

R544

保存要素

is

実体名

or

手続ポインタ名

or

/

共通ブロック名

/

R545

手続ポインタ

is

名前

C569

(R545)

手続ポインタ名は,手続ポインタの名前でなければならない。

C570

(R543)

保存要素並びを省略した

SAVE

文が有効域内にあるとき,同じ有効域内に,ほかに明示的な

SAVE

属性 又は

SAVE

文があってはならない。

R546

TARGET

is

TARGET

[

::

]

実体名

[

(

配列形状指定

)

]

[

,

実体名

[

(

配列形状指定

)

] ] ...

R547

VALUE

is

VALUE

[

::

]

仮引数名並び

R548

VOLATILE

is

VOLATILE

[

::

]

実体名並び

R549

IMPLICIT

is

IMPLICIT

暗黙型宣言並び

or

IMPLICIT NONE

R550

暗黙型宣言

is

宣言型指定子

(

英字範囲並び

)

R551

英字範囲

is

英字

[

-

英字

]

C571

(R549)

ある有効域内で

IMPLICIT NONE

を指定するときには,どの

PARAMETER

文よりも前に指定し

なければならず,その有効域内に他の

IMPLICIT

文を書いてはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

444

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C572

(R551) “

-

2

番目の英字を書くとき,

2

番目の英字は

1

番目の英字より

ABC

順で後になければなら

ない。

R552

NAMELIST

is

NAMELIST /

変数群名

/

変数群要素並び

[ [

,

]

/

変数群名

/

変数群要素並び

] ...

C573

(R552)

変数群名は,参照結合によって参照可能になった名前であってはならない。

R553

変数群要素

is

変数名

C574

(R553)

変数群要素は,大きさ引継ぎ配列であってはならない。

C575

(R552)

変数群名が

PUBLIC

属性をもつとき,変数群要素並びの各項目は,

PRIVATE

属性をもっては

ならない。

R554

EQUIVALENCE

is

EQUIVALENCE

結合対応並び

R555

結合対応

is

(

結合実体

,

結合実体並び

)

R556

結合実体

is

変数名

or

配列要素

or

部分列

C576

(R556)

結合実体は,仮引数,ポインタ,割付け変数,割付け末端成分をもつ派生型の実体,不連続派生

型の実体,成分選択のどの水準かにポインタをもつ派生型の実体,自動割付け実体,関数名,入口名,結

果名,

BIND

属性をもつ変数,共通ブロック内にあって

BIND

属性をもつ変数 又は 名前付き定数を基底

実体とする特定子であってはならない。

C577

(R556)

結合実体は,二つ以上の部分参照をもつ特定子であってはならない。

C578

(R556)

結合実体は,

TARGET

属性をもってはならない。

C579

(R556)

結合実体の添字 及び 文字部分列式は,整数初期値式(

7.1.7

参照)でなければならない。

C580

(R555)

結合実体の一つが基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 又は 数

値連続型であるとき,結合対応中の実体はすべてこれらの型でなければならない。

C581

(R555)

結合実体の一つが基本文字型 又は 文字連続型であるとき,結合対応中の実体はすべてこれらの

型でなければならない。

C582

(R555)

結合実体の一つが数値連続型でも文字連続型でもない連続した派生型であるとき,結合対応中の

実体はすべてこれと同じ型パラメタ値をもった同じ型でなければならない。

C583

(R555)

結合実体の一つが基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 及び 基

本文字型を除いた組込み型であるとき,結合対応の実体はすべてこれと同じ種別パラメタ値をもった同じ

型でなければならない。

C584

(R556)

結合実体の一つが

PROTECTED

属性をもっている場合,その結合対応中のすべての実体も

PROTECTED

属性をもっていなければならない。

C585

(R556)

結合実体の名前は,参照結合によって参照可能になった名前であってはならない。

C586

(R556)

部分列は,長さゼロであってはならない。

R557

COMMON

is

COMMON

[

/

[

共通ブロック名

]

/

]

共通ブロック実体並び

[ [

,

]

/

[

共通ブロック名

]

/

共通ブロック実体並び

] ...

R558

共通ブロック実体

is

変数名

[

(

明示上下限並び

)

]

or

手続ポインタ名

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

445

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C587

(R558)

一つの変数名 又は 手続ポインタ名は,一つの有効域内のすべての共通ブロック実体並びを通じ

1

回だけ書くことができる。

C588

(R558)

共通ブロック実体として,仮引数,割付け変数,割付け可能な末端成分をもつ派生型の実体,自

動割付け実体,関数名,入口名,

BIND

属性をもつ変数 又は 結果名を指定してはならない。

C589

(R558)

共通ブロック実体に指定する派生型実体は,暗黙的初期値指定なしの連続型(

4.5.1

参照)又は

BIND

属性をもつ型でなければならない。

C590

(R558)

変数名 及び 手続ポインタ名は,参照結合によって参照可能になった名前であってはならない。

箇条

6

R601

変数

is

特定子

C601

(R601)

特定子は,定数 又は その部分実体であってはならない。

R602

変数名

is

名前

C602

(R602)

変数名は,変数の名前でなければならない。

R603

特定子

is

実体名

or

配列要素

or

部分配列

or

構造体成分

or

部分列

R604

論理変数

is

変数

C603

(R604)

論理変数は,論理型でなければならない。

R605

基本論理変数

is

変数

C604

(R605)

基本論理変数は,基本論理型でなければならない。

R606

文字変数

is

変数

C605

(R606)

文字変数は,文字型でなければならない。

R607

基本文字変数

is

変数

C606

(R607)

基本文字変数は,基本文字型でなければならない。

R608

整変数

is

変数

C607

(R608)

整変数は,整数型でなければならない。

R609

部分列

is

親列

(

部分列範囲

)

R610

親列

is

スカラ変数名

or

配列要素

or

スカラ構造体成分

or

スカラ定数

R611

部分列範囲

is

[

スカラ整数式

]

:

[

スカラ整数式

]

C608

(R610)

親列は,文字型でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

446

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R612

データ参照

is

部分参照

[

%

部分参照

] ...

R613

部分参照

is

部分名

[

(

部分配列添字並び

)

]

C609

(R612)

部分名は,右端のものを除いては,派生型でなければならない。

C610

(R612)

部分名は,左端のものを除いては,直前の部分名の宣言時の型の成分の名前でなければならない。

C611

(R612)

右端の部分名が抽象型である場合,データ参照は多相的でなければならない。

C612

(R612)

左端の部分名は,データ実体の名前でなければならない。

C613

(R613)

部分参照に部分配列添字並びの指定のある場合,部分配列添字の個数は部分名の次元数と等しく

なければならない。

C614

(R612)

ゼロでない次元数の部分参照は,一つのデータ参照中に二つ以上あってはならない。ゼロでない

次元数の部分参照より右にある部分名は,

ALLOCATABLE

属性 及び

POINTER

属性をもっていてはな

らない。

R614

構造体成分

is

データ参照

C615

(R614)

構造体成分中には,部分参照が二つ以上なければならない。構造体成分中の右端の部分参照は,

部分配列添字並びの指定がない部分参照でなければならない。

R615

型パラメタ問合せ

is

特定子

%

型パラメタ名

C616

(R615)

型パラメタ名は特定子によって特定される実体の宣言時の型の型パラメタ名でなければならない。

R616

配列要素

is

データ参照

C617

(R616)

すべての部分参照の次元数は,ゼロでなければならない。最後の部分参照は,添字並びをもたな

ければならない。

R617

部分配列

is

データ参照

[

(

部分列範囲

)

]

C618

(R617)

部分配列中には,ゼロでない次元数の部分参照がちょうど一つなければならず,最後の部分参照

がゼロでない次元数の部分配列添字並びをもつか 又は 他の部分参照がゼロでない次元数をもつかのいず

れかでなければならない。

C619

(R617)

部分列範囲をもつ部分配列の最も右にある部分名は,文字型でなければならない。

R618

添字

is

スカラ整数式

R619

部分配列添字

is

添字

or

添字三つ組

or

ベクトル添字

R620

添字三つ組

is

[

添字

]

:

[

添字

] [

:

刻み幅

]

R621

刻み幅

is

スカラ整数式

R622

ベクトル添字

is

整数式

C620

(R622)

ベクトル添字は,

1

次元の整数配列式でなければならない。

C621

(R620)

大きさ引継ぎ配列の最後の次元の添字三つ組の

2

番目の添字を省略してはならない。

R623

ALLOCATE

is

ALLOCATE (

[

型指定子

::

]

割付け指定並び

[

,

割付け指定選択子列

]

)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

447

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R624

割付け指定選択子

is

STAT =

状態変数

   

or

ERRMSG =

誤り通報変数

or

SOURCE =

初期値指定式

R625

状態変数

is

スカラ整変数

R626

誤り通報変数

is

スカラ基本文字変数

R627

初期値指定式

is

R628

割付け指定

is

割付け実体

[

(

割付け上下限並び

)

]

R629

割付け実体

is

変数名

or

構造体成分

R630

割付け上下限

is

[

割付け下限

:

]

割付け上限

R631

割付け下限

is

スカラ整数式

R632

割付け上限

is

スカラ整数式

C622

(R629)

それぞれの割付け実体は,手続を指していないポインタ 又は 割付け変数でなければならない。

C623

(R623)

文中で割付け実体が無指定型パラメタをもつ場合,型指定子 又は

SOURCE

指定子が現れなけ

ればならない。

C624

(R623)

型指定子がある場合,その指定する型は,それぞれの割付け実体と型が適合していなければなら

ない。

C625

(R623)

割付け実体が無制限多相的 又は 抽象型である場合,型指定子 又は

SOURCE

指定子が現れなけ

ればならない。

C626

(R623)

それぞれの割付け実体の対応する型パラメタが引き継がれる仮引数である場合に限り,型指定子

中の型パラメタ値は

*

でなければならない。

C627

(R623)

型指定子がある場合,それぞれの割付け実体の種別型パラメタ値は,その型指定子で対応する型

パラメタ値と同じでなければならない。

C628

(R628)

割付け実体が配列の場合に限り,割付け上下限並びを指定しなければならない。

C629

(R628)

割付け上下限並び中の割付け上下限の個数は,割付け実体の次元数と同じでなければならない。

C630

(R624)

一つの割付け選択子並び中に,同じ割付け選択子を複数回指定してはならない。

C631

(R623) SOURCE

指定子がある場合,型指定子があってはならない。また,割付け並び中の割付け実体

は一つだけでなければならず,かつ 初期値指定式と型が適合(

5.1.1.2

参照)していなければならない。

C632

(R623)

初期値指定式は,スカラ 又は 割付け実体と同じ次元数をもつものでなければならない。

C633

(R623)

対応する割付け実体と初期値指定式の種別型パラメタは,同じ値でなければならない。

R633

NULLIFY

is

NULLIFY (

ポインタ実体並び

)

R634

ポインタ実体

is

変数名

or

構造体成分

or

手続ポインタ名

C634

(R634)

ポインタ実体は,

POINTER

属性をもたなければならない。

R635

DEALLOCATE

is

DEALLOCATE (

割付け実体並び

[

,

解放指定選択子並び

]

)

C635

(R635)

それぞれの割付け実体は,手続を指していないポインタ 又は 割付け変数でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

448

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R636

解放指定選択子

is

STAT =

状態変数

   

or

ERRMSG =

誤り通報変数

C636

(R636)

一つの解放指定選択子並びに,同じ解放指定選択子が二つ以上現れてはならない。

箇条

7

R701

一次子

is

定数

or

特定子

or

配列構成子

or

構造体構成子

or

関数引用

or

型パラメタ問合せ

or

型パラメタ名

or

(

)

C701

(R701)

型パラメタ名は,型パラメタの名前でなければならない。

C702

(R701)

特定子は,大きさ引継ぎの全体配列であってはならない。

R702

単項段階式

is

[

利用者定義単項演算子

]

一次子

R703

利用者定義単項演算子

is

.

英字

[

英字

] ...

.

C703

(R703)

利用者定義単項演算子の英字は,

63

文字を超えてはならず,どの組込み演算子 又は 論理定数表

現とも同じであってはならない。

R704

乗除演算対象

is

単項段階式

[

べき乗演算子 乗除演算対象

]

R705

加減演算対象

is

[

加減演算対象 乗除演算子

]

乗除演算対象

R706

数値段階式

is

[ [

数値段階式

]

加減演算子

]

加減演算対象

R707

べき乗演算子

is

**

R708

乗除演算子

is

*

or

/

R709

加減演算子

is

+

or

-

R710

文字段階式

is

[

文字段階式 連結演算子

]

数値段階式

R711

連結演算子

is

//

R712

関係段階式

is

[

文字段階式 関係演算子

]

文字段階式

R713

関係演算子

is

.EQ.

or

.NE.

or

.LT.

or

.LE.

or

.GT.

or

.GE.

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

449

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

==

or

/=

or

<

or

<=

or

>

or

>=

R714

論理積演算対象

is

[

否定演算子

]

関係段階式

R715

論理和演算対象

is

[

論理和演算対象 論理積演算子

]

論理積演算対象

R716

論理等否演算対象

is

[

論理等否演算対象 論理和演算子

]

論理和演算対象

R717

論理段階式

is

[

論理段階式 論理等否演算子

]

論理等否演算対象

R718

否定演算子

is

.NOT.

R719

論理積演算子

is

.AND.

R720

論理和演算子

is

.OR.

R721

論理等否演算子

is

.EQV.

or

.NEQV.

R722

is

[

式 利用者定義

2

項演算子

]

論理段階式

R723

利用者定義

2

項演算子

is

.

英字

[

英字

] ...

.

C704

(R723)

利用者定義

2

項演算子の英字は,

63

文字を超えてはならず,どの組込み演算子 又は 論理定数表

現とも同じであってはならない。

R724

論理式

is

C705

(R724)

論理式は,論理型でなければならない。

R725

文字式

is

C706

(R725)

文字式は,文字型でなければならない。

R726

基本文字式

is

C707

(R726)

基本文字式は,基本文字型でなければならない。

R727

整数式

is

C708

(R727)

整数式は,整数型でなければならない。

R728

数値式

is

C709

(R728)

数値式は,整数型,実数型 又は 複素数型でなければならない。

R729

宣言式

is

スカラ整数式

C710

(R729)

スカラ整数式は,制限式でなければならない。

R730

初期値式

is

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

450

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C711

(R730)

初期値式は,上に定めた初期値式の制限に従わなければならない。

R731

文字初期値式

is

文字式

C712

(R731)

文字初期値式は,初期値式でなければならない。

R732

整数初期値式

is

整数式

C713

(R732)

整数初期値式は,初期値式でなければならない。

R733

論理初期値式

is

論理式

C714

(R733)

論理初期値式は,初期値式でなければならない。

R734

代入文

is

変数

=

C715

(R734)

代入文の変数は,大きさ引継ぎの全体配列であってはならない。

R735

ポインタ代入文

is

データポインタ実体

[

(

上下限指定並び

)

]

=>

データ指示先指定

or

データポインタ実体

[

(

上下限再配置並び

)

]

=>

データ指示先指定

or

手続ポインタ実体

=>

手続指示先

R736

データポインタ実体

is

変数名

or

スカラ変数

%

データポインタ成分名

C716

(R735)

データ指示先が無制限多相的ではないとき,データポインタ実体は,データ指示先と型が適合

(

5.1.1.2

)

していなければならず,かつ 対応する種別型パラメタは等しくなければならない。

C717

(R735)

データ指示先が無制限多相的であるとき,データポインタ実体は,無制限多相的であるか,連続

派生型であるか 又は

BIND

属性をもつ型でなければならない。

C718

(R735)

上下限指定並びが宣言されているとき,上下限指定の個数は,データポインタ実体の次元数と一

致しなければならない。

C719

(R735)

上下限再配置並びが宣言されているとき,その個数はデータポインタ実体の次元数と一致しなけ

ればならない。

C720

(R735)

上下限再配置並びが宣言されているとき,データ指示先の次元数は

1

でなければならない。宣言

されていなければ,データポインタ実体とデータ指示先の次元数は同じでなければならない。

C721

(R736)

変数名は,

POINTER

属性をもたなければならない。

C722

(R736)

データポインタ成分名は,データポインタであるスカラ変数の成分の名前でなければならない。

R737

上下限指定

is

下限式

:

R738

上下限再配置

is

下限式

:

上限式

R739

データ指示先

is

変数

or

C723

(R739)

変数は

TARGET

属性 又は

POINTER

属性をもたなければならず,ベクトル添字をもつ部分配

列であってはならない。

C724

(R739)

式は,結果がデータポインタである関数の引用でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

451

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R740

手続ポインタ実体

is

手続ポインタ名

or

手続成分参照

R741

手続成分参照

is

スカラ変数

%

手続成分名

C725

(R741)

手続成分名は,スカラ変数が宣言時の型の手続ポインタ成分の名前でなければならない。

R742

手続指示先

is

or

手続名

or

手続成分参照

C726

(R742)

式は,結果が手続ポインタである関数の引用でなければならない。

C727

(R742)

手続名は,外部手続名,モジュール手続名,仮手続名,

13.6

において

印の付いていない個別

組込み関数名 又は 手続ポインタ名でなければならない。

C728

(R742)

手続指示先は,組込みでない要素別処理手続であってはならない。

R743

単純

WHERE

is

WHERE (

選別式

)

WHERE

代入文

R744

WHERE

構文

is

構造

WHERE

[ WHERE

本体構文

] ...

[

選別

ELSEWHERE

[ WHERE

本体構文

] ... ] ...

[ ELSEWHERE

[ WHERE

本体構文

] ... ]

END WHERE

R745

構造

WHERE

is

[ WHERE

構文名

:

]

WHERE (

選別式

)

R746

WHERE

本体構文

is

WHERE

代入文

or

単純

WHERE

or

WHERE

構文

R747

WHERE

代入文

is

代入文

R748

選別式

is

論理式

R749

選別

ELSEWHERE

is

ELSEWHERE (

選別式

)

[ WHERE

構文名

]

R750

ELSEWHERE

is

ELSEWHERE

[ WHERE

構文名

]

R751

END WHERE

is

END WHERE

[ WHERE

構文名

]

C729

(R747) WHERE

代入文が利用者定義代入文であるとき,その代入文は要素別処理でなければならない。

C730

(R744)

構造

WHERE

文に

WHERE

構文名を指定する場合は,対応する

END WHERE

文にも同じ

WHERE

構文名を指定しなければならない。構造

WHERE

文に

WHERE

構文名を指定しない場合は,対

応する

END WHERE

文に

WHERE

構文名を指定してはならない。

ELSEWHERE

文 又は 選別

ELSE-

WHERE

文に

WHERE

構文名を指定する場合は,対応する構造

WHERE

文にも同じ

WHERE

構文名を

指定しなければならない。

C731

(R746) WHERE

本体構文の一部である文は,飛び先文であってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

452

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R752

FORALL

構文

is

構造

FORALL

[ FORALL

本体構文

] ...

END FORALL

R753

構造

FORALL

is

[ FORALL

構文名

:

]

FORALL

FORALL

制御

R754

FORALL

制御

is

(

FORALL

三つ組指定並び

[,

スカラ選別式

] )

R755

FORALL

三つ組指定

is

指標変数名

=

添字

:

添字

[ :

刻み幅

]

R756

FORALL

本体構文

is

FORALL

代入文

or

単純

WHERE

or

WHERE

構文

or

FORALL

構文

or

単純

FORALL

R757

FORALL

代入文

is

代入文

or

ポインタ代入文

R758

END FORALL

is

END FORALL

[ FORALL

構文名

]

C732

(R758)

構造

FORALL

文に

FORALL

構文名を指定する場合は,対応する

END FORALL

文にも,同じ

FORALL

構文名を指定しなければならない。構造

FORALL

文に

FORALL

構文名を指定しない場合は,

対応する

END FORALL

文に

FORALL

構文名を指定してはならない。

C733

(R754)

スカラ選別式は,論理型のスカラでなければならない。

C734

(R754)

スカラ選別式の中で引用する手続(利用者定義演算によって引用する手続を含む。)は,純粋手

続(

12.6

)でなければならない。

C735

(R755)

指標変数名は,整数型の名前付きスカラ変数でなければならない。

C736

(R755) FORALL

三つ組指定中の添字 及び 刻み幅は,それが現れる

FORALL

三つ組指定並び中のどの

指標変数名も引用してはならない。

C737

(R756) FORALL

本体構文中の文は,

FORALL

構文の指標変数名を確定してはならない。

C738

(R756) FORALL

本体構文中で引用する手続(利用者定義演算,代入 又は 後始末によって引用する手

続を含む。)は,純粋手続でなければならない。

C739

(R756) FORALL

本体構文への飛越しは,禁止する。

R759

単純

FORALL

is

FORALL

FORALL

制御

FORALL

代入文

箇条

8

R801

ブロック

is

[

実行部構文

] ...

R802

IF

構文

is

IF THEN

 ブロック

[ ELSE IF

 ブロック

] ...

[ ELSE

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

453

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

 ブロック

]

END IF

R803

IF THEN

is

[ IF

構文名

:

]

IF (

スカラ論理式

) THEN

R804

ELSE IF

is

ELSE IF (

スカラ論理式

) THEN

[ IF

構文名

]

R805

ELSE

is

ELSE

[ IF

構文名

]

R806

END IF

is

END IF

[ IF

構文名

]

C801

(R802) IF

構文の

IF THEN

文に

IF

構文名を指定する場合は,対応する

END IF

文にも同じ

IF

構文名

を指定しなければならない。

IF

構文の

IF THEN

文に

IF

構文名を指定しない場合は,対応する

END IF

文に

IF

構文名を指定してはならない。

ELSE IF

文 又は

ELSE

文に

IF

構文名を指定する場合は,対応

する

IF THEN

文にも同じ

IF

構文名を指定しなければならない。

R807

IF

is

IF (

スカラ論理式

)

単純実行文

C802

(R807) IF

文中の単純実行文は,

IF

文,

END PROGRAM

文,

END FUNCTION

文 又は

END SUB-

ROUTINE

文であってはならない。

R808

CASE

構文

is

SELECT CASE

[ CASE

 ブロック

] ...

END SELECT

R809

SELECT CASE

is

[ CASE

構文名

:

]

SELECT CASE (

場合式

)

R810

CASE

is

CASE

場合選択子

[ CASE

構文名

]

R811

END SELECT

is

END SELECT

[ CASE

構文名

]

C803

(R808) CASE

構文の

SELECT CASE

文に

CASE

構文名を指定する場合は,対応する

END SELECT

文にも同じ

CASE

構文名を指定しなければならない。

CASE

構文の

SELECT CASE

文に

CASE

構文名

を指定しない場合は,対応する

END SELECT

文に

CASE

構文名を指定してはならない。

CASE

文に

CASE

構文名を指定する場合は,対応する

SELECT CASE

文にも同じ

CASE

構文名を指定しなければ

ならない。

R812

場合式

is

スカラ整数式

or

スカラ文字式

or

スカラ論理式

R813

場合選択子

is

(

場合値範囲並び

)

or

DEFAULT

C804

(R808) CASE

文中の高々一つの場合選択子が

DEFAULT

であってよい。

R814

場合値範囲

is

場合値

or

場合値

:

or

:

場合値

or

場合値

:

場合値

R815

場合値

is

スカラ整数初期値式

or

スカラ文字初期値式

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

454

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

スカラ論理初期値式

C805

(R808)

一つの

CASE

構文中の場合値は,すべて場合式と同じ型でなければならない。文字型について,

長さは異なってもよいが,種別型パラメタは同じでなければならない。

C806

(R808)

場合式が論理型であるときは,コロンを使った場合値範囲は使用してはならない。

C807

(R808)

一つの

CASE

構文において,場合値範囲に重なりがあってはならない。すなわち,二つ以上の

場合値範囲と一致する場合式の値が存在してはならない。

R816

ASSOCIATE

構文

is

ASSOCIATE

ブロック

END ASSOCIATE

R817

ASSOCIATE

is

[ ASSOCIATE

構文名

:

]

ASSOCIATE (

結合並び

)

R818

結合

is

結合名

=>

選択子

R819

選択子

is

or

変数

C808

(R818)

選択子が変数でないか,又は ベクトル添字をもつ変数である場合,結合名は変数確定の文脈

(

16.5.7

)

中に現れてはならない。

C809

(R818)

結合名は,それが属する

ASSOCIATE

文中の他の結合名と同じであってはならない。

R820

END ASSOCIATE

is

END ASSOCIATE

[ ASSOCIATE

構文名

]

C810

(R820) ASSOCIATE

構文の

ASSOCIATE

文に

ASSOCIATE

構文名を指定する場合は,対応する

END

ASSOCIATE

文にも同じ

ASSOCIATE

構文名を指定しなければならない。

ASSOCIATE

構文の

ASSO-

CIATE

文に

ASSOCIATE

構文名を指定しない場合は,対応する

END ASSOCIATE

文に

ASSOCIATE

構文名を指定してはならない。

R821

SELECT TYPE

構文

is

SELECT TYPE

[

型保持文

ブロック

] ...

END SELECT TYPE

R822

SELECT TYPE

is

[ SELECT

構文名

:

]

SELECT TYPE (

[

結合名

=>

]

選択子

)

C811

(R822)

選択子が名前付き変数でない場合,構文要素

結合名

=>

が現れなければならない。

C812

(R822)

選択子が変数でないか,又は ベクトル添字をもつ変数である場合,結合名は変数確定の文脈

(

16.5.7

)

に現れてはならない。

C813

(R822) SELECT TYPE

文中の選択子は多相的でなければならない。

R823

型保持文

is

TYPE IS (

型指定子

)

[ SELECT

構文名

]

or

CLASS IS (

派生型指定子

)

[ SELECT

構文名

]

or

CLASS DEFAULT

[ SELECT

構文名

]

C814

(R823)

型指定子 及び 派生型指定子は,各長さ型パラメタが引き継がれることを指定する。

C815

(R823)

型指定子 及び 派生型指定子は,連続派生型 又は

BIND

属性をもつ型を指定してはならない。

C816

(R823)

選択子が無制限多相的でない場合,型指定子 及び 派生型指定子はその選択子の宣言時の型の直

接拡張型を指定しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

455

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C817

(R823)

一つの

SELECT TYPE

構文について,同一の型 及び 種別型パラメタ値を二つ以上の

TYPE IS

で始まる型保持文で指定してはならず,かつ 二つ以上の

CLASS IS

で始まる型保持文で指定してはなら

ない。

C818

(R823)

一つの

SELECT TYPE

構文について,高々一つの

CLASS DEFAULT

で始まる型保持文を指定し

てよい。

R824

END SELECT TYPE

is

END SELECT

[ SELECT

構文名

]

C819

(R821) SELECT TYPE

構文の

SELECT TYPE

文に

SELECT

構文名を指定する場合は,対応する

END SELECT TYPE

文にも同じ

SELECT

構文名を指定しなければならない。

SELECT TYPE

構文

SELECT TYPE

文に

SELECT

構文名を指定しない場合は,対応する

END SELECT TYPE

文に

SELECT

構文名を指定してはならない。型保持文に

SELECT TYPE

構文名を指定する場合は,対応す

SELECT TYPE

文にも同じ

SELECT

構文名を指定しなければならない。

R825

DO

構文

is

整構造

DO

構文

or

不整構造

DO

構文

R826

整構造

DO

構文

is

DO

DO

ブロック

整構造

DO

端末文

R827

DO

is

文番号

DO

or

単純

DO

R828

文番号

DO

is

[ DO

構文名

:

]

DO

文番号

[ DO

制御

]

R829

単純

DO

is

[ DO

構文名

:

]

DO

[ DO

制御

]

R830

DO

制御

is

[

,

] DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

or

[

,

]

WHILE (

スカラ論理式

)

R831

DO

変数

is

スカラ整変数

C820

(R831) DO

変数は,整数型の名前付きスカラ変数でなければならない。

R832

DO

ブロック

is

ブロック

R833

整構造

DO

端末文

is

END DO

or

CONTINUE

R834

END DO

is

END DO

[ DO

構文名

]

C821

(R826)

整構造

DO

構文の

DO

文に

DO

構文名を指定する場合,対応する整構造

DO

端末文は,同じ

DO

構文名を指定した

END DO

文でなければならない。整構造

DO

構文の

DO

文に

DO

構文名を指定しな

い場合は,対応する整構造

DO

端末文に

DO

構文名を指定してはならない。

C822

(R826) DO

文が単純

DO

文である場合,対応する整構造

DO

端末文は,

END DO

文でなければなら

ない。

C823

(R826) DO

文が文番号

DO

文である場合は,対応する整構造

DO

端末文にその同じ文番号を付けなけれ

ばならない。

R835

不整構造

DO

構文

is

実行端末

DO

構文

or

外郭共有

DO

構文

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

456

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R836

実行端末

DO

構文

is

文番号

DO

DO

本体

実行

DO

端末文

R837

DO

本体

is

[

実行部構文

] ...

R838

実行

DO

端末文

is

単純実行文

C824

(R838)

実行

DO

端末文は,

CONTINUE

文,

GO TO

文,

RETURN

文,

STOP

文,

EXIT

文,

CYCLE

文,

END FUNCTION

文,

END

SUBROUTINE

文,

END PROGRAM

文 又は 算術

IF

文であってはならない。

C825

(R835)

実行

DO

端末文には文番号を付けなければならず,対応する文番号

DO

文はその同じ文番号を参照しなければならない。

R839

外郭共有

DO

構文

is

文番号

DO

DO

本体

共有端末

DO

構文

R840

共有端末

DO

構文

is

外郭共有

DO

構文

or

内郭共有

DO

構文

R841

内郭共有

DO

構文

is

文番号

DO

DO

本体

共有

DO

端末文

R842

共有

DO

端末文

is

単純実行文

C826

(R842)

共有

DO

端末文は,

GO TO

文,

RETURN

文,

STOP

文,

EXIT

文,

CYCLE

文,

END FUNCTION

文,

END SUBROUTINE

文,

END PROGRAM

文 又は 算術

IF

文であってはならない。

C827

(R840)

共有

DO

端末文には文番号を付けなければならず,その文を含むすべての内部共有

DO

構文 及び 外郭共有

DO

構文のすべての文番号

DO

文は,その同じ文番号を参照しなければならない。

R843

CYCLE

is

CYCLE

[ DO

構文名

]

C828

(R843) CYCLE

文に

DO

構文名を指定する場合,その

CYCLE

文は,その名前の

DO

構文の範囲内に

なければならない。

DO

構文名を指定しない場合,その

CYCLE

文は,少なくとも一つの

DO

構文の範

囲内になければならない。

R844

EXIT

is

EXIT

[ DO

構文名

]

C829

(R844) EXIT

文に

DO

構文名を指定する場合,その

EXIT

文は,その名前の

DO

構文の範囲内になけ

ればならない。

DO

構文名を指定しない場合,その

EXIT

文は,少なくとも一つの

DO

構文の範囲内に

なければならない。

R845

GO TO

is

GO TO

文番号

C830

(R845)

文番号は,その

GO TO

文と同じ有効域内にある飛び先文の文番号でなければならない。

R846

計算形

GO TO

is

GO TO (

文番号並び

)

[

,

]

スカラ整数式

C831

(R846)

文番号並び中の文番号は,その計算形

GO TO

文と同じ有効域内にある飛び先文の文番号でなければならない。

R847

算術

IF

is

IF (

スカラ数値式

)

文番号

,

文番号

,

文番号

C832

(R847)

各文番号は,その算術

IF

文と同じ有効域内にある飛び先文の文番号でなければならない。

C833

(R847)

スカラ数値式は,複素数型であってはならない。

R848

CONTINUE

is

CONTINUE

R849

STOP

is

STOP

[

終了符号

]

R850

終了符号

is

スカラ文字定数

or

数字

[

数字

[

数字

[

数字

[

数字

] ] ] ]

C834

(R850)

スカラ文字定数は,基本文字型でなければならない。

箇条

9

R901

装置識別子

is

ファイル装置番号

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

457

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

*

or

内部ファイル変数

R902

ファイル装置番号

is

スカラ整数式

R903

内部ファイル変数

is

文字変数

C901

(R903)

文字変数は,ベクトル添字をもった部分配列であってはならない。

C902

(R903)

文字変数は,基本文字型,

ASCII

文字型 又は

ISO 10646

文字型でなければならない。

R904

OPEN

is

OPEN (

接続指定子並び

)

R905

接続指定子

is

[

UNIT =

]

ファイル装置番号

or

ACCESS =

スカラ基本文字式

or

ACTION =

スカラ基本文字式

or

ASYNCHRONOUS =

スカラ基本文字式

or

BLANK =

スカラ基本文字式

or

DECIMAL =

スカラ基本文字式

or

DELIM =

スカラ基本文字式

or

ENCODING =

スカラ基本文字式

or

ERR =

文番号

or

FILE =

ファイル名記述式

or

FORM =

スカラ基本文字式

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

or

PAD =

スカラ基本文字式

or

POSITION =

スカラ基本文字式

or

RECL =

スカラ整数式

or

ROUND =

スカラ基本文字式

or

SIGN =

スカラ基本文字式

or

STATUS =

スカラ基本文字式

R906

ファイル名記述式

is

スカラ基本文字式

R907

入出力メッセージ変数

is

スカラ基本文字変数

C903

(R905)

指定子は,接続指定子並びに

2

回以上指定してはならない。

C904

(R905)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,接続指定子並びの最初の項目でなければならない。

C905

(R905) ERR

指定子に指定する文番号は,その

OPEN

文と同じ有効域内の飛び先文の文番号でなければ

ならない。

R908

CLOSE

is

CLOSE (

解除指定子並び

)

R909

解除指定子

is

[

UNIT =

]

ファイル装置番号

or

IOSTAT =

スカラ整変数

or

IOMSG =

入出力メッセージ変数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

458

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

ERR =

文番号

or

STATUS =

スカラ基本文字式

C906

(R909)

指定子は,解除指定子並びに

2

回以上指定してはならない。

C907

(R909)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,解除指定子並びの最初の項目でなければならない。

C908

(R909) ERR

指定子に指定する文番号は,その

CLOSE

文と同じ有効域内の飛び先文の文番号でなけれ

ばならない。

R910

READ

is

READ (

データ転送指定子並び

)

[

入力項目並び

]

or

READ

書式識別子

[

,

入力項目並び

]

R911

WRITE

is

WRITE (

データ転送指定子並び

)

[

出力項目並び

]

R912

PRINT

is

PRINT

書式識別子

[

,

出力項目並び

]

R913

データ転送指定子

is

[

UNIT =

]

装置識別子

or

[

FMT =

]

書式識別子

or

[

NML =

]

変数群名

or

ADVANCE =

スカラ基本文字式

or

ASYNCHRONOUS =

スカラ文字初期値式

or

BLANK =

スカラ基本文字式

or

DECIMAL =

スカラ基本文字式

or

DELIM =

スカラ基本文字式

or

END =

文番号

or

EOR =

文番号

or

ERR =

文番号

or

ID =

スカラ整変数

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

or

PAD =

スカラ基本文字式

or

POS =

スカラ整数式

or

REC =

スカラ整数式

or

ROUND =

スカラ基本文字式

or

SIGN =

スカラ基本文字式

or

SIZE =

スカラ整変数

C909

(R913)

指定子は,データ転送指定子並びに

2

回以上指定してはならない。

C910

(R913)

装置識別子は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,装置

識別子は,データ転送指定子並びの最初の項目でなければならない。

C911

(R913) DELIM

指定子 及び

SIGN

指定子は,

READ

文に指定してはならない。

C912

(R913) BLANK

指定子,

PAD

指定子,

END

指定子,

EOR

指定子 及び

SIZE

指定子は,

WRITE

文に

指定してはならない。

C913

(R913) ERR

指定子,

EOR

指定子 及び

END

指定子の文番号は,このデータ転送文と同じ有効域内の

飛び先文の文番号でなければならない。

C914

(R913)

変数群名は,変数群の名前でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

459

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C915

(R913)

変数群名は,入力項目並び 又は 出力項目並びがデータ転送文に指定されている場合,指定して

はならない。

C916

(R913)

データ転送指定子並びに,

FMT

指定子と

NML

指定子を共に指定することはできない。

C917

(R913)

先行する

FMT=

を省略して書式識別子を指定する場合,書式識別子は,データ転送指定子並びの

2

番目の項目でなければならず,そのとき最初の項目は,装置識別子でなければならない。

C918

(R913)

先行する

NML=

を省略して変数群名を指定する場合,変数群名は,データ転送指定子並びの

2

目の項目でなければならず,そのとき最初の項目は,装置識別子でなければならない。

C919

(R913)

装置識別子がファイル装置番号でない場合,データ転送指定子並びに

REC

指定子 及び

POS

定子を指定することはできない。

C920

(R913) REC

指定子を指定する場合,

END

指定子 及び 変数群名を指定してはならず,書式仕様に星印

を指定してはならない。

C921

(R913) ADVANCE

指定子は,制御情報並びに装置識別子として内部ファイル変数を含まず,明示的な

書式仕様

(

10.1

)

をもつ,書式付き順番探査 又は 流れ探査入出力文にだけ指定できる。

C922

(R913) EOR

指定子を指定する場合,

ADVANCE

指定子も指定しなければならない。

C923

(R913) SIZE

指定子を指定する場合,

ADVANCE

指定子も指定しなければならない。

C924

(R913) ASYNCHRONOUS

指定子のスカラ文字初期値式は,基本文字型でなければならず,値が

YES

又は

NO

でなければならない。

C925

(R913)

装置識別子がファイル装置番号でない場合,

ASYNCHRONOUS

指定子に

YES

を指定してはな

らない。

C926

(R913) ID

指定子を指定する場合,

YES

を指定した

ASYNCHRONOUS

指定子もなければならない。

C927

(R913) POS

指定子を指定する場合,データ転送指定子並びに

REC

指定子を指定してはならない。

C928

(R913) DECIMAL

指定子,

BLANK

指定子,

PAD

指定子,

SIGN

指定子 又は

ROUND

指定子を指定

する場合,書式識別子 又は 変数群名も指定しなければならない。

C929

(R913) DELIM

指定子を指定する場合,星印である書式識別子 又は 変数群名も指定しなければなら

ない。

R914

書式識別子

is

基本文字式

or

文番号

or

*

C930

(R914)

文番号は,この

FMT

指定子を含む有効域内の

FORMAT

文の文番号でなければならない。

R915

入力項目

is

変数

or

入出力

DO

形反復

R916

出力項目

is

or

入出力

DO

形反復

R917

入出力

DO

形反復

is

(

入出力

DO

形項目並び

,

入出力

DO

制御

)

R918

入出力

DO

形項目

is

入力項目

or

出力項目

R919

入出力

DO

制御

is

DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

C931

(R915)

入力項目の変数は,大きさ引継ぎの全体配列であってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

460

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C932

(R915)

入力項目の変数は,手続ポインタであってはならない。

C933

(R919) DO

変数は,整数型の名前付きスカラ変数でなければならない。

C934

(R918)

入力項目並びにおける入出力

DO

形項目は,入力項目でなければならない。出力項目並びにおけ

る入出力

DO

形項目は,出力項目でなければならない。

C935

(R916)

出力項目の式の値は,手続ポインタであってはならない。

R920

派生型変数型指定

is

TYPE (

派生型指定子

)

or

CLASS (

派生型指定子

)

C936

(R920)

派生型指定子が拡張可能型のときキーワード

CLASS

を指定しなければならず,それ以外のとき

キーワード

TYPE

を指定しなければならない。

C937

(R920)

派生型指定子の長さ型パラメタは,引き継がれなければならない。

R921

WAIT

is

WAIT (

待機指定子並び

)

R922

待機指定子

is

[ UNIT = ]

ファイル装置番号

or

END =

文番号

or

EOR =

文番号

or

ERR =

文番号

or

ID =

スカラ整数式

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

C938

(R922)

各指定子は,待機指定子並びに

2

回以上指定してはならない。

C939

(R922)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,待機指定子並びの最初の項目でなければならない。

C940

(R922) ERR

指定子,

EOR

指定子 又は

END

指定子に指定する文番号は,その

WAIT

文と同じ有効域

内の飛び先文の文番号でなければならない。

R923

BACKSPACE

is

BACKSPACE

ファイル装置番号

or

BACKSPACE (

位置付け指定子並び

)

R924

ENDFILE

is

ENDFILE

ファイル装置番号

or

ENDFILE (

位置付け指定子並び

)

R925

REWIND

is

REWIND

ファイル装置番号

or

REWIND (

位置付け指定子並び

)

R926

位置付け指定子

is

[

UNIT =

]

ファイル装置番号

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

or

ERR =

文番号

C941

(R926)

各指定子は,位置付け指定子並びに

2

回以上指定してはならない。

C942

(R926)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,位置付け指定子並びの最初の項目でなければならない。

C943

(R926) ERR

指定子の文番号は,その位置付け文と同じ有効域内の飛び先文の文番号でなければなら

ない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

461

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R927

FLUSH

is

FLUSH

ファイル装置番号

or

FLUSH (

一掃指定子並び

)

R928

一掃指定子

is

[

UNIT =

]

ファイル装置番号

or

IOSTAT =

スカラ整変数

or

IOMSG =

入出力メッセージ変数

or

ERR =

文番号

C944

(R928)

各指定子は,一掃指定子並びに

2

回以上指定してはならない。

C945

(R928)

ファイル装置番号は,必ず指定しなければならない。省略可能な文字列

UNIT=

を省略する場合,

ファイル装置番号は,一掃指定子並びの最初の項目でなければならない。

C946

(R928) ERR

指定子に指定する文番号は,その

FLUSH

文と同じ有効域内の飛び先文の文番号でなけれ

ばならない。

R929

INQUIRE

is

INQUIRE (

問合せ指定子並び

)

or

INQUIRE ( IOLENGTH =

スカラ整変数

)

出力項目並び

R930

問合せ指定子

is

[

UNIT =

]

ファイル装置番号

or

FILE =

ファイル名記述式

or

ACCESS =

スカラ基本文字変数

or

ACTION =

スカラ基本文字変数

or

ASYNCHRONOUS =

スカラ基本文字変数

or

BLANK =

スカラ基本文字変数

or

DECIMAL =

スカラ基本文字変数

or

DELIM =

スカラ基本文字変数

or

DIRECT =

スカラ基本文字変数

or

ENCODING =

スカラ基本文字変数

or

ERR =

文番号

or

EXIST =

スカラ基本論理変数

or

FORM =

スカラ基本文字変数

or

FORMATTED =

スカラ基本文字変数

or

ID =

スカラ整数式

or

IOMSG =

入出力メッセージ変数

or

IOSTAT =

スカラ整変数

or

NAME =

スカラ基本文字変数

or

NAMED =

スカラ基本論理変数

or

NEXTREC =

スカラ整変数

or

NUMBER =

スカラ整変数

or

OPENED =

スカラ基本論理変数

or

PAD =

スカラ基本文字変数

or

PENDING =

スカラ基本論理変数

or

POS =

スカラ整変数

or

POSITION =

スカラ基本文字変数

or

READ =

スカラ基本文字変数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

462

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

READWRITE =

スカラ基本文字変数

or

RECL =

スカラ整変数

or

ROUND =

スカラ基本文字変数

or

SEQUENTIAL =

スカラ基本文字変数

or

SIGN =

スカラ基本文字変数

or

SIZE =

スカラ整変数

or

STREAM =

スカラ基本文字変数

or

UNFORMATTED =

スカラ基本文字変数

or

WRITE =

スカラ基本文字変数

C947

(R930)

各指定子は,問合せ指定子並びに

2

回以上指定してはならない。

C948

(R930)

問合せ指定子は,

FILE

指定子 又は

UNIT

指定子のいずれかを含まなければならない。

C949

(R930)

装置

INQUIRE

文で省略可能な文字列

UNIT=

UNIT

指定子から省略する場合,ファイル装置

番号は,問合せ指定子並びの最初の項目でなければならない。

C950

(R930) ID

指定子を指定する場合,

PENDING

指定子も指定しなければならない。

箇条

10

R1001

FORMAT

is

FORMAT

書式仕様

R1002

書式仕様

is

(

[

書式項目並び

]

)

C1001

(R1001) FORMAT

文には,文番号を付けなければならない。

C1002

(R1002)

書式項目並び中の書式項目を区切るコンマは,次の場合には省略してもよい。

(1)

P

形編集記述子(

10.7.5

参照)と,その直後で書式反復数 が先行してもよい,

F

形,

E

形,

EN

形,

ES

形,

D

形 又は

G

形の編集記述子との間

(2)

書式反復数をもたない斜線編集記述子

(

10.7.2

)

の前

(3)

斜線編集記述子の後

(4)

コロン編集記述子

(

10.7.3

)

の前後

R1003

書式項目

is

[

r

]

データ編集記述子

or

制御編集記述子

or

文字列編集記述子

or

[

r

]

(

書式項目並び

)

R1004

r

is

整定数表現

C1003

(R1004)

r

は,正でなければならない。

C1004

(R1004)

r

に,種別を指定してはならない。

R1005

データ編集記述子

is

I

w

[

.

m

]

or

B

w

[

.

m

]

or

O

w

[

.

m

]

or

Z

w

[

.

m

]

or

F

w

.

d

or

E

w

.

d

[

E

e

]

or

EN

w

.

d

[

E

e

]

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

463

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

or

ES

w

.

d

[

E

e

]

or

G

w

.

d

[

E

e

]

or

L

w

or

A

[

w

]

or

D

w

.

d

or

DT

[

文字定数表現

] [

(

値指定並び

)

]

R1006

w

is

整定数表現

R1007

m

is

整定数表現

R1008

d

is

整定数表現

R1009

e

is

整定数表現

R1010

値指定

is

任意符号付き整定数表現

C1005

(R1009)

e

は,正でなければならない。

C1006

(R1006)

w

は,

I

形,

B

形,

O

形,

Z

形 及び

F

形の編集記述子では

0

以上でなければならず,それ以

外の編集記述子では,正でなければならない。

C1007

(R1005)

w

,

m

,

d

e

及び 値指定に,種別を指定してはならない。

C1008

(R1005) DT

形編集記述子の文字定数表現に,種別を指定してはならない。

R1011

制御編集記述子

is

位置付け編集記述子

or

[

r

]

/

or

:

or

符号制御編集記述子

or

k

P

or

空白解釈編集記述子

or

丸め編集記述子

or

小数点編集記述子

R1012

k

is

任意符号付き整定数表現

C1009

(R1012)

k

に,種別を指定してはならない。

R1013

位置付け編集記述子

is

T

n

or

TL

n

or

TR

n

or

n

X

R1014

n

is

整定数表現

C1010

(R1014)

n

は,正でなければならない。

C1011

(R1014)

n

に,種別を指定してはならない。

R1015

符号制御編集記述子

is

SS

or

SP

or

S

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

464

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R1016

空白解釈編集記述子

is

BN

or

BZ

R1017

丸め編集記述子

is

RU

or

RD

or

RZ

or

RN

or

RC

or

RP

R1018

小数点編集記述子

is

DC

or

DP

R1019

文字列編集記述子

is

文字定数表現

C1012

(R1019)

文字定数表現に,種別を指定してはならない。

箇条

11

R1101

主プログラム

is

[ PROGRAM

]

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END PROGRAM

R1102

PROGRAM

is

PROGRAM

プログラム名

R1103

END PROGRAM

is

END

[

PROGRAM

[

プログラム名

] ]

C1101

(R1101)

主プログラム中の実行部は,

RETURN

文 及び

ENTRY

文を含んではならない。

C1102

(R1101) PROGRAM

文を書いた場合にだけ,

END PROGRAM

文中にプログラム名を書いてもよい。

その場合,そのプログラム名は,

PROGRAM

文で指定したプログラム名と同じでなければならない。

C1103

(R1101)

自動割付け実体は,主プログラムの宣言部

(R204)

中に書いてはならない。

R1104

モジュール

is

MODULE

[

宣言部

]

[

モジュール副プログラム部

]

END MODULE

R1105

MODULE

is

MODULE

モジュール名

R1106

END MODULE

is

END

[

MODULE

[

モジュール名

] ]

R1107

モジュール副プログラム部

is

CONTAINS

モジュール副プログラム

[

モジュール副プログラム

] ...

R1108

モジュール副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

465

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C1104

(R1104) END MODULE

文中にモジュール名を書く場合,それは,

MODULE

文で指定したモジュー

ル名と同じでなければならない。

C1105

(R1104)

モジュールの宣言部は,

文関数定義文,

ENTRY

文 又は

FORMAT

文のいずれも含んではならない。

C1106

(R1104)

自動割付け実体は,モジュールの宣言部中に書いてはならない。

C1107

(R1104)

成分初期値指定

(R444)

が指定された型の実体をモジュールの宣言部中に書く場合,その実体

ALLOCATABLE

属性 又は

POINTER

属性をもたないとき,

SAVE

属性をもたなければならない。

R1109

USE

is

USE

[ [

,

モジュール性質

]

::

]

モジュール名

[

,

仮称指定並び

]

or

USE

[ [

,

モジュール性質

]

::

]

モジュール名

,

ONLY :

[

参照限定並び

]

R1110

モジュール性質

is

INTRINSIC

or

NON INTRINSIC

R1111

仮称指定

is

局所名

=>

参照対象名

or

OPERATOR (

局所利用者定義演算

) =>

OPERATOR (

参照利用者定義演算

)

R1112

参照限定

is

総称指定

or

参照限定対象名

or

仮称指定

R1113

参照限定対象名

is

参照対象名

C1108

(R1109)

モジュール性質が

INTRINSIC

の場合,モジュール名は組込みモジュールの名前でなければな

らない。

C1109

(R1109)

モジュール性質が

NON INTRINSIC

の場合,モジュール名は組込みでないモジュールの名前で

なければならない。

C1110

(R1109)

有効域から,組込みモジュール 及び 同じ名前をもつ組込みでないモジュールを参照してはな

らない。

C1111

(R1111)

OPERATOR (

参照利用者定義演算

)

は,総称束縛を識別してはならない。

C1112

(R1112)

総称指定は,総称束縛を識別してはならない。

C1113

(R1112)

各総称指定は,モジュール内の公開要素でなければならない。

C1114

(R1113)

各参照対象名は,モジュール内の公開要素の名前でなければならない。

R1114

局所利用者定義演算

is

利用者定義単項演算子

or

利用者定義

2

項演算子

R1115

参照利用者定義演算

is

利用者定義単項演算子

or

利用者定義

2

項演算子

C1115

(R1115)

各参照利用者定義演算は,モジュール内の公開要素でなければならない。

R1116

初期値設定プログラム単位

is

BLOCK DATA

[

宣言部

]

END BLOCK DATA

R1117

BLOCK DATA

is

BLOCK DATA

[

初期値設定プログラム単位名

]

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

466

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

R1118

END BLOCK DATA

is

END

[

BLOCK DATA

[

初期値設定プログラム単位名

] ]

C1116

(R1116)

初期値設定プログラム単位名は,

BLOCK DATA

文中に書いた場合にだけ,

END BLOCK

DATA

文中に書かなければならない。その場合,その名前は,

BLOCK DATA

文中の初期値設定プログ

ラム単位名と同じでなければならない。

C1117

(R1116)

初期値設定プログラム単位中の宣言部は,派生型定義,

ASYNCHRONOUS

文,

BIND

文,

COMMON

文,

DATA

文,

DIMENSION

文,

EQUIVALENCE

文,

IMPLICIT

文,

INTRINSIC

文,

PA-

RAMETER

文,

POINTER

文,

SAVE

文,

TARGET

文,

USE

文,

VOLATILE

文 及び 型宣言文だけ

を含まなければならない。

C1118

(R1116)

初期値設定プログラム単位の宣言部中の型宣言文は,

ALLOCATABLE

属性,

EXTERNAL

属性 及び

BIND

属性の指定を含んではならない。

箇条

12

R1201

引用仕様宣言

is

INTERFACE

[

引用仕様部構文

] ...

END INTERFACE

R1202

引用仕様部構文

is

引用仕様本体

or

PROCEDURE

R1203

INTERFACE

is

INTERFACE

[

総称指定

]

or

ABSTRACT INTERFACE

R1204

END INTERFACE

is

END INTERFACE

[

総称指定

]

R1205

引用仕様本体

is

FUNCTION

[

宣言部

]

END FUNCTION

or

SUBROUTINE

[

宣言部

]

END SUBROUTINE

R1206

PROCEDURE

is

[

MODULE

]

PROCEDURE

手続名並び

R1207

総称指定

is

総称名

or

OPERATOR (

利用者定義演算子

)

or

ASSIGNMENT ( = )

or

派生型入出力総称指定

R1208

派生型入出力総称指定

is

READ ( FORMATTED )

or

READ ( UNFORMATTED )

or

WRITE ( FORMATTED )

or

WRITE ( UNFORMATTED )

R1209

IMPORT

is

IMPORT

[ [

::

]

輸入名並び

]

C1201

(R1201)

副プログラム内の引用仕様宣言は,その副プログラムによって定義される手続の引用仕様本体

を含んではならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

467

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C1202

(R1201)

総称指定は,

INTERFACE

文に指定されている場合に限り,

END INTERFACE

文中に書

かなければならない。

END INTERFACE

文に総称指定を書く場合,

INTERFACE

文にも同じ総称指

定を書かなければならない。

END INTERFACE

文に

ASSIGNMENT(=)

を書く場合,

INTERFACE

文に

ASSIGNMENT(=)

を書かなければならない。

END INTERFACE

文に派生型入出力総称指定を書く場

合,

INTERFACE

文にも同じ派生型入出力総称指定を書かなければならない。

END INTERFACE

文に

OPERATOR(

利用者定義演算子

)

を書く場合,

INTERFACE

文にも同じ利用者定義演算子を書かなければ

ならない。一方の利用者定義演算子が

.LT.

.LE.

.GT.

.GE.

.EQ.

又は

.NE.

である場合,他方は

<

<=

>

>=

==

又は

/=

の対応する演算子であってもよい。

C1203

(R1203) INTERFACE

文が

ABSTRACT INTERFACE

である場合,

FUNCTION

文の関数名 又は

SUB-

ROUTINE

文のサブルーチン名は,組込み型を指定するキーワードと同じであってはならない。

C1204

(R1202) PROCEDURE

文は,総称指定をもつ引用仕様宣言にだけ指定できる。

C1205

(R1205)

純粋手続の引用仕様本体は,

POINTER

属性

,選択戻り

及び 手続引数を除くすべての仮引数の

授受特性を宣言しなければならない。

C1206

(R1205)

引用仕様本体は,

ENTRY

文,

DATA

文,

FORMAT

及び 文関数定義文

を含んではならない。

C1207

(R1206)

手続名は明示的な引用仕様をもたなければならない。手続名は,参照可能な手続ポインタ,外

部手続,仮手続 又は モジュール手続を参照しなければならない。

C1208

(R1206) PROCEDURE

文に

MODULE

を指定する場合,その文の各手続名は,現在の有効範囲内でモ

ジュール手続として参照可能でなければならない。

C1209

(R1206)

手続名には,それより前に,同じ総称識別子をもつ参照可能な引用仕様内の

PROCEDURE

文で宣言される手続を指定してはならない。

C1210

(R1209) IMPORT

文は,引用仕様本体にだけ指定することができる。

C1211

(R1209)

各輸入名は,親有効域内の要素の名前でなければならない。

R1210

EXTERNAL

is

EXTERNAL [ :: ]

外部名並び

R1211

手続宣言文

is

PROCEDURE (

[

手続引用仕様

]

)

[ [

,

手続属性指定

] ...

::

]

手続宣言並び

R1212

手続引用仕様

is

引用仕様名

or

宣言型指定子

R1213

手続属性指定

is

参照許可指定子

or

手続言語束縛指定子

or

INTENT (

授受特性指定

)

or

OPTIONAL

or

POINTER

or

SAVE

R1214

手続宣言

is

手続要素名

[

=>

空初期値

]

R1215

引用仕様名

is

名前

C1212

(R1215)

名前は,抽象引用仕様の名前 又は 明示的な引用仕様をもつ手続の名前でなければならない。

名前は,手続宣言文によって宣言する場合,あらかじめ宣言しなければならない。名前は,組込み手続を

表す場合,

13.6

に列挙されている名前のうち

印のない名前でなければならない。

C1213

(R1215)

名前は,組込み型を宣言するキーワードと同じであってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

468

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C1214

手続要素は,

INTENT

属性 又は

SAVE

属性を指定する場合,

POINTER

属性も指定しなければなら

ない。

C1215

(R1211)

手続引用仕様に要素別処理手続の指定がある場合,それぞれの手続要素名は外部手続を指定す

るものでなければならない。

C1216

(R1214)

手続宣言に

=>

が指定される場合,その手続要素には

POINTER

属性を指定しなければなら

ない。

C1217

(R1211)

NAME=

をもつ手続言語束縛指定子を指定する場合,手続宣言並びにはちょうど一つの手続宣

言を指定しなければならない。その場合の手続宣言は,

POINTER

属性を指定してはならず,仮手続で

あってもならない。

C1218

(R1211)

手続言語束縛指定子を指定する場合,手続引用仕様を指定しなければならず,その手続引用

仕様は引用仕様名でなければならず,引用仕様名は手続言語束縛指定子を指定して宣言しなければなら

ない。

R1216

INTRINSIC

is

INTRINSIC [ :: ]

組込み手続名並び

C1219

(R1216)

それぞれの組込み手続名は,組込み手続の名前でなければならない。

R1217

関数引用

is

手続特定子

(

[

実引数指定子並び

]

)

C1220

(R1217)

手続特定子は,関数を特定しなければならない。

C1221

(R1217)

関数引用の実引数指定子並びには,選択戻り指定子を指定することはできない。

R1218

CALL

is

CALL

手続特定子

[

(

[

実引数指定子並び

]

)

]

C1222

(R1218)

手続特定子は,サブルーチンを特定しなければならない。

R1219

手続特定子

is

手続名

or

手続成分引用

or

データ参照

%

束縛名

C1223

(R1219)

手続名は,手続 又は 手続ポインタの名前でなければならない。

C1224

(R1219)

束縛名は,データ参照の宣言時の型の束縛名(

4.5.4

参照)でなければならない。

C1224a

(R1219)

データ参照が配列である場合,引用する型束縛手続は,

PASS

属性(

4.5.4

参照)をもたなけ

ればならない。

R1220

実引数指定子

is

[

引数キーワード

=

]

実引数

R1221

実引数

is

or

変数

or

手続名

or

手続成分引用

or

選択戻り指定子

R1222

選択戻り指定子

is

*

文番号

C1225

(R1220)

手続の引用仕様が有効域内で暗黙的である場合には,

引数キーワード

=

を指定することはで

きない。

C1226

(R1220) “

引数キーワード

=

は,先行するすべての実引数指定子の

引数キーワード

=

を省略しない

限り,省略してはならない。

C1227

(R1220)

それぞれの引数キーワードは,その手続の明示的引用仕様中の仮引数の名前でなければなら

ない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

469

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C1228

(R1221)

組込みでない要素別処理手続は,実引数として用いてはならない。

C1229

(R1221)

手続名は,外部手続,仮手続,モジュール手続,手続ポインタ,又は

13.6

に列挙している個

別組込み関数のうち

印のない組込み関数の名前でなければならない。

C1230

(R1221)

純粋手続を引用する場合,実引数として書く手続名は,純粋手続の名前でなければならない

12.6

参照)。

C1231

(R1222)

選択戻り指定子の文番号は,

CALL

文と同じ有効域内にある飛び先文の文番号でなければならない。

C1232

(R1221)

実引数が部分配列 又は 形状引継ぎ配列であり,対応する仮引数が

VOLATILE

属性 又は

ASYNCHRONOUS

属性のいずれかをもつ場合,その仮引数は,形状引継ぎ配列でなければならない。

C1233

(R1221)

実引数がポインタ配列であり,対応する仮引数が

VOLATILE

属性 又は

ASYNCHRONOUS

属性のいずれかをもつ場合,その仮引数は,形状引継ぎ配列 又は ポインタ配列でなければならない。

R1223

関数副プログラム

is

FUNCTION

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END FUNCTION

R1224

FUNCTION

is

[

手続接頭句

]

FUNCTION

関数名

(

[

仮引数名並び

]

)

[

手続接尾句

]

C1234

(R1224) RESULT

句を指定する場合には,結果名は,関数名と同じ名前であってはならず,その副プ

ログラム中の

ENTRY

文の入口名と同じ名前であってもならない。

C1235

(R1224) RESULT

句を指定する場合には,その関数副プログラムの有効域内のいかなる単純宣言文に

も,この関数名を書いてはならない。

R1225

手続言語束縛指定子

is

言語束縛指定子

C1236

(R1225) NAME

指定子をもつ手続言語束縛指定子は,抽象引用仕様 又は 仮手続に対する引用仕様本

体の

FUNCTION

文 又は

SUBROUTINE

文に指定してはならない。

C1237

(R1225)

手続言語束縛指定子は,内部手続に指定してはならない。

C1238

(R1225)

手続言語束縛指定子が手続に指定される場合,手続のそれぞれの仮引数は,省略可能でない相

互利用可能変数(

15.2.4

及び

15.2.5

参照)又は 省略可能でない相互利用可能手続(

15.2.6

参照)でな

ければならない。手続言語束縛指定子が関数に指定される場合,その関数結果は,相互利用可能スカラ変

数でなければならない。

R1226

仮引数名

is

名前

C1239

(R1226)

仮引数名は,仮引数の名前でなければならない。

R1227

手続接頭句

is

手続接頭辞

[

手続接頭辞

] ...

R1228

手続接頭辞

is

宣言型指定子

or

RECURSIVE

or

PURE

or

ELEMENTAL

C1240

(R1227)

手続接頭句には,それぞれの手続接頭辞は高々一つしか指定してはならない。

C1241

(R1227)

手続接頭句には,

ELEMENTAL

及び

RECURSIVE

の両方を書いてはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

470

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C1242

(R1227)

手続言語束縛指定子を

FUNCTION

文 又は

SUBROUTINE

文に書いた場合,手続接頭句に

ELEMENTAL

を指定してはならない。

R1229

手続接尾句

is

手続言語束縛指定子

[

RESULT (

結果名

)

]

or

RESULT (

結果名

)

[

手続言語束縛指定子

]

R1230

END FUNCTION

is

END

[

FUNCTION

[

関数名

] ]

C1243

(R1230)

内部関数 及び モジュール関数の

END FUNCTION

文には,キーワード

FUNCTION

を指定し

なければならない。

C1244

(R1223)

内部関数副プログラムは,

ENTRY

文を含んではならない。

C1245

(R1223)

内部関数副プログラムは,内部副プログラム部を含んではならない。

C1246

(R1230) END FUNCTION

文に関数名を指定する場合,それは対応する

FUNCTION

文中の関数名と

同じでなければならない。

R1231

サブルーチン副プログラム

is

SUBROUTINE

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END SUBROUTINE

R1232

SUBROUTINE

is

[

手続接頭句

]

SUBROUTINE

サブルーチン名

[

(

[

仮引数並び

]

)

[

手続言語束縛指定子

] ]

C1247

(R1232) SUBROUTINE

文の手続接頭句に,宣言型指定子を指定してはならない。

R1233

仮引数

is

仮引数名

or

*

R1234

END SUBROUTINE

is

END

[

SUBROUTINE

[

サブルーチン名

] ]

C1248

(R1234)

内部サブルーチン 及び モジュールサブルーチンの

END SUBROUTINE

文には,キーワード

SUBROUTINE

を指定しなければならない。

C1249

(R1231)

内部サブルーチン副プログラムは,

ENTRY

文を含んではならない。

C1250

(R1231)

内部サブルーチン副プログラムは,内部副プログラム部を含んではならない。

C1251

(R1234) END SUBROUTINE

文にサブルーチン名を書く場合には,それは対応する

SUBROUTINE

文のサブルーチン名と同じでなければならない。

R1235

ENTRY

is

ENTRY

入口名

[

(

[

仮引数並び

]

)

[

手続接尾句

] ]

C1252

(R1235) RESULT

句を指定する場合には,その関数副プログラムの有効域内のいかなる単純宣言文に

も型宣言文にも,入口名を書いてはならない。

C1253

(R1235) ENTRY

文は,外部副プログラム 又は モジュール副プログラムの中にだけ書いてよい。

ENTRY

文は,実行構文の中に書いてはならない。

C1254

(R1235) RESULT

句は,

ENTRY

文が関数副プログラムに含まれている場合にだけ書いてよい。

C1255

(R1235) ENTRY

文を含む副プログラムにおいては,入口名は,

FUNCTION

文,

SUBROUTINE

文 及び

他の

ENTRY

文中の仮引数として書いてはならず,

EXTERNAL

文,

INTRINSIC

文 又は

PROCEDURE

文にも書いてはならない。

C1256

(R1235) ENTRY

文が関数副プログラムに含まれている場合,仮引数は選択戻り星印であってはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

471

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C1257

(R1235) RESULT

句を指定する場合には,結果名は,

FUNCTION

文の関数名と同じであってはなら

ず,その副プログラムの

ENTRY

文の入口名と同じであってもならない。

R1236

RETURN

is

RETURN

[

スカラ整数式

]

C1258

(R1236) RETURN

文は,関数副プログラム 又は サブルーチン副プログラムの有効域に含まれていな

ければならない。

C1259

(R1236)

スカラ整数式は,サブルーチン副プログラムの有効域内でだけ許される。

R1237

CONTAINS

is

CONTAINS

R1238

文関数定義文

is

関数名

(

[

仮引数名並び

]

) =

スカラ式

C1260

(R1238)

スカラ式の一次子は,定数表現,名前付き定数,変数引用,関数引用,仮手続関数引用 及び 組込み演算だけで構成できる。スカラ式が関

数 又は 仮手続関数の引用を含んでいる場合,その引用は明示的引用仕様を必要とするものであってはならず,その関数は,組込みである場合を除いて

明示的引用仕様を必要とするものであってはならず,変形組込み関数であってはならず,その結果はスカラでなければならない。関数 又は 仮手続関数

の引数が配列値であるとき,その引数は配列名でなければならない。スカラ式中に文関数引用を書いた場合には,その文関数は,その有効域内で前もっ

て定義されていなければならず,定義しようとする文関数の名前を引用することはできない。

C1261

(R1238)

スカラ式における名前付き定数は,その有効域において前もって宣言されているか,又は 参照結合 若しくは 親子結合によって参照できな

ければならない。スカラ式の中に配列要素が指定された場合には,その親配列はその有効域において前もって配列として宣言されているか,又は 参照

結合 若しくは 親子結合によって参照できなければならない。

C1262

(R1238)

仮引数名,変数,関数引用 又は 仮手続関数の型が暗黙の型宣言によって決められている場合,後続の型宣言文中でのこれらの出現は,暗

黙の型 及び 型パラメタを確認するものでなければならない。

C1263

(R1238)

関数名 及び それぞれの仮引数名は,明示的に 又は 暗黙的に,スカラとして指定されていなければならない。

C1264

(R1238)

ある仮引数名は,一つの仮引数並びの中では,

1

回だけ書いてもよい。

C1265

(R1238)

スカラ式中のそれぞれの変数引用は,その文関数の仮引数の引用であってもよいし,その文関数定義文を含む有効域から参照できる変数の

引用であってもよい。

C1266

純粋関数副プログラムの宣言部では,すべてのポインタでない仮データ実体に

INTENT(IN)

属性の指

定がなければならない。

C1267

純粋サブルーチン副プログラムの宣言部では,すべてのポインタでない仮データ実体に授受特性指定が

なければならない。

C1268

純粋副プログラムの宣言部 又は 内部副プログラム部で宣言された局所変数は,

SAVE

属性をもっては

ならない。

C1269

純粋副プログラムの宣言部では,すべての仮手続は純粋と指定されていなければならない。

C1270

組込み手続

又は 文関数

でない手続が,純粋であることが要求される文脈で使用される場合,その手続の引

用仕様は,使用されている有効域内で明示的でなければならない。その引用仕様は,その手続が純粋であ

ることを指定しなければならない。

C1271

純粋副プログラム中のすべての内部副プログラムは,純粋でなければならない。

C1272

共通ブロック内の基底実体,親子結合 若しくは 参照結合によって参照可能な基底実体,純粋関数の仮

引数,

INTENT (IN)

属性 をもつ純粋サブルーチンの仮引数 又は それらの変数と記憶列結合している実

体は,純粋副プログラム中の次の文脈で使用してはならない。

(1)

変数確定の文脈

(2)

ポインタ代入文のデータ指示先指定

(3)

構造体構成子のポインタ属性をもつ成分に対応する式

(4)

組込み代入文の変数がポインタ成分をもつ派生型である場合,組込み代入文の式

(5)

INTENT(OUT)

属性,

INTENT(INOUT)

属性 又は

POINTER

属性をもつ仮引数と結合した実

引数

C1273

純粋副プログラム中で引用される手続は,利用者定義演算 又は 利用者定義代入によって引用されるも

のも含めて,純粋でなければならない。

C1274

純粋副プログラムは,

PRINT

文,

OPEN

文,

CLOSE

文,

BACKSPACE

文,

ENDFILE

文,

REWIND

文,

FLUSH

文,

WAIT

文 及び

INQUIRE

文を含んではならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

472

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

D

C1275

純粋副プログラムは,装置識別子がファイル装置番号 又は

*

である

READ

文 又は

WRITE

文を含

んではならない。

C1276

純粋副プログラムは,

STOP

文を含んではならない。

C1277

要素別処理手続のすべての仮引数は,スカラ仮データ実体でなければならず,ポインタ属性 又は

ALLOCATABLE

属性をもってはならない。

C1278

要素別処理関数の結果変数はスカラでなければならず,ポインタ属性も

ALLOCATABLE

属性ももっ

てはならない。

C1279

要素別処理副プログラムの有効域内では,基底実体が仮引数である実体特定子は,組込み関数

BIT SIZE

KIND

LEN

又は 数値問合せ関数のいずれかの引数として現われる場合を除き,宣言式中に現われてはな

らない(

13.5.6

参照)。

箇条

13

箇条

14

箇条

15

C1501

(R429) BIND

属性をもつ派生型は,連続型であってはならない。

C1502

(R429) BIND

属性をもつ派生型は,型パラメタをもってはならない。

C1503

(R429) BIND

属性をもつ派生型は,

EXTENDS

属性をもってはならない。

C1504

(R429) BIND

属性をもつ派生型は,型束縛手続部をもってはならない。

C1505

(R429) BIND

属性をもつ派生型の各要素は,相互利用可能な型 及び 型パラメタをもち,ポインタで

なく割付け成分でないデータ成分とする。

箇条

16

D.2

構文規則の相互参照

(対応国際規格ではこの細分箇条において構文規則の相互参照関係を参考として示しているが,この規格では不採用

とした。)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

473

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

附属書

E

参考

索 引

本体

及び

附属書

A

D

(参考)における用語などの索引を示す。排列は,和字五十音順の後に英字

ABC

順とし,

記号を最後に置いた。凡例は次のとおりである。

(1)

は接頭語 又は 接尾語を表す。

… 選択子

, 6

(2)

“(R

snn

)”

は構文規則の識別番号を表しており,その左脇のページに定義がある。構文規則に現れる構文概念は,

すべて列挙する。右辺だけに現れる構文概念には,この識別番号は付けない。

種別型パラメタ選択子

, 29 (R404)

(3)

F77

は,

JIS X 3001

-

1982

F

ORTRAN

77

)で用いられていて,次の版で用いられていない語を示す。

の右側に,次の版での対応する用語を示す。

英字名

F77

→ 名前

, 20

(4)

F90

は,

JIS X 3001

-

1994

Fortran 90

)で用いられていて,次の版で用いられていない語を示す。

右側に,次の版での対応する用語を示す。

(5)

F95

は,

JIS X 3001-1

:

1998

Fortran 95

)で用いられていて,次の版で用いられていない語を示す。

の右側に,次の版での対応する用語を示す。

(6)

F2003

は,この規格

JIS X 3001-1

:

2009

Fortran 2003

)で用いられていて,特に版を示す必要がある用語

を示す。

値区切り子

[value separator], 203

値指定

, 190 (R1010), 463

後始末

[finalization], 362

後始末可能

[finalizable], 49, 362

後始末サブルーチン

[final subroutine], 49, 362, 381

後始末される

[finalized], 49

後始末束縛

, 48 (R454), 436

アポストロフィ

[apostrophe], 34, 189, 206, 210

2

—–, 34, 189, 206, 210

4

連の

—–, 189

余り

, 251, 288

誤り条件

[error condition], 185

誤り通報変数

, 92 (R626), 447

暗黙型宣言

[implicit-spec], 76 (R550), 443

暗黙型宣言部

[implicit-part], 8 (R205), 426

暗黙型宣言部文

[implicit-part-stmt], 8 (R206), 426

暗黙的(引用仕様が)

[implicit], 218

暗黙的引用仕様

[implicit interface], 362, 218, 227, 404

暗黙的初期値指定

[default initialization], 362, 45

暗黙的初期値設定されている

[default-initialized], 44,

362

イジング模型

[Ising model], 420

依存翻訳

[dependent compilation], 397

位置(ファイルの)

[position], 147, 148

1

次元配列

, 16, 56, 57, 90, 294, 300, 419

一次子

[primary], 98 (R701), 104, 448

位置付け

, 184, 192

位置付け指定子

[position-spec], 177 (R926), 460

位置付け左限界

[left tab limit], 200, 392

位置付け編集

[positional editing], 200

位置付け編集記述子

[position-edit-desc], 190 (R1013),

463

位置付ける

, 157, 392

一掃指定子

, 179 (R928), 461

入口名

[entry-name], 243, 470

入れ子

, 26, 144, 390, 398

引用

[reference], 84, 362, 18, 216

関数

—–, 15, 108, 236, 386

サブルーチン

—–, 236

データ実体

—–, 18

手続

—–, 18, 227

モジュール

—–, 18, 212

要素別

—–, 236

引用仕様

[interface], 218, 362, 370, 404

暗黙的

—–, 218

手続

—–, 219

明示的

—–, 218

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

474

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

引用仕様宣言

[interface block], 219 (R1201), 11, 362,

466

引用仕様部構文

[interface-specification], 219 (R1202),

466

引用仕様本体

[interface body], 219 (R1205), 11, 362,

466

引用仕様名

, 226 (R1215), 467

引用符

[quotation mark], 206, 210

2

—–, 35, 206, 210

上書き

[override], 44, 51, 362, 45, 61, 77

英字

[letter], 19

英字範囲

[letter-spec], 76 (R551), 443

英字名

F77

→ 名前

, 20

英数字下線

[alphanumeric-character], 19 (R302), 429

演算

[operation], 362, 27

—–

の評価

, 108

拡張

—–, 103

関係組込み

—–, 111, 113

組込み

—–, 101

数値組込み

—–, 109, 112

文字組込み

—–, 111, 112

利用者定義

—–, 102, 111, 223

論理組込み

—–, 111, 114

演算子

[operator], 18, 362, 21, 97, 99, 100, 103

—–

の拡張

, 400

—–

の優先順位

, 114

拡張

—–, 103

関係

—–, 100, 448

組込み

—–, 21, 429

数値

—–, 99, 102

利用者定義

—–, 22, 429

利用者定義

2

—–, 101

連結

—–, 99, 448

論理

—–, 100

演算対象

[operand], 18, 362, 97, 109

大きさ

[size], 16, 362

大きさゼロ

, 16, 57, 73, 108, 109, 117, 354, 357, 358

大きさ引継ぎ配列

[assumed-size array], 65, 362, 66

大きさ引継ぎ配列形状指定

[assumed-size-spec], 66 (R516),

440

オペランド

F77

→ 演算対象

, 18

親データ転送文

[parent data transfer statement], 169

親プログラム

[host], 11, 362

親型

[parent type], 50, 362

親子結合

[host association], 348, 362, 39, 413

親成分

[parent component], 51, 362

親有効域

[host scoping unit], 11, 363

親列

[parent-string], 85 (R610), 445

外郭共有

DO

構文

[outer-shared-do-construct], 141 (R839),

456

下位けたあふれモード

, 312, 318, 322, 327

開始位置

[starting point], 86

階乗

, 419

解除指定子

[close-spec], 158 (R908), 457

外部結合

[external linkage], 363, 343

外部名

[external-name], 225, 467

解放

[deallocation], 95, 97

解放指定選択子

, 95 (R636), 448

外部装置

[external unit], 152, 363, 153, 183

外部手続

[external procedure], 11, 217, 363, 47, 404,

435

外部ファイル

[external file], 147, 363

—–

の集合

, 147

—–

の接続

, 153

外部副プログラム

[external subprogram], 7 (R203),

10, 363, 426

ガウス記号

, 251, 271

書出し

[writing], 145

拡張演算

[extension operation], 103

拡張演算子

[extension operator], 103

拡張型

[extension type], 50, 363

拡張可能型

[extensible type], 50, 363

拡張組込み演算子

[extended-intrinsic-op], 22 (R312),

429

確定

[defined], 17, 363, 357

確定可能

[definable], 363, 67

下限

[lower-bound], 64 (R512), 93, 252, 279, 440

加減演算子

[add-op], 99 (R709), 448

加減演算対象

[add-operand], 99 (R706), 448

囲み記号

[delimiter], 189, 202, 206, 210, 394

2

連の

—–, 202

仮称指定

[rename], 213 (R1111), 403, 465

下線

[underscore], 20 (R303), 1, 429

[type], 14, 26, 363, 58, 62, 103, 376

—–

の変換

, 32, 35, 102, 111, 113, 117, 118, 142,

245, 251

—–

の変更

, 305

基本実数

—–, 31

基本整数

—–, 29

基本複素数

—–, 32

基本文字

—–, 33

基本論理

—–, 36

組込み

—–, 14, 28

実数

—–, 30

数値

—–, 366

数値連続

—–, 38

整数

—–, 29

データ

—–, 368

倍精度実数

—–, 31

派生

—–, 14, 36, 369, 399

複素数

—–, 32

文字

—–, 33

文字連続

—–, 38

論理

—–, 36

型が適合しない

[type incompatible], 62

型が適合する

[type compatible], 62, 363

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

475

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

型規則

, 76, 106

暗黙の

—–, 76, 106

型指定子

[type specifier], 26 (R401), 430

型宣言文

[type declaration statement], 58 (R501), 363,

438

型属性指定子

, 37 (R431), 432

型束縛手続

[type-bound procedure], 48, 363

型束縛手続引用の解決

, 239

型束縛手続部

, 47 (R448), 435

型定義属性宣言文

, 37 (R432), 433

型パラメタ

[type parameter], 14, 363, 27, 58, 103, 347

型パラメタキーワード

[type parameter keyword], 17

型パラメタ指定

, 52 (R456), 436

型パラメタ順序

[type parameter order], 41, 363

型パラメタ宣言

, 40 (R436), 433

型パラメタ属性指定子

, 40 (R437), 433

型パラメタ値

[type parameter value], 27 (R402), 430

型パラメタ定義文

, 40 (R435), 433

型パラメタ問合せ

[type parameter inquiry], 87 (R615),

446

型保持文

, 138 (R823), 454

型名

[type-name], 37, 432, 433

括弧

[parenthesis], 109, 110

括弧類

[delimiter], 23

合致

[conformance], 363

活動状態

[active], 141

仮データ実体

[dummy data object], 363, 217, 229

仮手続

[dummy procedure], 217, 363, 232

仮配列

[dummy array], 363

仮引数

[dummy argument], 242 (R1233), 216, 364,

217, 229, 232, 233, 407, 470

仮引数名

[dummy-arg-name], 240 (R1226), 469

仮ポインタ

[dummy pointer], 407

間隔(浮動小数点数の)

, 253, 297, 302

関係演算子

[rel-op], 100 (R713), 448

関係組込み演算

[relational intrinsic operation], 102,

111, 113

関係組込み演算子

[relational intrinsic operator], 102

関係段階式

[level-4-expr], 100 (R712), 448

関数

[function], 11, 364

種別

—–, 252

数学

—–, 251

数値

—–, 251

問合せ

—–, 248

浮動小数点数操作

—–, 253

—–, 217, 347

変形

—–, 248

文字

—–, 251

要素別処理組込み

—–, 248

関数引用

[function reference], 228 (R1217), 15, 108,

236, 386, 468

関数結果

[function result], 364

関数副プログラム

[function subprogram], 239 (R1223),

364, 469

キーワード

[keyword], 17 (R215), 364, 428

記憶単位

[storage unit], 354, 364

記憶場所

[storage], 16

記憶列

[storage sequence], 354, 364

—–

の大きさ

, 83, 354

大きさゼロの

—–, 354

記憶列結合

[storage association], 354, 364, 80

記憶列結合している

[storage associated], 354, 355

記憶列の大きさ

[size of a storage sequence], 354

記憶列共有結合

, 81

規格合致プログラム

[standard-conforming program],

2, 364

刻み幅

[stride], 88 (R621), 90, 364, 125, 446

記述法

[notation], 4

既存要素

[pre-existing entity], 356

擬似乱数

, 254, 294

基数

, 252, 294

擬寸法仮配列

F77

→ 大きさ引継ぎ配列

, 64, 65, 362

基底型

[base type], 50, 364

基底実体

[base object], 86

基本実数型

[default real], 31

基本整数型

[default integer], 29

基本複素数型

[default complex], 32

基本文字型

[default character], 33

基本文字式

[default-char-expr], 104 (R726), 449

基本文字変数

[default-char-variable], 85 (R607), 445

基本論理型

[default logical], 36

基本論理変数

[default-logical-variable], 85 (R605), 445

逆斜線

, 20

休止状態

[inactive], 141

急衰下位けたあふれ

, 312

[line], 23, 364

共通ブロック

[common block], 82, 364, 84, 345, 399

—–

の大きさ

, 83

共通ブロック記憶列

[common block storage sequence],

83

共通ブロック結合

, 83

共通ブロック実体

[common-block-object], 82 (R558),

444

協定世界時

, 267

共有する

[share], 141

共有端末

DO

構文

[shared-term-do-construct], 141

(R840), 456

共有

DO

端末文

[do-term-shared-stmt], 141 (R842),

141–143, 456

行列積

, 253

局所識別子

[local identifier], 344

局所変数

[local variable], 15, 364

局所要素

[local entity], 364

局所利用者定義演算

, 213 (R1114), 465, 465

局所名

[local-name], 213, 465

虚部

[imaginary part], 32 (R423), 15, 258, 431

許容形

F77

→ 許容記録形

, 147

許容記録形集合

[set of allowed forms], 147, 182

許容記録長集合

[set of allowed record lengths], 147

許容操作集合

[set of allowed actions], 147, 155, 184

許容探査法集合

[set of allowed access methods], 147,

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

476

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

184, 185

切捨て

[truncation], 251, 276

切捨て → ガウス記号

, 271

切捨て移動

, 254, 269

記録

[record], 146, 364

—–

の長さ

, 157

—–

の番号

, 163

現在

—–, 149

書式付き

—–, 146

書式なし

—–, 146

直後

—–, 149

直前

—–, 149

ファイル終了

—–, 146

記録形

, 156, 395

記録終了条件

[end-of-record condition], 185

記録長

[record length], 184

記録番号

[record number], 148, 183

記録ファイル

[record file], 145

近似方法

[approximation method], 30, 376

空状態

[disassociated], 16, 364, 120, 353

空初期化

, 59 (R507), 438

空の列

, 57

空白

[space], 23–25, 209, 252, 258

—–

の解釈

, 193, 202

—–

の削除

, 252, 280, 306

—–

の挿入

, 200, 204, 206, 208, 210

—–

を補う

, 169, 198

空白解釈編集記述子

[blank-interp-edit-desc], 191 (R1016),

464

区別可能

[distinguishable], 346

組込み

[intrinsic], 18, 364

組込みでないモジュール

[nonintrinsic module], 211

組込みモジュール

[intrinsic module], 211

組込み演算

[intrinsic operation], 101, 109

—–

の解釈

, 111

関係

—–, 111, 113

数値

—–, 102, 109, 112

数値関係

—–, 102

文字

—–, 111, 112

文字関係

—–, 102

論理

—–, 111, 114

組込み演算子

[intrinsic-operator], 21 (R310), 102, 429

拡張

—–, 22, 429

関係

—–, 102

数値

—–, 102

文字

—–, 102

論理

—–, 102

組込み型

[intrinsic type], 14, 28

組込み関数

[intrinsic function], 248

—–

の個別名

, 254

組込み型指定子

, 28 (R403), 430

組込み手続

[intrinsic procedure], 217, 248

組込み代入文

[intrinsic assignment statement], 117,

117

数値

—–, 117

配列

—–, 117

派生型

—–, 117

文字

—–, 117

論理

—–, 117

組込み単項演算

[intrinsic unary operation], 101

組込み

2

項演算

[intrinsic binary operation], 101

クラス

[class], 364, 62

繰返し数(

DO

文の)

[iteration count], 142

計算形

GO TO

[computed-goto-stmt], 144 (R846),

373, 456

形式(プログラム

—–

, 23

継承

[inherit], 50, 364

継承結合

[inheritance association], 364

継承結合されている

[inheritance associated], 51

形状(配列の)

[shape], 16, 64, 90, 103, 232, 252, 296,

300, 364, 418

形状適合

[shape conformance], 105

形状引継ぎ配列

[assumed-shape array], 65, 364, 231

形状無指定配列

[deferred-shape array], 65

形状明示配列

[explicit-shape array], 64, 364

継続行

[continuation line], 25

けたあふれ

, 312

けた移動

, 253, 277

循環

—–, 253, 278

けた移動数(編集記述子の)

, 190, 194, 196, 199

結果

, 104

結果変数

[result variable], 11, 365, 241

結果名

[result-name], 240, 470

結合

[association], 136 (R818), 17, 365, 120, 229, 232,

348, 454

親子

—–, 39, 348, 362, 413

記憶列

—–, 80, 354, 364

記憶列共有

—–, 81

共通ブロック

—–, 83

参照

—–, 348, 365

順序

—–, 232

スカラデータ実体の

—–, 355

動的

—–, 91

名前

—–, 348, 368

引数

—–, 348, 369, 406

ポインタ

—–, 352, 370, 385

結合実体

[equivalence-object], 80 (R556), 444

結合している

[associated], 352

結合状態

, 70, 95, 96, 116, 120, 260, 333, 352, 353, 360,

377, 385

結合対応

[equivalence-set], 80 (R555), 444

結合名

[associate name], 136, 365

結合要素

[associating entity], 356

限界値(

DO

変数の)

, 142

原型

[prototype], 365

言語束縛指定子

, 63 (R509), 440

言語要素

[entity], 365

言語

C

の国際規格

, 7

現在記録

[current record], 149

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

477

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

公開

[PUBLIC], 63

公開(参照許可属性が)

, 71

合計

, 303

構造型

F95

→ 派生型

F2003

, 14, 369

構造構文

[construct], 365

構造体型

[struct], 365

構造

FORALL

[forall-construct-stmt], 125 (R753),

452

構造

WHERE

[where-construct-stmt], 123 (R745),

388, 451

構文概念

[syntactic class], 4, 5

構文要素

[syntactic item], 4

互換性

, 3

固定形式

[fixed source form], 25, 374

子データ転送文

[child data transfer statement], 169

個別引用仕様

[specific interface], 220

個別引用仕様宣言

[specific interface block], 220

個別束縛

, 47 (R451), 435

個別名

[specific name], 248, 254

構造体

[structure], 14, 365, 15, 62

構造体構成子

[structure constructor], 53 (R457), 365,

378, 436

構造体成分

[structure component], 87 (R614), 86, 365,

15, 384, 446

構文規則

[syntax rule], 4, 2, 5, 426

構文結合

[construct association], 365, 352

構文素

[lexical token], 20, 365

構文内要素

[construct entity], 344, 365, 347

構文文脈

, 360

コロン

[colon], 65

2

—–, 34, 42, 47, 55, 60, 432, 434, 435, 437,

439

コロン編集

, 201

再帰的

[recursive], 241, 378

再帰入出力文

[recursive input/output statement], 187

最小指数

, 252, 286

最小値

[smallest value], 251–253, 286, 287

—–

の位置

, 254

最大指数

, 252, 283

最大値

[maximum value], 251–253, 283, 284

—–

の位置

, 254

最適化

, 236, 383, 407

サブルーチン

[subroutine], 11, 365, 120

要素別処理

—–, 248

サブルーチン引用

[subroutine reference], 216, 236

サブルーチン副プログラム

[subroutine subprogram],

242 (R1231), 365, 470

作用子

[affector], 162

残差平方和

, 423

算術

IF

[arithmetic-if-stmt], 145 (R847), 372, 456

参照許可指定子

[access-spec], 63 (R508), 440

参照許可宣言文

[access-stmt], 71 (R518), 441

参照許可属性

[accessibility attribute], 62, 376, 398

参照結合

[use association], 348, 365, 212

参照結合している(モジュールの要素と)

, 212

参照限定

[only], 213 (R1112), 465

参照限定対象名

[only-use-name], 213 (R1113), 465

参照対象

[access-id], 71 (R519), 441

参照はずし

[dereference], 67

参照利用者定義演算

, 213 (R1115), 465, 465

[expression], 101 (R722), 15, 97, 365, 449

—–

の評価

, 110

初期値

—–, 107

制限

—–, 105

選別

—–, 420

ファイル名記述

—–, 181

識別子

[identifier], 152, 161, 167, 246, 456, 459, 472

総称

—–, 222

装置

—–, 167

次元

[dimension], 16, 58, 64–66, 254, 279, 301, 306,

366

次元数

[rank], 16, 365, 58, 64, 65, 85, 86, 231, 232,

440

時刻

[time], 254

時差

, 267

指示先

[target], 16, 365, 91, 387, 407

—–

の解放

, 97

—–

の割付け

, 94

指示状態

[pointer associated], 16, 365

四捨五入

[nearest whole number], 251, 259, 290

辞書順

, 252

指数

[exponential], 252

指数範囲

, 252, 299, 376

指数部

[exponent part], 31 (R420), 195, 196, 250, 253,

431

指数部英字

[exponent-letter], 31 (R419), 431

事前接続

[preconnection], 153, 365, 394, 395

始値(

DO

変数の)

, 142

実行可能プログラム

F90

→ プログラム

, 7, 11, 426

実行環境

, 409

実行構文

[executable construct], 9 (R213), 365, 13,

131, 427

実行時の型

[dynamic type], 62, 365

実行周期

[execution cycle], 142

実行端末

DO

構文

[action-term-do-construct], 141

(R836), 456

実行部

[execution-part], 8 (R208), 427

実行部構文

[execution-part-construct], 8 (R209), 427

実行文

[executable statement], 12, 365

実行

DO

端末文

[do-term-action-stmt], 141 (R838),

143, 456

実在する

[present], 233

10

進指数

[decimal exponent], 195, 196

10

進指数範囲

, 29, 30, 295, 299, 376

10

進精度

, 30, 299, 376

10

進の値

[decimal value], 197

実数

, 250

実数型

[real type], 30

基本

—–, 31

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

478

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

倍精度

—–, 31

実体

[object], 14, 365, 28

—–

の定義状態

, 357

大きさゼロの

—–, 355

データ

—–, 28

実体特定子

[object designator], 17, 365

実体名

[object-name], 59 (R505), 71, 441, 438

実定数表現

[signed-real-literal-constant], 31 (R417),

431

任意符号付き

—–, 31, 431

実引数

[actual argument], 228 (R1221), 216, 365, 229,

232, 468

実引数指定子

[actual-arg-spec], 228 (R1220), 468

実部

[real part], 32 (R422), 15, 431

… 指定

, 6

始点(ファイルの)

, 149, 157

自動割付け実体

, 60

大きさゼロの

—–, 358

自動割付けデータ実体

[automatic data object], 61, 365

自動割付け配列

[automatic array], 65, 419

指標値の有効な組合せ

[active combination of index-

name value], 128

斜線編集

, 201

自由形式

[free source form], 23

終値パラメタ

F77

→ 限界値

, 142

終点(ファイルの)

, 149

重複部分配列 → 重

(ちょう)

複部分配列

, 91, 367

終了符号

[stop-code], 145 (R850), 456

16

進数字

[hex-digit], 30 (R415), 194, 431

16

進定数表現

[hex-constant], 30 (R414), 431

授受特性

[intent], 366, 66

授受特性指定

[intent-spec], 66 (R517), 441

出力項目

[output-item], 163 (R915), 459

出力並び

INQUIRE

[inquire by output list], 179,

185

出力文

[output statement], 145

主プログラム

[main program], 7 (R1101), 211, 366,

13, 396, 464

種別

[kind], 29 (R407), 30, 32, 33, 36, 430

種別型パラメタ

[kind type parameter], 14, 366

種別型パラメタ

F90

→ 種別パラメタ

F95

→ 種別

型パラメタ

F2003

, 14

種別型パラメタ選択子

, 29 (R404), 430

種別型パラメタ値

, 252

種別関数

, 252

種別値

, 29

終了位置

[ending point], 86

循環移動

, 254, 265, 421

循環けた移動

, 253, 278

順序結合

[sequence association], 232

純粋手続

[pure procedure], 245, 366

純粋副プログラム

[pure subprogram], 245

順対応引数

[positional argument], 249

順番探査

[sequential access], 147, 150, 155, 181

順番探査入出力文

[sequential access input/output state-

ment], 163

上下限

[bounds], 366, 65, 89, 90

引継ぎ

—–, 65, 440

無指定

—–, 65, 440

明示

—–, 64, 440

割付け

—–, 92, 447

上下限再配置

, 121 (R738), 450

上下限指定

, 121 (R737), 450

上限

[upper-bound], 64 (R513), 93, 252, 306, 440

乗算(行列の)

, 282

乗除演算子

[mult-op], 99 (R708), 448

乗除演算対象

[mult-operand], 99 (R704), 448

小数点記号

[decimal symbol], 192, 366

小数点編集記述子

, 191 (R1018), 464

小数部

[fraction part], 253

状態

, 157

活動

—–, 141

休止

—–, 141

—–, 16, 120, 364

結合

—–, 70, 95, 96, 116, 120, 260, 352, 353, 360,

377, 385

指示

—–, 16, 365

実体の定義

—–, 204, 355, 357, 398

ポインタ結合

—–, 352

ポインタの定義

—–, 353

要素の定義

—–, 70, 76

割付け

—–, 70, 95, 253

DO

構文の

—–, 141

状態変数

[stat-variable], 92 (R625), 447

剰余

[remainder], 251, 288

初期化項目

[data-stmt-object], 72 (R526), 442

初期化対応

[data-stmt-set], 72 (R525), 441

初期化

DO

形項目

[data-i-do-object], 72 (R528), 442

初期化

DO

形反復

[data-implied-do], 72 (R527), 442

初期化

DO

変数

[data-i-do-variable], 72 (R529), 442

初期確定

[initially defined], 357

初期値式

[initialization expression], 107 (R730), 449

初期値指定

[initialization], 59 (R506), 438

初期値指定式

, 92 (R627), 447

初期値設定副プログラム

F77

→ 初期値設定プログラ

ム単位

, 215, 363

初期値設定プログラム単位

[block data program unit],

215 (R1116), 366, 396, 465

初期値定数

[data-stmt-constant], 73 (R532), 442

初期値パラメタ

F77

→ 始値

, 142

初期値反復数

[data-stmt-repeat], 73 (R531), 442

初期値表現

[data-stmt-value], 73 (R530), 442

除算

[division], 112

除算(整数型の)

, 110, 112

書式

, 167

並び

—–, 167

変数群

—–, 167

書式項目

[format-item], 189 (R1003), 462

書式識別子

[format specifier], 161 (R913), 459

書式仕様

[format-specification], 188 (R1002), 462

空の

—–, 191

書式制御

[format control], 191

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

479

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

書式付き記録

[formatted record], 146

書式付きデータ転送

[formatted data transfer], 168,

191

書式付き入出力

[formatted input/output], 182

書式付き入出力文

[formatted input/output statement],

160, 156

書式なし記録

[unformatted record], 146

書式なしデータ転送

[unformatted data transfer], 168

書式なし入出力

[unformatted input/output], 182

書式なし入出力文

[unformatted input/output state-

ment], 160, 156

書式反復数

[repeat specification], 189

処理系

[processor], 1, 366

処理系依存

[processor dependent], 2, 366

処理系大小順序

, 251

数学関数

, 251

数字

[digit], 19

数字列

[digit-string], 29 (R409), 430

任意符号付き

—–, 29, 430

数体系

, 249, 250

数値演算子

, 99, 102

数値型

[numeric type], 28, 366

数値関係組込み演算

[numeric relational intrinsic op-

eration], 102

数値関数

, 251

数値記憶単位

[numeric storage unit], 354, 366

数値組込み演算

[numeric intrinsic operation], 102, 109,

112

数値組込み演算子

[numeric intrinsic operator], 102

数値組込み代入文

[numeric intrinsic assignment state-

ment], 117

数値式

[numeric-expr], 104 (R728), 449

数値段階式

[level-2-expr], 99 (R706), 448

数値問合せ関数

, 252

数値連続型

[numeric sequence type], 38

スカラ

[scalar], 16, 85, 366

スカラ …

, 5, 426

名前付き

—–, 15

図形文字

[graphic character], 19

寸法

[extent], 16, 366, 65, 301

正規

[normal], 313

制御情報並び

[control information list], 159

制御配列

[control mask], 124, 366

制御文字

[control character], 19

制御編集記述子

[control edit descriptor], 190 (R1011),

189, 200, 463

制限式

[restricted expression], 105

整構造

DO

構文

[block-do-construct], 140 (R826), 455

整構造

DO

端末文

[end-do], 140 (R833), 141, 143, 455

整合配列

F77

→ (寸法可変の)形状明示仮配列

, 64,

364

整数

, 250

整数型

[integer type], 29

基本

—–, 29

整数式

[int-expr], 104 (R727), 449

整数初期値式

[int-initialization-expr], 107 (R732), 450

生成(ファイルの)

, 147, 394

整定数

[integer constant], 21 (R308), 429

整定数表現

[signed-int-literal-constant], 29 (R406), 430

任意符号付き

—–, 29, 430

精度

[precision], 252, 293, 299, 375, 376

整部分定数

, 73 (R533), 443

成分

[component], 366, 15, 347

成分キーワード

[component keyword], 17

成分指定

, 53 (R458), 436

成分順序

[component order], 45, 366

成分初期値指定

[component-initialization], 42 (R444),

433

成分宣言

[component-decl], 42 (R442), 433

成分選択子

, 17

成分属性指定子

[component-attr-spec], 41 (R441), 433

成分値

[component value], 52

成分定義部

, 41 (R438), 433

成分定義文

[component-def-stmt], 41 (R439), 433

成分データ源

, 53 (R459), 436

成分配列形状指定

[component-array-spec], 42 (R443),

433

成分

PRIVATE

, 46 (R447), 435

整変数

[int-variable], 85 (R608), 445

制約

, 2, 5, 7

積(全配列要素の)

, 254

—–

の和

, 423

接続

[connection], 153, 391, 394

接続されている

[connected], 366

外部装置に

—–, 153, 183

ファイルが

—–, 181

接続指定子

[connect-spec], 154 (R905), 457

絶対値

[absolute value], 251, 257

ゼロ(符号付き)

, 29, 193

宣言

[declaration], 17

宣言型指定子

[declaration type specifier], 58 (R502),

61, 438

宣言関数

[specification function], 106, 366

宣言式

[specification expression], 105 (R734), 366, 449

宣言時の型

[declared type], 62, 366

宣言問合せ

[specification inquiry], 106

宣言構文

[declaration-construct], 8 (R207), 426

宣言部

[specification-part], 8 (R204), 426

漸次下位けたあふれ

, 312

前進入出力

, 161

前進入出力文

[advancing input/output statement], 149

先祖成分

[ancestor component], 51

全体結合している(スカラ要素が)

[totally associated],

355

全体配列

[whole array], 88, 366, 418

選択子

[selector], 136 (R819), 366, 454

成分

—–, 17

場合

—–, 134, 453

配列要素

—–, 17

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

480

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

部分配列

—–, 17

部分列

—–, 17

文字パラメタ

—–, 33, 431

… 選択子

, 6

選択実行

, 389

選択戻り

, 373

選択戻り指定子

[alt-return-spec], 228 (R1222), 468

選別式

[mask-expr], 123 (R748), 420, 451

選別

ELSEWHERE

[masked-elsewhere-stmt], 123

(R749), 388, 451

相互利用可能

[interoperable], 336, 338–340, 367

相互利用可能性

[interoperability], 331, 409

操作(ファイルの)

, 155, 184

総称引用仕様

[generic interface], 222, 367

総称引用仕様宣言

[generic interface block], 220, 367

総称型束縛手続

, 380

総称指定

[generic-spec], 219 (R1207), 47, 435, 466

総称識別子

[generic identifier], 222, 367

総称束縛

, 47 (R452), 435

総称名

[generic name], 222, 248, 378

装置

[unit], 152

装置識別子

[unit identifier], 152 (R901), 167, 456

装置番号

, 187, 344

装置

INQUIRE

[inquire by unit], 179

装置

INQUIRE

[INQUIRE by unit statement], 180,

182, 185

増分値(

DO

変数の)

, 142

添字

[subscript], 88 (R618), 367, 6, 89, 90, 125, 446

添字式

F77

→ 添字

, 88, 367

添字順序値

, 89

添字の値

F77

→ 添字順序値

, 89

添字三つ組

[subscript triplet], 88 (R620), 90, 367, 446

属する

[belong], 131, 367

属性

[attribute], 58, 367, 62

属性指定子

[attr-spec], 58 (R503), 438

属性宣言文

, 71

側線

, 1

束縛

, 347

束縛属性

, 47 (R453), 435

束縛名

[binding name], 48

束縛要素

, 71 (R523), 441

束縛ラベル

[binding label], 342, 343, 367

束縛

PRIVATE

, 47 (R449), 435

存在する(ファイルが)

[exist], 147, 182

存在する(外部装置が)

[exist], 153

大域識別子

[global identifier], 344

大域的データ

, 399

大域要素

[global entity], 344, 367

待機指定子

, 176 (R922), 460

待機操作

[wait operation], 177

大小順序

[collating sequence], 35, 367

処理系

—–, 252

ASCII —–, 252

代入

, 28, 116, 118, 119

配列選別

—–, 123

ポインタ

—–, 91, 370

利用者定義

—–, 224

代入文

[assignment statement], 117 (R734), 367, 450

組込み

—–, 117

ポインタ

—–, 120, 370, 385

文字

—–, 386

利用者定義

—–, 119, 120, 217, 236, 371

他言語結合

[linkage association], 367, 351

多相的

[polymorphic], 62, 367

多相的引数結合

, 408

単項演算

, 103

組込み

—–, 101

単項段階式

[level-1-expr], 98 (R702), 448

探査

[access], 147

順番

—–, 147, 155, 181

直接

—–, 148, 155, 181

流れ

—–, 148, 155, 181

探査法(ファイルの)

, 155, 184, 185, 391

単純実行文

[action statement], 9 (R214), 367, 428

単純宣言文

[specification-stmt], 9 (R212), 427

単純

DO

[nonlabel-do-stmt], 140 (R829), 455

単純

FORALL

[forall-stmt], 130 (R759), 388, 452

単純

GO TO

F77

GO TO

, 144

単純

WHERE

[where-stmt], 123 (R743), 108, 451

端末文

[terminal statement], 140, 455

共有

DO —–, 141–143, 456

実行

DO —–, 141, 143, 456

整構造

DO —–, 140, 141, 143, 455

小さい文字

, 6

遅延束縛

[deferred binding], 48, 367

注釈

[comment], 24, 25

抽象引用仕様

[abstract interface], 218

抽象引用仕様宣言

[abstract interface block], 220

抽象型

[abstract type], 50, 367, 48, 377

重複代入

[many-to-one assignment], 130

重複部分配列

[many-one array section], 91, 367

直後記録

[next record], 149

直接拡張型

[extended type], 50, 367

直接探査

[direct access], 148, 155, 181

直接探査入出力文

[direct access input/output state-

ment], 163

直前記録

[preceding record], 149

通貨記号

[currency symbol], 19, 20

定義

[definition], 17

定義状態

[definition status], 70, 353

実体の

—–, 204, 355, 357, 398

ポインタの

—–, 353

要素の

—–, 70, 76

停止

, 313, 321, 324

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

481

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

停止モード

, 317

低水準構文

[low-level syntax], 20

定数

[constant], 21 (R305), 15, 367, 429

初期値

—–, 73, 442

—–, 21, 429

名前付き

—–, 15, 21, 68, 88, 369, 376, 429

配列

—–, 419

部分

—–, 15

文字

—–, 21, 429

定数

F77

→ 定数表現

, 15, 21

定数表現

[literal constant], 21 (R306), 15, 367, 429

定数名

F77

→ 名前付き定数

, 15, 17, 21

定配列

F77

→ (寸法一定の)形状明示配列

, 64, 364

停留入出力

, 161, 391

停留入出力文

[nonadvancing input/output statement],

149

データ

[datum], 14, 367

—–

の値

, 14

—–

の探査

, 147

データ型

[data type], 368

データ参照

[data-ref], 86 (R612), 446

データ指示先

, 121 (R739), 450

データ実体

[data object], 14, 368, 28

—–

の使用

, 84

スカラ

—–

の結合

, 355

データ実体引用

[data object reference], 18

データ成分定義文

, 41 (R440), 433

データ抽象化

, 400

データ転送

[data transfer], 145, 150, 165–168

書式付き

—–, 168

書式なし

—–, 168

データ転送指定子

[io-control-spec], 159 (R912), 458

データ転送出力文

[data transfer output statement],

145, 159

データ転送入力文

[data transfer input statement], 145,

159

データ編集記述子

[data edit descriptor], 189 (R1005),

192, 462

データポインタ

[data pointer], 16

—–

の配列

, 16

データポインタ実体

, 120 (R736), 450

データ要素

[data entity], 14, 368

データ要素宣言

[entity-decl], 59 (R504), 438

適合規則

, 105

手続

[procedure], 11, 368, 216

組込み

—–, 248

—–

の特性

, 217

手続引用

[procedure reference], 18, 227

手続引用仕様

[procedure interface], 225 (R1212), 368,

219, 467

手続引用仕様宣言

[procedure interface block], 219

手続言語束縛指定子

, 240 (R1225), 469

手続指示先

, 121 (R742), 451

手続成分参照

, 121 (R741), 451

手続成分属性指定子

, 42 (R446), 434

手続成分定義文

, 42 (R445), 434

手続接頭句

, 240 (R1227), 242, 470, 469

手続接頭辞

, 240 (R1228), 469

手続接尾句

, 240 (R1229), 470

手続宣言

, 226 (R1214), 467

手続宣言文

, 225 (R1211), 467

手続属性指定

, 225 (R1213), 467

手続束縛文

, 47 (R450), 435

手続定義

, 239, 244

手続特定子

[procedure designator], 228 (R1219), 17,

368, 468

手続の特性

[characteristics of a procedure], 217

手続副プログラム

F77

→ 副プログラム

, 10, 369

手続ポインタ

[procedure pointer], 75 (R545), 16, 443

手続ポインタ実体

, 121 (R740), 451

転置

, 254

問合せ関数

[inquiry function], 252

数値

—–, 252

配列

—–, 252

問合せ指定子

[inquiry specifier], 180 (R930), 461

—–

の制限

, 185

当該実体仮引数

[passed-object dummy argument], 44,

368, 229

動的結合

, 91

特殊文字

[special character], 20

特性

[characteristics], 368

時計

, 266

特定子

[designator], 84 (R603), 17, 368, 445

飛越し

[branching], 144

飛び先文

[branch target statement], 144

内郭共有

DO

構文

[inner-shared-do-construct], 141

(R841), 456

内積

, 253, 328

内部装置

[internal unit], 152

内部手続

[internal procedure], 11, 217, 368

内部の値

[internal value], 197

内部ファイル

[internal file], 368, 151

内部ファイル変数

, 152 (R903), 457

内部副プログラム

[internal subprogram], 9 (R211), 10,

368, 13, 427

内部副プログラム部

[internal-subprogram-part], 8

(R210), 427

長さ(文字列の)

[length], 33, 371

長さ型パラメタ

F90

→ 文字長パラメタ

, 14

長さ型パラメタ

[length type parameter], 27

長さ型パラメタ

F2003

, 27

長さゼロ

, 35, 73, 93, 108, 109, 117, 357, 375

流れ探査

[stream access], 148, 155, 181

流れ探査入出力文

[stream access input/output state-

ment], 163

流れファイル

[stream file], 145

名前

[name], 20 (R304), 17, 368, 377, 396, 429

名前

-

値対応

[name-value subsequence], 206

名前結合

[name association], 348, 368

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

482

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

名前付き

[named], 368

名前付き共通ブロック

[named common block], 82, 84

名前付きスカラ

, 15

名前付き定数

[named constant], 21 (R307), 15, 369,

68, 88, 376, 429

名前付き定数定義

[named-constant-def], 75 (R539),

443

名前付き手続引用の解決

, 236

名前付き配列

, 15, 88

名前付きファイル

[named file], 147

… 並び

, 5, 426

並び出力

, 205

並び書式

[list-directed format], 167, 203

並び入出力文

[list-directed input/output statement],

161

並び入力

, 203

並びによる書式

F77

→ 並び書式

, 167, 203

ナル文字

[null], 333, 340

2

項演算(組込み

—–

, 101

2

進数字

, 249

2

進定数表現

[binary-constant], 30 (R412), 430

入出力

, 145

—–

状態 →

IOSTAT

指定子

, 186

入出力項目並び

[io-implied-do-object-list], 163, 167,

191

入出力文

[input/output statement], 145

順番探査

—–, 163

書式付き

—–, 160

書式なし

—–, 160

前進

—–, 149

直接探査

—–, 163

停留

—–, 149

流れ探査

—–, 163

並び

—–, 161

変数群

—–, 161

入出力メッセージ変数

, 155 (R907), 457

入出力

DO

形項目

[io-implied-do-object], 163 (R917),

459

入出力

DO

形反復

[io-implied-do], 163 (R916), 459

入出力

DO

制御

[io-implied-do-control], 163 (R918),

459

入力項目

[input-item], 163 (R914), 459

入力文

[input statement], 145

2

連アポストロフィ

, 34, 206, 210

2

連引用符

, 35, 206, 210

2

連コロン

, 34, 42, 47, 55, 60, 432, 434, 435, 437, 439

任意符号付き実定数表現

, 31 (R416), 431

任意符号付き数字列

[signed-digit-string], 29 (R408),

430

任意符号付き整定数表現

, 29 (R405), 430

ノルム

, 423

場合式

[case-expr], 134 (R812), 453

場合指標

[case index], 134

場合選択子

[case-selector], 134 (R813), 453

場合値

[case-value], 134 (R815), 453

場合値範囲

[case-value-range], 134 (R814), 453

廃止事項

[deleted feature], 6, 369, 2, 372

廃止予定事項

[obsolescent feature], 6, 369, 2, 372

倍精度実数型

[double precision real], 31

排他的論理和

, 253, 276

配列

[array], 16, 88, 369, 118, 418, 419

—–

についての関数

, 253, 254

1

次元

—–, 16, 56, 57, 90, 294, 300, 419

大きさゼロの

—–, 73, 108, 109, 117, 357, 358

大きさ引継ぎ

—–, 65, 66, 362

—–, 363

形状引継ぎ

—–, 65, 231

形状無指定

—–, 65

形状明示

—–, 64, 364

自動割付け

—–, 65, 419

全体

—–, 88, 366, 418

重複部分

—–, 91, 367

データポインタの

—–, 16

名前付き

—–, 15, 88

部分

—–, 16, 88, 90, 369, 418, 446

割付け

—–, 65, 399

配列組込み代入文

[array intrinsic assignment state-

ment], 117

配列形状指定

[array-spec], 64 (R510), 440

配列構成項目

[ac-value], 56 (R469), 437

配列構成子

[array constructor], 56 (R465), 419, 437

配列構成子指定

, 56 (R466), 437

配列構成

DO

形反復

[ac-implied-do], 56 (R470), 437

配列構成

DO

制御

[ac-implied-do-control], 56 (R471),

437

配列構成

DO

変数

[ac-do-variable], 56 (R472), 437

配列式

, 423

配列選別代入

[masked array assignment], 123

配列定数

, 419

配列部分実体

, 90

配列ポインタ

[array pointer], 65, 369

配列名

[array-name], 74, 443

配列要素

[array element], 88 (R616), 16, 369, 446

—–

の積

, 254

配列要素順序

[array element order], 89

配列要素選択子

, 17

配列要素 特定子

, 15–17

配列要素名

F77

→ 配列要素 特定子

, 15–17

派生型

[derived type], 14, 369, 36, 399

派生型組込み代入文

[derived-type intrinsic assignment

statement], 117

派生型指定子

, 52 (R455), 436

派生型定義

, 36 (R429), 39, 432

派生型入出力総称指定

, 219 (R1207), 47, 52, 435, 466

派生型入出力手続参照の解決

, 175

派生型変数型指定

[dtv-type-spec], 170 (R920), 460

パッケージ化

, 397, 400

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

483

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

8

進定数表現

[octal-constant], 30 (R413), 431

範囲

[range], 141

反復可能編集記述子

F77

→ データ編集記述子

, 189,

192

反復仕様

F77

→ 書式反復数

, 189

反復不能編集記述子

F77

→ 制御編集記述子

, 190, 200

引数

[argument], 369

—–, 217, 232, 233, 242, 364, 407, 470

—–, 228, 232, 365, 468

順対応

—–, 249

選別

—–, 249

引数キーワード

[argument keyword], 17, 249, 347

引数結合

[argument association], 369, 229, 348, 406

引継ぎ型パラメタ

[assumed type parameter], 28

引継ぎ上下限

[assumed-shape-spec], 65 (R514), 440

非公開(参照許可属性が)

, 71

被参照型

[referenced type], 340

非実行文

[nonexecutable statement], 12, 369

10

進定数表現

[boz-literal-constant], 30 (R411), 430

非数

[NaN], 313, 369, 318, 325

左角括弧

[left bracket], 56 (R467), 437

左詰め

, 258

日付

[date], 254, 266

ビット

, 249

ビットごとの論理積

, 274

ビットごとの論理和

, 277

排他的

—–, 276

ビット数

, 262

ビット操作手続

, 253

否定演算子

[not-op], 100 (R718), 449

否定制御配列

[pending control mask], 124

非保存要素

[unsaved entity], 70

表現可能文字

[representable character], 34

表現方法

[representation method], 29, 30, 33, 36

標準組込み手続

, 18

標準組込みモジュール

, 18

ファイル

[file], 369

—–

の始点

, 157

—–

の消去

, 147

—–

の状態

, 157

—–

の生成

, 147, 394

—–

の接続

, 152, 158, 391

—–

の存在

, 147, 391

—–

の探査法

, 147

—–

の名前

, 26, 147, 156, 181, 182

ファイル位置

[file position], 147, 149, 150, 200, 392

ファイル位置付け文

[file positioning statement], 145,

177

ファイル記憶単位

[file storage unit], 369, 151

ファイル終了記録

[endfile record], 146, 146, 178, 184,

392

ファイル終了条件

[end-of-file condition], 185

ファイル接続文

[file connection statement], 145

ファイル装置番号

, 152 (R902), 457

ファイル問合せ文

[file inquiry statement], 145, 179

ファイル名

[file name], 156, 391

ファイル名記述式

[file-name-expr], 155 (R906), 181,

457

ファイル

INQUIRE

[inquire by file], 179

ファイル

INQUIRE

[INQUIRE by file statement],

180, 182, 185

フーリエ級数

, 419, 420

複製

, 302

複素数型

[complex type], 32

基本

—–, 32

複素定数表現

[complex-literal-constant], 32 (R421),

431

副プログラム

[subprogram], 369, 10, 217, 239

—–

の分身

, 243, 369

外部

—–, 7, 10, 363, 426

関数

—–, 239, 364, 469

サブルーチン

—–, 242, 365, 470

内部

—–, 9, 10, 13, 368, 427

モジュール

—–, 9, 10, 13, 371

符号

[sign], 29 (R410), 251, 430

符号制御編集記述子

[sign-edit-desc], 190 (R1015), 463

符号なし

[unsigned], 369

不整構造

DO

構文

[nonblock-do-construct], 141 (R835),

389, 455

不定

[undefined], 17, 369, 353, 357, 359

浮動小数点数

, 250

浮動小数点数状態

, 313, 318, 322

浮動小数点数操作関数

, 253

不特定記憶単位

[unspecified storage unit], 354, 369

部分結合している(スカラ要素が)

[partially associ-

ated], 355

部分参照

[part-ref], 86 (R613), 446

部分実体

[subobject], 15, 369

部分成分

[subcomponent], 369, 87

部分定数

[subobject of a constant], 73 (R533), 15, 443

部分配列

[array section], 88 (R617), 16, 90, 369, 15,

418, 446

重複

—–, 91, 367

部分配列選択子

, 17

部分配列添字

[section subscript], 88 (R619), 369, 90,

446

部分名

[part-name], 86, 446

部分列

[substring], 85 (R609), 369, 445

部分列選択子

, 17

部分列 特定子

, 17

部分列範囲

[substring-range], 85 (R611), 445

部分列名

F77

→ 部分列 特定子

, 17, 85

プログラム

[program], 7 (R201), 11, 370, 13, 426

—–, 362

規格合致

—–, 2

—–, 13, 211, 366, 396, 464

—–, 10, 217, 239

プログラム形式

[source form], 23

プログラム単位

[program unit], 7 (R202), 10, 370, 210,

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

484

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

426

初期値設定

—–, 215, 366, 396, 465

プログラム名

[program-name], 396

ブロック

[block], 131 (R801), 370, 132, 452

ブロック

IF

F77

IF THEN

, 132, 453

[statement], 23, 370, 25

—–

の継続

, 24, 25

—–

の順序

, 5, 12

… 文

, 5

分割依存翻訳

[dependent but separate compilation],

398

分割翻訳

[separate compilation], 397

文関数

[statement function], 217, 370, 347, 373

文関数定義文

[stmt-function-stmt], 245 (R1238), 471

分身

[instance], 243, 369

文内要素

[statement entity], 344, 370, 347

文番号

[statement label], 22 (R313), 370, 429

文番号

DO

[label-do-stmt], 140 (R828), 455

平均

, 424

並列処理

, 407, 424

べき乗

[exponentiation], 112

べき乗(複素数型の)

, 112

べき乗演算子

[power-op], 99 (R707), 448

ベクトル添字

[vector subscript], 88 (R622), 91, 370,

90, 231, 446

変換(型の)

, 32, 35, 102, 111, 113, 117, 118, 142, 245,

251

変形関数

[transformational function], 248, 370

編集

[editing], 145, 188, 192

実数型の

—–, 194

整数型の

—–, 193

複素数型の

—–, 197

文字型の

—–, 198

論理型の

—–, 197

編集記述子

[edit descriptor], 189

位置付け

—–, 190, 463

空白解釈

—–, 191, 464

小数点

—–, 191, 464

制御

—–, 189, 190, 200, 463

データ

—–, 189, 192, 462

符号制御

—–, 190, 463

丸め

—–, 191, 464

文字列

—–, 189, 191, 202, 464

変数

[variable], 84 (R601), 15, 370, 445

割付け

—–, 371

変数群出力

, 209

変数群書式

, 167, 206

変数群入出力文

[namelist input/output statement],

161

変数群入力

, 206

変数群名

[namelist-group-name], 79, 159, 161, 444,

458

変数群要素

[namelist-group-object], 79 (R553), 444

変数名

[variable-name], 84 (R602), 445

ポインタ

[pointer], 16, 370, 44, 230, 241, 377, 382,

383, 386, 407

—–, 407

遊離した

—–, 352, 386, 407

ポインタ結合

[pointer association], 370, 352, 385

ポインタ結合状態

[pointer association status], 352

ポインタ実体

[pointer-object], 95 (R634), 447

ポインタ宣言

, 75 (R541), 443

ポインタ代入

[pointer assignment], 370, 91

ポインタ代入文

[pointer assignment statement], 120

(R735), 370, 385, 450

ホーナー法

, 424

保存要素

[saved entity], 75 (R544), 70, 443

翻訳

[compilation], 236, 397, 407

末端成分

[ultimate component], 36, 370

丸め編集記述子

, 191 (R1017), 464

丸めモード

[rounding mode], 197, 370, 312, 317, 322,

326

右角括弧

[right bracket], 56 (R468), 437

右詰め

, 258

無限

DO, 140, 388

無効にする

F90

→ 上書き

, 362

無指定型パラメタ

[deferred type parameter], 370, 28

無指定上下限

[deferred-shape-spec], 65 (R515), 440

無制限多相的

[unlimited polymorphic], 62

無名共通ブロック

[blank common], 82, 84

… 名

, 5, 426

明示上下限

[explicit-shape-spec], 64 (R511), 440

明示的(引用仕様が)

[explicit], 218

明示的引用仕様

[explicit interface], 370, 47, 218, 404,

435

明示的初期値指定

[explicit initialization], 371, 45

明示的に初期化された

, 61

文字

[character], 19 (R301), 371, 428

—–

の位置

, 273, 275

—–

の大きさ

, 6

—–

の個数

, 392

—–

の大小順序

, 35

—–

の名称

, 20

図形

—–, 19

制御

—–, 19

その他の

—–, 20

特殊

—–, 20

表現可能

—–, 34

Fortran —–

集合

, 19

文字位置

[character position], 188, 200, 201, 276, 386

文字型

[character type], 33

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

485

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

基本

—–, 33

長さゼロの

—–, 93, 117

文字関係組込み演算

[character relational intrinsic op-

eration], 102

文字関数

, 251

文字記憶単位

[character storage unit], 354, 371

文字組込み演算

[character intrinsic operation], 102,

111, 112

文字組込み演算子

[character intrinsic operator], 102

文字組込み代入文

[character intrinsic assignment state-

ment], 117

文字式

[char-expr], 104 (R725), 449

基本

—–, 104, 449

文字集合

, 19, 35

文字初期値式

[char-initialization-expr], 107 (R731),

450

文字数

, 163

文字段階式

[level-3-expr], 99 (R710), 448

文字長

[character length], 33 (R426), 371, 432

文字長パラメタ

[character length parameter], 14, 371

文字長パラメタ選択子

[length-selector], 33 (R425), 432

文字長引継ぎ文字関数

, 373

文字定数

[char-constant], 21 (R309), 429

文字定数表現

[character literal constant], 34 (R427),

35, 432

長さゼロの

—–, 35

文字パラメタ選択子

[char-selector], 33 (R424), 431

文字文脈

[character context], 23

文字変数

[char-variable], 85 (R605), 445

基本

—–, 85, 445

長さゼロの

—–, 73

モジュール

[module], 211 (R1104), 12, 371, 363, 397,

398, 401, 464

モジュール引用

[module reference], 18, 212

モジュール性質

, 213 (R1110), 465, 465

モジュール手続

[module procedure], 11, 217, 371, 47,

435

モジュール副プログラム

[module subprogram], 9 (R1108),

10, 371, 13, 212, 464

モジュール副プログラム部

[module-subprogram-part],

9 (R1107), 212, 464

モジュール名

[module-name], 212, 213, 464, 465

文字列

[character string], 33, 371, 15, 35, 85, 204

—–

の取込み

, 25

—–

の比較

, 35, 113, 252

長さゼロの

—–, 108, 109, 357, 375

文字列の長さ

[length of a character string], 371

文字列編集記述子

[character string edit descriptor],

191 (R1019), 189, 202, 464

文字連続型

[character sequence type], 38

有効域

[scoping unit], 10, 371

有効けた数

, 252

有効項目

[effective item], 165, 371

有効数字部

[significand], 31 (R418), 431

有効な位置

[effective position], 346

有効範囲

[scope], 344, 371

用語

, 1, 16, 362

要素

[entity], 365

割付け

—–, 94

要素の定義状態

, 76

要素別引用

[elemental reference], 236

要素別処理

[elemental], 217, 371

要素別処理演算

[elemental operation], 16, 105

要素別処理関数

[elemental function], 247

要素別処理組込み関数

[elemental intrinsic function],

248

要素別処理サブルーチン

[elemental subroutine], 248,

248

要素別処理手続

[elemental procedure], 247

要素別処理副プログラム

[elemental subprogram], 247

要素列

[element sequence], 232

呼び出す

[invoke], 371

読込み

[reading], 145

ライブラリ

, 400

[field], 191

乱数

, 254, 294, 421

乱数生成器

, 412

欄幅

[field width], 191

リスト

, 378, 387

利用者定義演算

[defined operation], 102, 371, 111, 223

利用者定義演算子

[defined-operator], 22 (R311), 429

利用者定義代入

, 224

利用者定義代入文

[defined assignment statement], 119,

371, 120, 217, 236

利用者定義単項演算

[defined unary operation], 102

利用者定義単項演算子

[defined-unary-op], 98 (R703),

115, 448

利用者定義

2

項演算

[defined binary operation], 103

利用者定義

2

項演算子

[defined-binary-op], 101 (R723),

449

利用者定義要素別処理演算

[defined elemental opera-

tion], 103

利用者定義要素別処理代入文

[defined elemental assign-

ment statement], 119

ループ

[loop], 140, 142, 143, 388

例外

, 308, 310, 324

例外値

, 313

例外通知

[signaling], 311

例外通知非数

[signaling NaN], 316

例外非通知

[quiet], 311

例外非通知非数

[quiet NaN], 316

例外フラグ

, 317

[sequence], 18

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

486

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

空の

—–, 57

文字

—–, 204

列挙子

, 55 (R463), 437

列挙子定義文

, 55 (R462), 437

列挙体定義

, 55 (R460), 437

列挙体定義終了文

, 55 (R464), 437

列挙体定義文

, 55 (R461), 437

連携処理系

[companion processor], 18, 371, 14, 55

連結

[concatenation], 35

連結演算子

[concat-op], 99 (R711), 448

連続型

[sequence type], 36, 38

数値

—–, 38

文字

—–, 38

連続型構造体

[sequence structure], 62

論理演算子

[logical operator], 100

論理型

[logical type], 36

基本

—–, 36

論理組込み演算

[logical intrinsic operation], 102, 111,

114

論理組込み演算子

[logical intrinsic operator], 102

論理組込み代入文

[logical intrinsic assignment state-

ment], 117

論理式

[logical-expr], 104 (R724), 449

論理初期値式

[logical-initialization-expr], 108 (R733),

450

論理積

[logical conjunction], 253

論理積演算子

[and-op], 100 (R719), 449

論理積演算対象

[and-operand], 100 (R714), 449

論理段階式

[level-5-expr], 100 (R717), 449

論理定数表現

[logical-literal-constant], 36 (R428), 432

論理等否演算子

[equiv-op], 100 (R721), 449

論理等否演算対象

[equiv-operand], 100 (R716), 449

論理否定

, 253

論理変数

[logical-variable], 85 (R604), 445

基本

—–, 85, 445

論理和

[logical inclusive disjunction], 253

排他的

—–, 253

論理和演算子

[or-op], 100 (R720), 449

論理和演算対象

[or-operand], 100 (R715), 449

論理

IF

F77

IF

, 132, 133

和(全配列要素の)

, 254

—–

の積

, 423

割付け下限

[allocate-lower-bound], 92 (R631), 447

割付け実体

[allocate-object], 92 (R629), 447

割付け指定

[allocation], 92 (R628), 447

割付け指定選択子

, 92 (R624), 447

割付け上下限

[allocate-shape-spec], 92 (R630), 447

割付け上限

[allocate-upper-bound], 92 (R632), 447

割付け状態

, 70, 95, 253

割付け配列

[allocatable array], 65, 399

割付け変数

[allocatable variable], 371, 94, 419

割付け要素

[allocatable entity], 94

割り付けられていない

[unallocated], 54, 94

割り付けられている

[currently allocated], 54, 94

英字

A

, 30, 431

abstract interface [

抽象引用仕様

], 218

abstract interface block [

抽象引用仕様宣言

], 220

abstract type [

抽象型

], 50, 367

ACCESS

指定子

[ACCESS= specifier], 155, 181

accessibility attribute [

参照許可属性

], 62

ACTION

指定子

[ACTION= specifier], 155, 181

action statement [

単純実行文

], 367

active [

活動状態

], 141

active combination of index-name value [

指標値の有

効な組合せ

], 128

actual argument [

実引数

], 216, 365

ADVANCE

指定子

[ADVANCE= specifier], 161, 392

advancing input/output statement [

前進入出力文

], 149

affector [

作用子

], 162

ALL

, 258

ALLOCATABLE

属性

[ALLOCATABLE attribute],

63

ALLOCATABLE

[allocatable-stmt], 71 (R520), 441

allocatable array [

割付け配列

], 65

allocatable variable [

割付け変数

], 371

ALLOCATE

[ALLOCATE statement], 92

ALLOCATE

[allocate-stmt], 92 (R623), 385, 419,

446

allocated [

割り付けられた

], 54

allowed access methods (set of), 147
allowed actions (set of), 147
allowed forms (set of), 147
allowed record lengths (set of), 147
ancestor component [

先祖成分

], 51

AND, 253, 274

.AND.

, 22, 100, 102, 114, 115, 449

ANY

, 260

APPEND

, 157

approximation method [

近似方法

], 30

argument [

引数

], 369

argument association [

引数結合

], 369

argument keyword [

引数キーワード

], 17, 249

array [

配列

], 16, 88, 369

array constructor [

配列構成子

], 56

array element order [

配列要素順序

], 89

array element [

配列要素

], 16, 88, 369

array intrinsic assignment statement [

配列組込み代入

], 117

array pointer [

配列ポインタ

], 65, 369

array section [

部分配列

], 16, 90, 369

ASCII

大小順序

[ASCII collating sequence], 35, 251

ASCII

文字型

[ASCII character type], 33

ASCII

文字集合

[ASCII character set], 33

ASIS

, 157

ASSIGNMENT

総称指定

, 224

assignment statement [

代入文

], 367

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

487

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

ASSIGNMENT(=)

, 119, 120, 225, 371

ASSOCIATE

構文

[ASSOCIATE construct], 136

ASSOCIATE

構文

, 136 (R816), 454

ASSOCIATE

, 136 (R817), 454

associate name [

結合名

], 136, 365

associating entity [

結合要素

], 356

association [

結合

], 17, 365

assumed-shape array [

形状引継ぎ配列

], 65, 364

assumed-size array [

大きさ引継ぎ配列

], 65, 362

ASYNCHRONOUS

指定子

, 155, 161, 181

ASYNCHRONOUS

属性

[ASYNCHRONOUS attribute],

63

ASYNCHRONOUS

, 71 (R521), 441

ATAN

, 251, 261

attribute [

属性

], 58, 367

automatic array [

自動割付け配列

], 65

automatic data object [

自動割付けデータ実体

], 61, 365

b

, 250

B

, 30, 430, 431

B

形編集

, 193

BACK

, 250

BACKSPACE

[backspace-stmt], 177 (R923), 145,

146, 150, 178, 392, 394, 460

base object [

基底実体

], 86

base type [

基底型

], 50, 364

belong [

属する

], 131, 367

BIND

属性

[BIND attribute], 39, 63

BIND

, 71 (R522), 441

binding label [

束縛ラベル

], 342, 343, 367

binding name [

束縛名

], 48

BLANK

指定子

[BLANK= specifier], 156, 162, 181

blank common [

無名共通ブロック

], 82

block [

ブロック

], 131, 370

BLOCK DATA

[block-data-stmt], 215 (R1117), 465

block data program unit [

初期値設定プログラム単位

],

215, 366

BN

形編集

, 202

bounds [

上下限

], 366

branch target statement [

飛び先文

], 144

branching [

飛越し

], 144

BZ

形編集

, 202

c

, 203, 206

C

, 30, 431

C

アドレス

[C address], 333, 335

C

との相互利用可能性

, 331

C

文字種別

[C character kind], 332

C address [C

アドレス

], 333

CALL

[call-stmt], 228 (R1218), 11, 217, 236, 468

CASE

構文

[CASE construct], 133

CASE

構文

[case-construct], 134 (R808), 389, 453

CASE

[case-stmt], 134 (R810), 453

case index [

場合指標

], 134

CHAR

, 251, 263

character [

文字

], 371

character context [

文字文脈

], 23

character intrinsic assignment statement [

文字組込み

代入文

], 117

character intrinsic operation [

文字組込み演算

], 102

character intrinsic operator [

文字組込み演算子

], 102

character length [

文字長

], 371

character length parameter [

文字長パラメタ

], 14, 371

character literal constant [

文字定数表現

], 34

character relational intrinsic operation [

文字関係組込

み演算

], 102

character sequence type [

文字連続型

], 38

character storage unit [

文字記憶単位

], 354, 371

character string [

文字列

], 33, 371

length of a —–, 371

character string edit descriptor [

文字列編集記述子

],

189

character type [

文字型

], 33

CHARACTER*

, 374

characteristics [

特性

], 368

characteristics of a procedure [

手続の特性

], 217

child data transfer statement [

子データ転送文

], 169

class [

クラス

], 364

CLOSE

[CLOSE statement], 158

CLOSE

[close-stmt], 158 (R907), 145, 146, 153,

395, 457

collating sequence [

大小順序

], 35, 367

COMMA

, 192

comment [

注釈

], 24, 25

COMMON

[COMMON statement], 82

COMMON

[common-stmt], 82 (R557), 84, 355, 444

common block [

共通ブロック

], 82, 364

size of a —–, 83

common block storage sequence [

共通ブロック記憶列

],

83

companion processor [

連携処理系

], 18, 371

COMPATIBLE

, 197

compilation [

翻訳

], 397

complex type [

複素数型

], 32

component [

成分

], 366

component keyword [

成分キーワード

], 17

component order [

成分順序

], 45, 366

component value [

成分値

], 52

concatenation [

連結

], 35

conformable [

形状適合

], 16, 364

conformance [

合致

], 363

connected [

接続されている

], 366, 153

constant [

定数

], 15, 367

construct [

構造構文

], 365

construct association [

構文結合

], 365

construct entity [

構文内要素

], 344, 365

CONTAINS

[CONTAINS statement], 244

CONTAINS

[contains-stmt], 244 (R1237), 12, 471

CONTINUE

[continue-stmt], 145 (R848), 390, 456

control character [

制御文字

], 19

control edit descriptor [

制御編集記述子

], 189

control information list [

制御情報並び

], 159

control mask [

制御配列

], 124, 366

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

488

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

COS

, 251, 264

create a file [

ファイルの生成

], 147

current record [

現在記録

], 149

CYCLE

[cycle-stmt], 142 (R843), 144, 389, 390,

456

d

, 190 (R1008), 463

D

, 30, 31, 431

D

形編集

, 195

data [

データ

], 367

DATA

[DATA statement], 72

DATA

[data-stmt], 72 (R524), 4, 12, 61, 243, 357,

373, 441

data edit descriptor [

データ編集記述子

], 189

data entity [

データ要素

], 14, 368

data object reference [

データ実体引用

], 18

data object [

データ実体

], 14, 368

data pointer [

データポインタ

], 16

data transfer input statement [

データ転送入力文

], 145

data transfer output statement [

データ転送出力文

],

145

data type [

データ型

], 368

DC

形編集

, 202

DEALLOCATE

[DEALLOCATE statement], 95

DEALLOCATE

[deallocate-stmt], 95 (R635), 16,

385, 386, 419, 447

DECIMAL

指定子

, 156, 162, 181

decimal symbol [

小数点記号

], 192, 366

decimal value [10

進の値

], 197

declaration [

宣言

], 17

declaration type specifier [

宣言型指定子

], 61

declared type [

宣言時の型

], 62, 366

DEFAULT

, 156

default character [

基本文字型

], 33

default complex [

基本複素数型

], 32

default initialization [

暗黙的初期値指定

], 362

default-initialized [

暗黙的初期値設定されている

], 44,

362

default integer [

基本整数型

], 29

default logical [

基本論理型

], 36

default real [

基本実数型

], 31

deferred binding [

遅延束縛

], 48, 367

deferred-shape array [

形状無指定配列

], 65

deferred type parameter [

無指定型パラメタ

], 370

definable [

確定可能

], 363

defined assignment statement [

利用者定義代入文

], 119,

371

defined binary operation [

利用者定義

2

項演算

], 103

defined elemental assignment statement [

利用者定義

要素別処理代入文

], 119

defined elemental operation [

利用者定義要素別処理演

], 103

defined operation [

利用者定義演算

], 102, 371

defined unary operation [

利用者定義単項演算

], 102

defined [

確定

], 17, 363

definition [

定義

], 17

DELETE

, 159

delete a file [

ファイルの消去

], 147

deleted feature [

廃止事項

], 6, 369

DELIM

指定子

[DELIM= specifier], 156, 162, 182, 208

delimiter [

括弧類

], 23

dependent but separate compilation [

分割依存翻訳

],

398

dependent compilation [

依存翻訳

], 397

dereference [

参照はずし

], 67

derived type [

派生型

], 14, 369

derived-type intrinsic assignment statement [

派生型組

込み代入文

], 117

designator [

特定子

], 17, 368

digit [

数字

], 19

DIM

, 250, 268

DIMENSION

属性

[DIMENSION attribute], 64

DIMENSION

[dimension-stmt], 74 (R535), 443

DIRECT

指定子

[DIRECT= specifier], 182

direct access [

直接探査

], 148

direct access input/output statement [

直接探査入出力

], 163

disassociated [

空状態

], 16, 364

distinguishable [

区別可能

], 346

DO

形反復

, 73, 168, 191, 204

DO

構文

[DO construct], 140

DO

構文

[do-construct], 140 (R825), 141–144, 390, 455

DO

端末

[DO termination], 141, 373

初期化

—–, 72, 442

入出力

—–, 163, 459

配列構成

—–, 56, 437

DO

構文名

[do-construct-name], 367

DO

制御

[loop-control], 140 (R830), 455

DO

端末

[DO termination], 373

DO

ブロック

[do-block], 140 (R832), 455

DO

[do-stmt], 140 (R827), 455

DO

変数

[DO-variable], 140 (R831), 168, 204, 358,

359, 392, 455

DO

本体

[do-body], 141 (R837), 456

double precision real [

倍精度実数型

], 31

DOWN

, 197

DP

形編集

, 202

dtv

, 47, 174, 435

dummy argument [

仮引数

], 216, 364

dummy array [

仮配列

], 363

dummy data object [

仮データ実体

], 363

dummy procedure [

仮手続

], 217, 363

dynamic type [

実行時の型

], 62, 365

e

, 250

E

, 30, 31, 431

E

形編集

, 195

edit descriptor [

編集記述子

], 189

effective item [

有効項目

], 165, 371

effective position [

有効な位置

], 346

element sequence [

要素列

], 232

ELEMENTAL

, 240, 244, 245, 247, 469

elemental intrinsic function [

要素別処理組込み関数

],

248

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

489

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

elemental operation [

要素別処理演算

], 16, 105

elemental procedure [

要素別処理手続

], 247

elemental reference [

要素別引用

], 236

elemental subprogram [

要素別処理副プログラム

], 247

elemental subroutine [

要素別処理サブルーチン

], 248

elemental [

要素別処理

], 217, 371

ELSE

[else-stmt], 132 (R805), 453

ELSE IF

[else-if-stmt], 132 (R804), 453

ELSEWHERE

[elsewhere-stmt], 123 (R750), 451

e

max

, 250, 283

e

min

, 250, 286

EN

形編集

, 195

ENCODING

指定子

, 156, 182

END

[END statement], 13, 23, 25

END ASSOCIATE

, 136 (R820), 454

END BLOCK DATA

[end-block-data-stmt], 215

(R1118), 466

END DO

[end-do-stmt], 140 (R834), 455

END FORALL

[end-forall-stmt], 126 (R758), 452

END FUNCTION

[end-function-stmt], 240 (R1230),

10, 428, 470

END IF

[end-if-stmt], 132 (R806), 453

END INTERFACE

[end-interface-stmt], 219 (R1204),

466

END MODULE

[end-module-stmt], 212 (R1106),

464

end-of-file condition [

ファイル終了条件

], 185

end-of-record condition [

記録終了条件

], 185

END PROGRAM

[end-program-stmt], 211 (R1103),

10, 428, 464

END SELECT

[end-select-stmt], 134 (R811), 453

END SELECT TYPE

, 138 (R824), 455

END SUBROUTINE

[end-subroutine-stmt], 242

(R1234), 10, 428, 470

END TYPE

[end-type-stmt], 37 (R433), 433

END WHERE

[end-where-stmt], 123 (R751), 451

ENDFILE

[endfile-stmt], 177 (R924), 145, 146, 178,

460

endfile record [

ファイル終了記録

], 146

ending point [

終了位置

], 86

entity [

言語要素

], 365

ENTRY

[ENTRY statement], 243

ENTRY

[entry-stmt], 243 (R1235), 12, 217, 241,

244, 345, 355, 470

EOR

指定子

[EOR= specifier], 392

EPSILON

, 252, 270

.EQ.

, 22, 100, 102, 113, 115, 448

EQUIVALENCE

[EQUIVALENCE statement], 80

EQUIVALENCE

[equivalence-stmt], 80 (R554), 81,

82, 84, 355, 444

.EQV.

, 22, 100, 102, 114, 115, 449

ES

形編集

, 196

executable construct [

実行構文

], 365

executable statement [

実行文

], 12, 365

execution cycle [

実行周期

], 142

exist [

存在する(外部装置が)

], 153

EXIST

指定子

[EXIST= specifier], 182

EXIT

[exit-stmt], 143 (R844), 389, 456

EXP

, 251, 270

explicit [

明示的(引用仕様が)

], 218

explicit initialization [

明示的初期値指定

], 371

explicit interface [

明示的引用仕様

], 370

explicit-shape array [

形状明示配列

], 64, 364

EXPONENT

, 253, 270

expression [

], 15, 97, 365

extended type [

直接拡張型

], 50, 367

extensible type [

拡張可能型

], 50, 363

extension operation [

拡張演算

], 103

extension operator [

拡張演算子

], 103

extension type [

拡張型

], 50, 363

extent [

寸法

], 16, 366

EXTERNAL

属性

[EXTERNAL attribute], 66

EXTERNAL

[EXTERNAL statement], 225

EXTERNAL

[external-stmt], 225 (R1208), 467

external file [

外部ファイル

], 147, 363

external linkage [

外部結合

], 363

external procedure [

外部手続

], 11, 217, 363

external subprogram [

外部副プログラム

], 10, 363

external unit [

外部装置

], 152, 363

F

, 30, 431

F

形編集

, 194

.FALSE.

, 36, 432

field [

], 191

field width [

欄幅

], 191

file [

ファイル

], 369

FILE

指定子

[FILE= specifier], 156, 179, 181

file connection statement [

ファイル接続文

], 145

file inquiry statement [

ファイル問合せ文

], 145

file positioning statement [

ファイル位置付け文

], 145

file storage unit [

ファイル記憶単位

], 369

final subroutine [

後始末サブルーチン

], 49, 362

finalizable [

後始末可能

], 49, 362

finalization [

後始末

], 362

finalized [

後始末される

], 49

fixed source form [

固定形式

], 25

FLOOR

, 251, 271

FLUSH

[FLUSH statement], 178

FLUSH

, 179 (R927), 178, 461

FMT

指定子

[FMT= specifier], 161

FORALL

構文

[forall-construct], 125 (R752), 387, 452

FORALL

制御

[forall-header], 125 (R754), 452

FORALL

代入文

[forall-assignment-stmt], 126 (R757),

452

FORALL

本体構文

[forall-body-construct], 125 (R756),

452

FORALL

三つ組指定

[forall-triplet-spec], 125 (R755),

452

FORM

指定子

[FORM= specifier], 156, 182

FORMAT

[format-stmt], 188 (R1001), 12, 161, 459,

462

format control [

書式制御

], 191

FORMATTED

, 156

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

490

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

FORMATTED

指定子

[FORMATTED= specifier], 182

formatted input/output statement [

書式付き入出力

], 160

formatted record [

書式付き記録

], 146

Fortran

文字集合

[Fortran character set], 19

FRACTION

, 253, 271

free source form [

自由形式

], 23

FUNCTION

[function-stmt], 239 (R1224), 77, 244,

345, 469

function [

関数

], 11, 364

function reference [

関数引用

], 15

function result [

関数結果

], 364

function subprogram [

関数副プログラム

], 239, 364

G

形編集

, 198

.GE.

, 22, 100, 102, 113, 115, 448

generic identifier [

総称識別子

], 222, 367

generic interface block [

総称引用仕様宣言

], 220, 367

generic interface [

総称引用仕様

], 222, 367

generic name [

総称名

], 222, 248

global entity [

大域要素

], 344, 367

global identifier [

大域識別子

], 344

GO TO

[goto-stmt], 144 (R845), 456

graphic character [

図形文字

], 19

.GT.

, 22, 100, 102, 113, 115, 448

host association [

親子結合

], 348, 362

host scoping unit [

親有効域

], 11, 363

host [

親プログラム

], 11, 362

I

形編集

, 193

IAND

, 253, 274

ID

指定子

, 162, 182

identifier [

識別子

], 367

IEEE

国際規格

[IEEE International Standard], 7

IEEE

算術

, 308, 313, 323

IF

構文

[IF construct], 132

IF

構文

[if-construct], 132 (R802), 452

IF

[IF statement], 132

IF

[if-stmt], 133 (R807), 108, 453

IF THEN

[if-then-stmt], 132 (R803), 453

imaginary part [

虚部

], 32

implicit [

暗黙的(引用仕様が)

], 218

IMPLICIT

[IMPLICIT statement], 76

IMPLICIT

[implicit-stmt], 76 (R549), 443

implicit interface [

暗黙的引用仕様

], 362

IMPORT

, 220 (R1208), 466

inactive [

休止状態

], 141

INCLUDE

[INCLUDE line], 26

inf

, 195

inherit [

継承

], 50, 364

inheritance associated [

継承結合されている

], 51

inheritance association [

継承結合

], 364

initial point [

始点

], 149

initialization expression [

初期値式

], 107

input statement [

入力文

], 145

INQUIRE

[inquire-stmt], 179 (R923), 145, 153, 461

inquire by file [

ファイル

INQUIRE

], 179

inquire by output list [

出力並び

INQUIRE

], 179

inquire by unit [

装置

INQUIRE

], 179

inquiry function [

問合せ関数

], 248, 368

instance [

分身

], 243

instance of a subprogram [

副プログラムの分身

], 369

INT

, 251, 276

integer type [

整数型

], 29

intent [

授受特性

], 366

INTENT

属性

[INTENT attribute], 59, 66, 439

INTENT

[intent-stmt], 74 (R536), 443

INTERFACE

[interface-stmt], 219 (R1203), 400,

466

interface block [

引用仕様宣言

], 11, 362

interface body [

引用仕様本体

], 11, 362

interface [

引用仕様

], 218, 362

internal file [

内部ファイル

], 368

internal procedure [

内部手続

], 11, 217, 368

internal subprogram [

内部副プログラム

], 10, 368

internal unit [

内部装置

], 152

internal value [

内部の値

], 197

interoperable [

相互利用可能

], 336, 338–340, 367

INTRINSIC

属性

[INTRINSIC attribute], 68

INTRINSIC

[INTRINSIC statement], 227

INTRINSIC

[intrinsic-stmt], 227 (R1216), 468

intrinsic [

組込み

], 18, 364

intrinsic assignment statement [

組込み代入文

], 117

intrinsic binary operation [

組込み

2

項演算

], 101

intrinsic module [

組込みモジュール

], 211

intrinsic operation [

組込み演算

], 101

intrinsic procedure [

組込み手続

], 217, 248

intrinsic type [

組込み型

], 14

intrinsic unary operation [

組込み単項演算

], 101

invoke [

呼び出す

], 371

IOLENGTH

指定子

, 179, 185

IOR

, 253, 277

IOSTAT

指定子

[IOSTAT= specifier], 186, 392

is

, 4

Ising model [

イジング模型

], 420

ISO 10646

文字型

[ISO 10646 character type], 33

ISO 10646

文字集合

[ISO 10646 character set], 33

iteration count [

繰返し数(

DO

文の)

], 142

k

, 190 (R1012), 463

KEEP

, 159

keyword [

キーワード

], 17, 364

kind [

種別

], 29, 30, 32, 33, 36

KIND

, 250, 252, 278, 375, 376

kind type parameter [

種別型パラメタ

], 14, 366

L

形編集

, 198

label [

文番号

], 367, 370

.LE.

, 22, 100, 102, 113, 115, 448

left tab limit [

位置付け左限界

], 200

LEN

, 253, 279

length [

長さ(文字列の)

], 33

length of a character string [

文字列の長さ

], 371

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

491

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

letter [

英字

], 19

lexical token [

構文素

], 20, 365

line [

], 23, 364

linkage association [

他言語結合

], 367

list-directed input/output statement [

並び入出力文

],

161

literal constant [

定数表現

], 15, 367

local entity [

局所要素

], 364

local identifier [

局所識別子

], 344

local variable [

局所変数

], 15, 364

LOG

, 251, 281

LOGICAL

, 252, 282

logical intrinsic assignment statement [

論理組込み代

入文

], 117

logical intrinsic operation [

論理組込み演算

], 102

logical intrinsic operator [

論理組込み演算子

], 102

logical type [

論理型

], 36

loop [

ループ

], 140

low-level syntax [

低水準構文

], 20

.LT.

, 22, 100, 102, 113, 115, 448

m

, 190 (R1007), 463

main program [

主プログラム

], 211, 366

many-one array section [

重複部分配列

], 91, 367

many-to-one assignment [

重複代入

], 130

MASK

, 250, 420

masked array assignment [

配列選別代入

], 123

MODULE

[module-stmt], 212 (R1105), 464

module [

モジュール

], 12, 211, 371

module procedure [

モジュール手続

], 11, 217, 371

module reference [

モジュール引用

], 18, 212

module subprogram [

モジュール副プログラム

], 10, 371

MODULO

, 251, 288

n

, 190 (R1014), 463

name [

名前

], 17, 20, 368

NAME

指定子

[NAME= specifier], 182

name association [

名前結合

], 348, 368

named [

名前付き

], 368

name-value subsequence [

名前

-

値対応

], 206

NAMED

指定子

[NAMED= specifier], 182

named common block [

名前付き共通ブロック

], 82

named constant [

名前付き定数

], 15, 369

named file [

名前付きファイル

], 147

NAMELIST

[NAMELIST statement], 79

NAMELIST

[namelist-stmt], 79 (R552), 444

namelist input/output statement [

変数群入出力文

],

161

NaN [

非数

], 313, 369

NaN

, 195

.NE.

, 22, 100, 102, 113, 115, 448

NEAREST

, 197

next record [

直後記録

], 149

.NEQV.

, 22, 100, 102, 114, 115, 449

NEW

, 157

NEXTREC

指定子

[NEXTREC= specifier], 183

NML

指定子

[NML= specifier], 161

NO

, 155, 161

nonadvancing input/output statement [

停留入出力文

],

149

nonexecutable statement [

非実行文

], 12, 369

nonintrinsic module [

組込みでないモジュール

], 211

normal [

正規

], 313

NOT

, 253, 291

.NOT.

, 22, 100, 102, 114, 115, 449

NULL

, 291

NULLIFY

[NULLIFY statement], 95

NULLIFY

[nullify-stmt], 95 (R633), 16, 354, 385,

447

NUMBER

指定子

[NUMBER= specifier], 183

numeric intrinsic assignment statement [

数値組込み代

入文

], 117

numeric intrinsic operation [

数値組込み演算

], 102

numeric intrinsic operator [

数値組込み演算子

], 102

numeric relational intrinsic operation [

数値関係組込み

演算

], 102

numeric sequence type [

数値連続型

], 38

numeric storage unit [

数値記憶単位

], 354, 366

numeric type [

数値型

], 28, 366

O

, 30, 431

O

形編集

, 193

object designator [

実体特定子

], 17, 365

object [

実体

], 14, 365

obsolescent feature [

廃止予定事項

], 6, 369

OLD

, 157

ONLY

, 214, 351, 398, 399

OPEN

[OPEN statement], 154

OPEN

[open-stmt], 154 (R904), 146, 153, 155, 394,

395, 457

OPENED

指定子

[OPENED= specifier], 183

operand [

演算対象

], 18, 362

operation [

演算

], 362

operator [

演算子

], 18, 362

OPERATOR(

op

)

, 103

OPERATOR

総称指定

, 224

OPTIONAL

属性

[OPTIONAL attribute], 59, 68, 439

OPTIONAL

[optional-stmt], 74 (R537), 443

OR, 253, 277

or

, 4

.OR.

, 22, 100, 102, 114, 115, 449

output statement [

出力文

], 145

override [

上書き

], 44, 51, 362

p

, 250

P

形編集

, 201

PACK

, 254, 292

PAD

指定子

[PAD= specifier], 156, 162, 183

PARAMETER

属性

[PARAMETER attribute], 59,

68, 439

PARAMETER

[PARAMETER statement], 75

PARAMETER

[parameter-stmt], 75 (R538), 443

parent component [

親成分

], 51, 362

parent data transfer statement [

親データ転送文

], 169

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

492

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

parent type [

親型

], 50, 362

partially associated [

部分結合している(スカラ要素

が)

], 355

passed-object dummy argument [

当該実体仮引数

], 44,

368

PENDING

指定子

, 183

pending control mask [

否定制御配列

], 124

PLUS

, 157

POINT

, 192

pointer [

ポインタ

], 16, 370

POINTER

属性

[POINTER attribute], 16, 59, 69,

382, 439

POINTER

[pointer-stmt], 75 (R540), 443

pointer assignment [

ポインタ代入

], 370

pointer assignment statement [

ポインタ代入文

], 370

pointer associated [

指示状態

], 16, 365

pointer association [

ポインタ結合

], 370

pointer association status [

ポインタ結合状態

], 352

polymorphic [

多相的

], 62, 367

POS

指定子

, 162, 183

position [

位置(ファイルの)

], 147

POSITION

指定子

[POSITION= specifier], 157, 184

positional argument [

順対応引数

], 249

pre-existing entity [

既存要素

], 356

preceding record [

直前記録

], 149

preconnection [

事前接続

], 153, 365

present [

実在する

], 233

PRINT

[PRINT statement], 159

PRINT

[print-stmt], 159 (R912), 145, 147, 167, 458

PRIVATE

属性

, 39, 398

procedure [

手続

], 11, 368

characteristics of a —–, 217

PROCEDURE

, 219 (R1206), 466

procedure designator [

手続特定子

], 17, 368

procedure interface [

手続引用仕様

], 368

procedure pointer [

手続ポインタ

], 16

procedure reference [

手続引用

], 18

processor [

処理系

], 1, 366

processor dependent [

処理系依存

], 2, 366

program [

プログラム

], 11, 370

PROGRAM

[program-stmt], 211 (R1102), 464

program unit [

プログラム単位

], 10, 370

PROTECTED

属性

[PROTECTED attribute], 60, 69,

440

PROTECTED

, 75 (R542), 443

prototype [

原型

], 365

PUBLIC [

公開

], 63

PUBLIC

属性

, 398

PURE

, 240, 244, 245, 247, 469

pure procedure [

純粋手続

], 245, 366

pure subprogram [

純粋副プログラム

], 245

q

, 250

quiet [

例外非通知

], 311

quiet NaN [

例外非通知非数

], 316

r

, 203, 206, 250

R

snn

R201

R1228

, 4

RADIX

, 252, 294

range [

範囲

], 141

rank [

次元数

], 16, 365

RC

形編集

, 202

RD

形編集

, 202

READ

, 155

READ(FORMATTED)

, 170

READ(UNFORMATTED)

, 170

READ

指定子

[READ= specifier], 184

READ

[READ statement], 159

READ

[read-stmt], 159 (R910), 145, 146, 161, 167,

391, 396, 458

reading [

読込み

], 145

READWRITE

, 155

READWRITE

指定子

[READWRITE= specifier], 184

REAL

, 251, 296

real part [

実部

], 32

real type [

実数型

], 30

REC

指定子

[REC= specifier], 163

RECL

指定子

[RECL= specifier], 157, 184

record [

記録

], 146, 364

record file [

記録ファイル

], 145

record number [

記録番号

], 148

recursive [

再帰的

], 241

RECURSIVE

, 240, 244, 469

recursive input/output statement [

再帰入出力文

], 187

reference [

引用

], 84, 362

referenced type [

被参照型

], 340

relational intrinsic operation [

関係組込み演算

], 102

relational intrinsic operator [

関係組込み演算子

], 102

repeat specification [

書式反復数

], 189

REPLACE

, 157

representable character [

表現可能文字

], 34

representation method [

表現方法

], 29, 30, 33, 36

RESHAPE

, 57

restricted expression [

制限式

], 105

RESULT

, 239–241, 243, 345, 469, 470

result variable [

結果変数

], 11, 365

RETURN

[RETURN statement], 244

RETURN

[return-stmt], 244 (R1236), 471

REWIND

, 157

REWIND

[rewind-stmt], 177 (R925), 145, 150, 178,

460

RN

形編集

, 202

ROUND

指定子

, 157, 163, 184

rounding mode [

丸めモード

], 197, 370

RP

形編集

, 202

RU

形編集

, 202

RZ

形編集

, 202

S

形編集

, 201

SAVE

属性

[SAVE attribute], 59, 69, 439

SAVE

[save-stmt], 75 (R543), 61, 243, 443

saved entity [

保存要素

], 70

scalar [

スカラ

], 16, 85, 366

scale factor [

けた移動数

], 190

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

493

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

scope [

有効範囲

], 344, 371

scoping unit [

有効域

], 10, 371

SCRATCH

, 157, 394

section subscript [

部分配列添字

], 369

SELECT CASE

[select-case-stmt], 134 (R809), 453

SELECT TYPE

構文

[SELECT TYPE construct],

454 (R821), 137

SELECT TYPE

構文

, 138 (R821)

SELECT TYPE

, 138 (R822), 454

selector [

選択子

], 366

separate compilation [

分割翻訳

], 397

sequence [

], 18

SEQUENCE

, 39

SEQUENCE

[SEQUENCE statement], 38

SEQUENCE

[SEQUENCE statement], 38 (R434),

433

SEQUENTIAL

指定子

[SEQUENTIAL= specifier], 184

sequential access [

順番探査

], 147

sequential access input/output statement [

順番探査入

出力文

], 163

set of allowed access methods [

許容探査法集合

], 147

set of allowed actions [

許容操作集合

], 147

set of allowed forms [

許容記録形集合

], 147

set of allowed record lengths [

許容記録長集合

], 147

shape [

形状(配列の)

], 16

shape conformance [

形状適合

], 105

share [

共有する

], 141

SIGN

指定子

, 157, 163, 184

signaling [

例外通知

], 311

signaling NaN [

例外通知非数

], 316

SIN

, 251, 301

SIZE

, 252, 301

size [

大きさ

], 16, 362

SIZE

指定子

[SIZE= specifier], 163, 184, 392

size of a common block [

共通ブロックの大きさ

], 83

size of a storage sequence [

記憶列の大きさ

], 354

source form [

プログラム形式

], 23

SP

形編集

, 201

special character [

特殊文字

], 20

specific interface block [

個別引用仕様宣言

], 220

specific interface [

個別引用仕様

], 220

specific name [

個別名

], 248

specification expression [

宣言式

], 105, 366

specification function [

宣言関数

], 106, 366

specification inquiry [

宣言問合せ

], 106

SQRT

, 251, 303

SS

形編集

, 201

standard-conforming program [

規格合致プログラム

],

2, 364

starting point [

開始位置

], 86

STAT

指定子

, 93, 95

statement [

], 23, 370

statement entity [

文内要素

], 344, 370

statement function [

文関数

], 217, 370

statement label [

文番号

], 370

STATUS

指定子

[STATUS= specifier], 157, 158

STOP

[stop-stmt], 145 (R849), 456

storage associated [

記憶列結合している

], 354

storage association [

記憶列結合

], 354, 364

storage sequence [

記憶列

], 354, 364

size of a —–, 354

storage unit [

記憶単位

], 354, 364

STREAM

指定子

, 185

stream access [

流れ探査

], 148

stream access input/output statement [

流れ探査入出

力文

], 163

stream file [

流れファイル

], 145

stride [

刻み幅

], 90, 364

STRING

, 250

struct [

構造体型

], 365

structure [

構造体

], 14, 365

structure component [

構造体成分

], 86, 365

structure constructor [

構造体構成子

], 53, 365

subcomponent [

部分成分

], 369

subobject [

部分実体

], 15, 369

subobject of a constant [

部分定数

], 15

subprogram [

副プログラム

], 369

instance of a —–, 369

subroutine [

サブルーチン

], 11, 365

SUBROUTINE

[subroutine-stmt], 242 (R1232), 244,

470

subroutine subprogram [

サブルーチン副プログラム

],

242, 365

subscript [

添字

], 367

subscript triplet [

添字三つ組

], 90, 367

substring [

部分列

], 85, 369

SUM

, 254, 303

SUPPRESS

, 157

syntax rule [

構文規則

], 4

T

形編集

, 200

TAN

, 251, 304

target [

指示先

], 16, 365

TARGET

属性

[TARGET attribute], 59, 70, 383, 439

TARGET

[target-stmt], 76 (R546), 443

terminal point [

終点

], 149

TKR

適合する

[TKR compatible; type, kind, and rank

compatible], 62

TL

形編集

, 200

totally associated [

全体結合している(スカラ要素が)

],

355

TR

形編集

, 200

transformational function [

変形関数

], 248, 370

TRIM

, 252, 306

.TRUE.

, 36, 432

type [

], 14, 26, 363

TYPE

[derived-type-stmt], 37 (R430), 432

type-bound procedure [

型束縛手続

], 48, 363

type compatible [

型が適合する

], 62, 363

type declaration statement [

型宣言文

], 58, 363

type incompatible [

型が適合しない

], 62

type parameter [

型パラメタ

], 14, 363

type parameter inquiry [

型パラメタ問合せ

], 87

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

494

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

type parameter keyword [

型パラメタキーワード

], 17

type parameter order [

型パラメタ順序

], 41, 363

type specifier [

型指定子

], 26

UCS-4, 33
ultimate component [

末端成分

], 36, 370

undefined [

不定

], 17, 369

UNFORMATTED

, 156

UNFORMATTED

指定子

[UNFORMATTED= spec-

ifier], 185

unformatted input/output statement [

書式なし入出力

], 160

unformatted record [

書式なし記録

], 146

Unicode

ファイル

[Unicode file], 156

unit [

装置

], 152

UNKNOWN

, 158

unlimited polymorphic [

無制限多相的

], 62

unsaved entity [

非保存要素

], 70

unsigned [

符号なし

], 369

unspecified storage unit [

不特定記憶単位

], 354, 369

UP

, 197

USE

[USE statement], 212

USE

[use-stmt], 213 (R1109), 18, 214, 348, 351,

397–399, 403, 465

use association [

参照結合

], 348, 365

UTC, 267

UTF-8

, 156

VALUE

属性

[VALUE attribute], 59, 60, 70, 439

VALUE

, 76 (R547), 443

value separator [

値区切り子

], 203

variable [

変数

], 15, 370

vector subscript [

ベクトル添字

], 91, 370

void

[void], 370

VOLATILE

属性

[VOLATILE attribute], 60, 70, 383,

439

VOLATILE

, 76 (R548), 443

w

, 190 (R1006), 463

WAIT

, 176 (R921), 153, 460

wait operation [

待機操作

], 177

WHERE

構文

[where-construct], 123 (R744), 451

WHERE

代入文

[where-assignment-stmt], 123 (R747),

451

WHERE

, 418, 420

構造

—–, 123, 451

単純

—–, 108, 123, 451

WHERE

本体構文

[where-body-construct], 123 (R746),

451

whole array [

全体配列

], 88, 366

WRITE

, 155

WRITE(FORMATTED)

, 171

WRITE(UNFORMATTED)

, 171

WRITE

指定子

[WRITE= specifier], 185

WRITE

[WRITE statement], 159

WRITE

[write-stmt], 159 (R911), 147, 167, 391,

458

writing [

書出し

], 145

X

形編集

, 201

YES

, 155, 161

Z

, 30, 431

Z

形編集

, 193

ZERO

, 197

, 20, 29, 31, 34, 36, 429–432

記号

, 4

[ ] ..., 4

[

, 23

]

, 23

(

, 23, 32, 33, 41, 56, 58, 63, 71, 72, 74–76, 80, 82, 85,

86, 88, 92, 95, 98, 110, 116, 123, 125, 132–
134, 136, 138, 140, 154, 158, 159, 163, 177,
179, 188, 189, 219, 228, 242, 243, 245, 431,
433, 437, 438, 440–448, 451–455, 457–462,
466, 468, 470, 471

(/

, 23, 56, 437

)

, 23, 32, 33, 41, 56, 58, 63, 71, 72, 74–76, 80, 82, 85,

86, 88, 92, 95, 98, 110, 116, 123, 125, 132–
134, 136, 138, 140, 154, 158, 159, 163, 177,
179, 188, 189, 219, 228, 242, 243, 245, 431,
433, 437, 438, 440–448, 451–455, 457–462,
466, 468, 470, 471

/)

, 23, 56, 437

//

, 22, 35, 99, 102, 112, 115, 448

/=

, 22, 100, 102, 113, 115, 449

/

, 21, 23, 71, 72, 75, 79, 82, 99, 102, 112, 115, 190,

441, 443, 444, 448, 463

*

, 21, 59, 66, 73, 99, 102, 112, 115, 152, 161, 167, 203,

206, 438, 440, 442, 448, 457, 459

**

, 21, 99, 102, 112, 115, 448

+

, 21, 29, 99, 102, 112, 115, 430, 448

-

, 22, 29, 76, 99, 102, 112, 115, 430, 443, 448

<

, 22, 100, 102, 113, 115, 449

<=

, 22, 100, 102, 113, 115, 449

=

, 33, 56, 59, 72, 75, 117, 125, 140, 154, 163, 180, 219,

228, 245, 431, 437, 438, 442, 443, 450, 452,
455, 457, 459, 461, 466, 468, 471

==

, 22, 100, 102, 113, 115, 449

=>

, 59, 136, 138, 213, 438, 454, 465

>

, 22, 100, 102, 113, 115, 449

>=

, 22, 100, 102, 113, 115, 449

%

, 86, 87, 89, 378, 446

&

, 24, 206, 210

!

, 24, 25

;

, 25

.

, 22, 31, 98, 101, 189, 431, 448, 449, 462

:

, 64–66, 85, 88, 92, 125, 132, 134, 136, 138, 140, 190,

213, 440, 445–447, 452–455, 463, 465

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

495.

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

索引

::

, 37, 43, 58, 71, 74–76, 92, 213, 225, 227, 432, 438,

441, 443, 446, 465, 467, 468

, 30, 34, 35, 430, 432

→ アポストロフィ

, 189

’’

, 35

"

, 30, 34, 35, 430, 432

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。