我们都知道,DO
循环比Fortran中的FORALL
语句更强大。也就是说,您总是可以用FORALL
代替DO
,反之亦然。WHERE
语句和块呢?
我可以始终用IF
代替WHERE
吗?是否总是可以用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