IF和WHERE的等价性

时间:2013-08-15 16:53:19

标签: if-statement fortran where conditional-statements

我们都知道DO循环比Fortran中的FORALL语句更强大。也就是说,您始终可以用FORALL代替DO,反之亦然。

WHERE语句和阻止怎么办?

我是否可以始终用IF替换WHERE?是否始终可以使用WHERE对条件和分岔进行编码,从而避免使用IF

1 个答案:

答案 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