6

我们都知道DO循环比FORALLFortran 中的语句更强大。也就是说,您始终可以将 a 替换为FORALLa DO,但反之则不行。

WHERE语句和块呢?

我可以总是IF用 a代替WHERE吗?是否总是可以用 a 对条件和分叉进行编码WHERE,从而避免IF?

4

1 回答 1

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
于 2013-08-15T17:33:51.470 回答