我们都知道DO
循环比Fortran中的FORALL
语句更强大。也就是说,您始终可以用FORALL
代替DO
,反之亦然。
WHERE
语句和阻止怎么办?
我是否可以始终用IF
替换WHERE
?是否始终可以使用WHERE
对条件和分岔进行编码,从而避免使用IF
?
答案 0 :(得分:9)
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