我们都知道,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

08-18 07:01