IF和WHERE的等价性

Ale*_*o B 5 fortran if-statement where conditional-statements

我们都知道DO循环比FORALLFortran中的语句更强大.也就是说,您总是可以用a代替,而不是FORALL用a 代替DO.

怎么样的WHERE陈述和块?

我可以一直替换IF一个WHERE吗?是否总是可以用a编码条件和分叉WHERE,从而避免IF

Kyl*_*nos 9

WHERE 语句保留给数组赋值而不保留,例如:

INTEGER, DIMENSION(100,100) :: a, b
... define a ...
WHERE(a < 0)
   b = 1
ELSEWHERE
   b = 0
ENDWHERE
Run Code Online (Sandbox Code Playgroud)

如果您尝试在块中添加某些内容(例如WRITE语句),WHERE您会看到类似于以下编译错误(依赖于编译器)的内容:

Error: Unexpected WRITE statement in WHERE block at (1)
Run Code Online (Sandbox Code Playgroud)

编辑

请注意,嵌套WHERE块是合法的:

WHERE(a < 0)
   WHERE( ABS(a) > 2)
      b = 2
   ELSEWHERE
      b = 1
   ENDWHERE
ELSEWHERE
   b = 0
ENDWHERE
Run Code Online (Sandbox Code Playgroud)

  • 正确,这是一个简单的答案.一个简单的10行代码也可以告诉你相同的答案,而不是问我们:/ (3认同)