我们都知道DO
循环比FORALL
Fortran 中的语句更强大。也就是说,您始终可以将 a 替换为FORALL
a DO
,但反之则不行。
WHERE
语句和块呢?
我可以总是IF
用 a代替WHERE
吗?是否总是可以用 a 对条件和分叉进行编码WHERE
,从而避免IF
?
我们都知道DO
循环比FORALL
Fortran 中的语句更强大。也就是说,您始终可以将 a 替换为FORALL
a DO
,但反之则不行。
WHERE
语句和块呢?
我可以总是IF
用 a代替WHERE
吗?是否总是可以用 a 对条件和分叉进行编码WHERE
,从而避免IF
?
WHERE
语句保留用于数组分配,仅此而已,例如:
INTEGER, DIMENSION(100,100) :: a, b
... define a ...
WHERE(a < 0)
b = 1
ELSEWHERE
b = 0
ENDWHERE
如果你尝试在块WRITE
内添加一些东西,比如一条语句,WHERE
你会看到类似以下编译错误(取决于编译器):
Error: Unexpected WRITE statement in WHERE block at (1)
编辑
请注意,嵌套WHERE
块是合法的:
WHERE(a < 0)
WHERE( ABS(a) > 2)
b = 2
ELSEWHERE
b = 1
ENDWHERE
ELSEWHERE
b = 0
ENDWHERE