Fortran if then 和指令都在同一行
Fortran if then and instruction all on the same line
我不会说 Fort运行,但我正在尝试将一些功能从 Fort运行 重新编码为 Python。我无法编译和 link 整个原始源代码(也涉及 c 库)和调试原始代码。但是我陷入了经验编码员可能会提供帮助的一小部分。本质上,在 Fort运行 代码的中间,我们有一个带指令的 if 语句,但在同一行上还有一个“then”:
If (something) then instruction
Something
Something etc.
这是嵌套在一系列“if end if”块中。
我知道这不是 recommended/allowed 的语法,但程序显然 运行 没问题。我的 Python 版本没有,所以这可能是我错误的根源。所以我的问题是;我是否只是忽略“然后”将其视为
IF (something) instruction
Something
Something etc
或者,在这种情况下,我是否应该寻找结束语“如果结束”?
这甚至清楚问题是什么吗?
实际代码,如此处所建议:
有问题的行是:
if (t.lt.1.) then i=i-1
所有缩进已发布..
subroutine detpic(sen,der,i)
dimension sen(100000),der(100000)
logical detmax,derpos
detmax=.false.
do while (der(i).eq.0.)
i=i+1
if (i.gt.39999) then
return
end if
end do
if (der(i).gt.0.) then
derpos=.true.
else
derpos=.false.
end if
do while (detmax.eqv..false.)
if (derpos.eqv..true.) then
do while (der(i).ge.0.)
i=i+1
if (i.gt.39999) then
return
end if
end do
t=der(i-1)/(-der(i))
if (t.lt.1.) then i=i-1
detmax=.true.
else
do while (der(i).le.0)
i=i+1
if (i.gt.39999) then
return
end if
end do
derpos=.true.
end if
end do
return
end
这样的语句
if (t.lt.1.) then i=i-1
如果源是固定形式(并且仅当是固定形式),则它是一个有效的 Fortran IF 语句。和
是一样的说法
if (t.lt.1.) theni=i-1
这是对变量theni
的条件赋值。这是又一次 implicit none
和使用 free-form 源代码使代码更容易调试和理解。
If free-form source 这不是有效的 IF 语句或 IF 构造介绍。
更一般地说,除赋值语句或指针赋值语句外,没有任何操作语句以四个字符 then
开头。同样,除了 IF 或 IF-THEN 语句之外,没有其他语句以 if(expression) then
开头。总之,这些意味着 if (condition) then something
(对于 non-whitespace something
)的唯一解释是作为 IF 语句中的赋值或指针赋值操作语句。
我不会说 Fort运行,但我正在尝试将一些功能从 Fort运行 重新编码为 Python。我无法编译和 link 整个原始源代码(也涉及 c 库)和调试原始代码。但是我陷入了经验编码员可能会提供帮助的一小部分。本质上,在 Fort运行 代码的中间,我们有一个带指令的 if 语句,但在同一行上还有一个“then”:
If (something) then instruction
Something
Something etc.
这是嵌套在一系列“if end if”块中。 我知道这不是 recommended/allowed 的语法,但程序显然 运行 没问题。我的 Python 版本没有,所以这可能是我错误的根源。所以我的问题是;我是否只是忽略“然后”将其视为
IF (something) instruction
Something
Something etc
或者,在这种情况下,我是否应该寻找结束语“如果结束”? 这甚至清楚问题是什么吗? 实际代码,如此处所建议: 有问题的行是:
if (t.lt.1.) then i=i-1
所有缩进已发布..
subroutine detpic(sen,der,i)
dimension sen(100000),der(100000)
logical detmax,derpos
detmax=.false.
do while (der(i).eq.0.)
i=i+1
if (i.gt.39999) then
return
end if
end do
if (der(i).gt.0.) then
derpos=.true.
else
derpos=.false.
end if
do while (detmax.eqv..false.)
if (derpos.eqv..true.) then
do while (der(i).ge.0.)
i=i+1
if (i.gt.39999) then
return
end if
end do
t=der(i-1)/(-der(i))
if (t.lt.1.) then i=i-1
detmax=.true.
else
do while (der(i).le.0)
i=i+1
if (i.gt.39999) then
return
end if
end do
derpos=.true.
end if
end do
return
end
这样的语句
if (t.lt.1.) then i=i-1
如果源是固定形式(并且仅当是固定形式),则它是一个有效的 Fortran IF 语句。和
是一样的说法 if (t.lt.1.) theni=i-1
这是对变量theni
的条件赋值。这是又一次 implicit none
和使用 free-form 源代码使代码更容易调试和理解。
If free-form source 这不是有效的 IF 语句或 IF 构造介绍。
更一般地说,除赋值语句或指针赋值语句外,没有任何操作语句以四个字符 then
开头。同样,除了 IF 或 IF-THEN 语句之外,没有其他语句以 if(expression) then
开头。总之,这些意味着 if (condition) then something
(对于 non-whitespace something
)的唯一解释是作为 IF 语句中的赋值或指针赋值操作语句。