次のような Fortran ステートメントを記述する方法は実際にはありません。
call character_variable_containing_subroutine_name
そのような機能を提供することは、Fortran などの静的に型付けされたコンパイル済み言語の粒度に反します。
もちろん、実行時にプログラムが取る実行パスを決定する Fortran プログラムに入力引数を提供できるかどうか尋ねられた場合、答えはもちろんです。あなたの状況の複雑さは無視して、sin
、cos
またはのいずれかを呼び出したいとします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
これにより、後のコードが簡素化される場合があります。また、複雑化する可能性もあると思います。
これらのフラグメントのいずれもテストしていないことに注意してください。私の構文は少し不安定かもしれません。