Я не говорю на Фортране, но пытаюсь перекодировать несколько функций из Фортрана в Python. Я не могу скомпилировать и слинковать весь исходный код (включая библиотеки c) и отладить исходный код. Но я застрял на небольшом кусочке, с которым может помочь опытный кодер. По сути, в середине кода Фортрана у нас есть оператор if с инструкцией, но ТАКЖЕ «тогда» в той же строке:
If (something) then instruction
Something
Something etc.
это вложено в серию блоков «if end if». Я знаю, что синтаксис этого не рекомендуется/разрешен, но программа, по-видимому, работала нормально. Моя версия 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
Спасибо, Скотт… скоро…
Добавление кода не отображалось до того, как я закрыл его как дубликат; с этим кодом действительно есть тонкая разница.
Спасибо, @francescalus, да, это перестановка, которую я не рассматривал. Что касается связанного вопроса; хорошо, я действительно знаю, как это должно было быть закодировано; как вы понимаете, моя проблема в том, как он будет вести себя так, как написано. Я удивлен, что оригинал вообще работает, но, судя по всему, он работает и пользуется популярностью уже 20 лет. Перекодирование на Python казалось простой задачей, пока я не начал сталкиваться с проблемами в исходном коде. (archive.physionet.org/physiotools/wfdb.shtml)
Есть ли implicit none
в модуле? Свободная форма или фиксированная форма? Какое расширение у файла? Возможно, вы просто назначаете theni
Нет никаких неявных утверждений none, спасибо, нет. ….Свободная форма, фиксированная форма не знаю. Кажется, есть много утверждений, начинающихся в разных столбцах, но комментарии всегда начинаются с C. Я думаю, что это не «!»
Расширение файла OF
Заявление вроде
if (t.lt.1.) then i=i-1
является допустимым оператором Fortran IF, если источник находится в фиксированной форме (и только если в фиксированной форме). Это то же утверждение, что и
if (t.lt.1.) theni=i-1
которое является условным присвоением переменной theni
. Это еще один случай, когда implicit none
и использование исходного кода в свободной форме значительно упрощает отладку и понимание кода.
Если источник в свободной форме, это недопустимый оператор IF или введение конструкции IF.
В более общем смысле ни один оператор действия, кроме оператора присваивания или оператора присваивания указателя, не начинается с четырех символов then
. Точно так же никакое утверждение, кроме оператора IF или IF-THEN, не начинается с if (expression) then
. Вместе это означает, что единственная интерпретация if (condition) then something
(для непробельных something
) — это оператор присваивания или присваивания указателя в операторе IF.
Было бы понятнее с реальным кодом.