JIS X 3001-1:2009 プログラム言語Fortran―第1部:基底言語 | ページ 14

  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 *, ’InPOINT_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) 型パラメタ指定並びの型パラメタ指定に先行する “キーワード=” を省略するときだけ,型パラメ
タ指定から “キーワード=” を省略できる。

――――― [JIS X 3001-1 pdf 66] ―――――

                                                                                                   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) に従っ
て型 及び 型パラメタが派生型の対応する成分と一致する値に変換される。ポインタでもなく割付け成分でもない成
分に対しては,式の形状は成分の形状と適合しなければならない。

――――― [JIS X 3001-1 pdf 67] ―――――

  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, ’JOHNSMITH’)
この例は,次のように書いてもよい。
PERSON (NAME = ’JOHNSMITH’,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 の引用である場合,構成子の対応する成分は,“割り付けられていない” 状態をもつ。その式
が割付け要素である場合,構成子の対応する成分は,その割付け要素と同じ割付け状態をもつ。更に割付け状態が “
割り付けられている” である場合,実行時の型,上下限 及び 値は同じとする。成分の長さ型パラメタが無指定であ
る場合,その値は,式の対応するパラメタと同じとする。その式が同じ次元数の要素と評価される場合,構成子の対
応する成分は,“割り付けられている” 割付け状態をもち,式と同じ上下限 及び 値をもつ。

――――― [JIS X 3001-1 pdf 68] ―――――

                                                                                                   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 の処理系が,二つ
の列挙型の列挙定数の名前が異なっていても,値 及び 順序が同じであるときには,同じ表現を用い
ることを要求している。

――――― [JIS X 3001-1 pdf 69] ―――――

  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 変数は,名前付き変数でなければならない。

――――― [JIS X 3001-1 pdf 70] ―――――

次のページ PDF 71

JIS X 3001-1:2009の引用国際規格 ISO 一覧

  • ISO/IEC 1539-1:2004(IDT)

JIS X 3001-1:2009の国際規格 ICS 分類一覧

JIS X 3001-1:2009の関連規格と引用規格一覧

規格番号
規格名称