我们都知道DO循环比FORALLFortran 中的语句更强大。也就是说,您始终可以将 a 替换为FORALLa DO,但反之则不行。
WHERE语句和块呢?
我可以总是IF用 a代替WHERE吗?是否总是可以用 a 对条件和分叉进行编码WHERE,从而避免IF?
我们都知道DO循环比FORALLFortran 中的语句更强大。也就是说,您始终可以将 a 替换为FORALLa DO,但反之则不行。
WHERE语句和块呢?
我可以总是IF用 a代替WHERE吗?是否总是可以用 a 对条件和分叉进行编码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