FORTRANに数値ライブラリがあり(FORTRAN IVだと思います)、それをPythonコードに変換したいと思います。 Python仮想マシン--- Windows、MacOS-X、Linux、Androidにインポートできる実際のソースコードが必要です。私はこれを手作業で始めましたが、ライブラリには約1,000のルーチンがあるため、これは合理的な解決策ではありません。
edit:numpyに関する情報を追加
このようなツールは、 FortranからLISP 、または FortranからC 、さらには FortranからJava )用に存在します。単純な理由で、Fortran to Pythonツールはありません:Fortran、LISP、またはCとは異なり、PythonにはGOTOがありません-)[1]。Fortran(特にFortran IV)コードには多くのGOTOがあります。構造化プログラミングでGOTOをエミュレートできるという Jacopini の定理があっても、実装するのは面倒です。実際の(そして効率的な)言語変換ツール。
したがって、1000個のルーチンのコードを変換する必要があるだけでなく、Pythonで記述する前に、各アルゴリズムとそのすべての組み込まれたgotoを理解し、アルゴリズムを構造化プログラムに変換する必要があります。頑張ってください。 !!
ねえ、なぜラッパーが悪いと思いますか? Windows、OSX、およびLinuxにはすべて、FortranおよびC [2]コンパイラーと優れたラッパーがあります!
Cの場合(ここではあなたの言語ではありませんが、 f2c はオプションかもしれません)、 [〜#〜] swig [〜#〜] があり、Fortranには f2py 、現在は numpy と統合されています。 SWIGにはいくつかの Android のサポートがあります。
ちなみに、「純粋な」Pythonに変換する代わりに、numpyを使用できます。numpyの機能はFortran 90に似ているため(比較 ここ を参照)、最初にプログラムをF90に変換してよりスムーズな移行。 AdnroidのNumpy もあるようです。また、64ビットWindowsでnumpyが必要な場合は、バイナリ ここ があります。
ラッパーを使用する場合、gfortranはLinux(配布パッケージからインストールするだけ)、Windows( MinGW )、および Android で実行されます。その行に沿って、FIVコードをコンパイルすることを忘れないでください。そのため、通常の「ワントリップループ」の問題が発生します(通常はコンパイラオプションで問題ありません)。おそらく、古い非標準のステートメントを手動で変換する必要があります。最新のコンパイラにはありません。
もちろん、プロジェクト言語をLISPまたはJavaに切り替えるオプションもあります...
[1]あなたは尋ねるかもしれません:しかしGOTOが問題であるなら、なぜJavaツールへのFortranがあるのですか?まあ、それは内部に GOTO)を持っているJVMでトリックを使用します命令 。Pythonバイトコード(JUMP ここ を探してください)にもGOTOがあるので、ここで調査することがあるかもしれません。したがって、私の前のステートメントは間違っています:そこにFortranからPythonツール、Javaのようなバイトコードトリックを使用します。しかし、開発はまだ残っており、優れたライブラリ(numpy、matplotlib、pandasなど)が利用可能です。 。)控えめに言っても不要になります。
I 翻訳者を書いた FortranのサブセットをPython(および他のいくつかの言語)に変換します。Fortranの小さなサブセットとのみ互換性がありますが、私はそれを望んでいますそれでも役に立ちます。
翻訳者はこのFortran関数を解析できます。
LOGICAL function is_greater_than(a, b)
real,intent(in) :: a
real,intent(in) :: b
is_greater_than = a<b
end function is_greater_than
...そしてそれをこのPython関数:
def is_greater_than(a,b):
return a<b