1

さまざまなサブルーチンを含む Fortran のプログラムがあり、すべてのサブルーチンを先験的に知っているわけではなく、ユーザーがコマンドラインからそのうちの 1 つの名前を次のように入力するとします。

    プログラム subroutine_name

したがって、subroutine_name文字変数に格納します。このように、サブルーチンを格納するための外部変数を宣言することはできません。では、その名前を知っているだけで、どのように呼ぶことができますか? この方法で可能ですか、またはこれを達成する別の方法はありますか?

4

1 に答える 1

2

次のような Fortran ステートメントを記述する方法は実際にはありません。

call character_variable_containing_subroutine_name

そのような機能を提供することは、Fortran などの静的に型付けされたコンパイル済み言語の粒度に反します。

もちろん、実行時にプログラムが取る実行パスを決定する Fortran プログラムに入力引数を提供できるかどうか尋ねられた場合、答えはもちろんです。あなたの状況の複雑さは無視して、sincosまたはのいずれかを呼び出したいとしますtan

まず、プログラムへの引数のテキストを文字変数にキャプチャします。

character(len=*) :: user_choice
...
call get_command_argument(1,user_choice)
...
select case (user_choice)
case ('sin')
   ... do stuff with sin
case ('cos')
   ... do stuff with cos
case ('tan')
   ... do stuff with tan
case default
   ... do whatever
end select

プロシージャ ポインタを使用すると、これをより複雑にすることができます。たとえば、次のように定義できます。

pointer :: rp
interface
 real function rp(inval)
    real, intent(in) :: inval
  end function rp
end interface

select case次に、構成の最初のバージョンを次のようなものに置き換えます。

select case (user_choice)
case ('sin')
   rp => sin
case ('cos')
   rp => cos
case ('tan')
   rp => tan
case default
   ... do whatever
end select

これにより、後のコードが簡素化される場合があります。また、複雑化する可能性もあると思います。

これらのフラグメントのいずれもテストしていないことに注意してください。私の構文は少し不安定かもしれません。

于 2013-01-11T15:04:18.353 に答える