WHERE

目的

WHERE ステートメントは、配列式および配列割り当ての計算をマスクします。これは論理配列式の値に応じて実行されます。 WHERE ステートメントは WHERE 構文の 最初のステートメントにすることができます。

構文



                               (1)
>>-+-------------------------+-------WHERE--(--mask_expr--)--+----------------------------+-><
   '-where_construct_name--:-'                               '-where_assignment_statement-'
 
 


注:


  1. Fortran 95 (where_construct_name)


mask_expr
論理配列式です。

+---------------------------------Fortran 95---------------------------------+

where_construct_name
WHERE 構文を識別する名前です。

+-----------------------------End of Fortran 95------------------------------+

規則

where_assignment_statement がある 場合は、WHERE ステートメントは、WHERE 構文の最初のステートメントではありません。 where_assignment_statement が存在しない場合は、WHERE ステートメントは WHERE 構文の 最初のステートメントであり、WHERE 構文ステートメントと呼ばれます。 END WHERE ステートメントをそれに続けなければなりません。 詳細については、WHERE 構文を参照してください。

WHERE ステートメントが WHERE 構文の最初のステートメント ではない場合、そのステートメントを DO または DO WHILE 構文の終端ステートメントとして使用することができます。

+---------------------------------Fortran 95---------------------------------+

WHERE ステートメントは、WHERE 構文内で ネストさせることができます。 定義済み割り当てである where_assignment_statement は、 エレメント型の定義済み割り当てでなければなりません。

+-----------------------------End of Fortran 95------------------------------+

where_assignment_statement では、 mask_expr および定義されている変数 variable は、 同じ形状の配列でなければなりません。WHERE 構文内の それぞれの mask_expr は同じ形状でなければなりません。

+---------------------------------Fortran 95---------------------------------+

where_body_construct の一部である WHERE ステートメントは、 分岐のターゲット・ステートメントにすることはできません。

+-----------------------------End of Fortran 95------------------------------+

WHERE ステートメントの mask_expr で参照される 関数の実行は、where_assignment_statement 内のエンティティーに 影響を与える場合があります。

マスク式の解釈については、マスクされた配列割り当ての解釈 を参照してください。

+---------------------------------Fortran 95---------------------------------+

where_construct_nameWHERE 構文ステートメントに 指定する場合、対応する END WHERE ステートメント にも指定しなければなりません。 構文名は、WHERE 構文 のマスクされた ELSEWHERE およ び ELSEWHERE ステートメントでは任意指定です。

where_construct_name は、WHERE 構文ステートメント上だけに 指定可能です。

+-----------------------------End of Fortran 95------------------------------+

REAL, DIMENSION(10) :: A,B,C
 
!   In the following WHERE statement, the LOG of an element of A
!   is assigned to the corresponding element of B only if that
!   element of A is a positive value.
 
WHERE (A>0.0) B = LOG(A)
       
  ·
  ·
  ·
END

+---------------------------------Fortran 95---------------------------------+

以下の例は、WHERE ステートメントでの エレメント型の定義済み割り当てを示しています。

INTERFACE ASSIGNMENT(=)
  ELEMENTAL SUBROUTINE MY_ASSIGNMENT(X, Y)
    LOGICAL, INTENT(OUT) :: X
    REAL, INTENT(IN) :: Y
  END SUBROUTINE MY_ASSIGNMENT
END INTERFACE
 
INTEGER A(10)
REAL C(10)
LOGICAL L_ARR(10)
 
C = (/ -10., 15.2, 25.5, -37.8, 274.8, 1.1, -37.8, -36.2, 140.1, 127.4 /)
A = (/ 1, 2, 7, 8, 3, 4, 9, 10, 5, 6 /)
L_ARR = .FALSE.
 
WHERE (A < 5) L_ARR = C
 
! DATA IN ARRAY L_ARR AT THIS POINT:
!
! L_ARR = F, T, F, F, T, T, F, F, F, F
 
END
 
ELEMENTAL SUBROUTINE MY_ASSIGNMENT(X, Y)
  LOGICAL, INTENT(OUT) :: X
  REAL, INTENT(IN) :: Y
 
  IF (Y < 0.0) THEN
    X = .FALSE.
  ELSE
    X = .TRUE.
  ENDIF
END SUBROUTINE MY_ASSIGNMENT

+-----------------------------End of Fortran 95------------------------------+

関連情報

IBM Copyright 2003