4

私が知っているように、これはいくつかの関数の通常の定義です:

real function f(x)
  real x
  f = (sin(x))**2*exp(-x)
end function f

しかし、文字列から関数を定義したいのです。たとえば、プログラムから関数を書くように求められ、プログラムで関数fを定義します。これは Fortran で可能ですか?

4

2 に答える 2

4

あなたが探していることは、リフレクティブ プログラミング言語では可能ですが、Fortran では不可能です。

上記リンクより引用:

リフレクションをサポートする言語は、実行時に利用できる多くの機能を提供します。これらの機能がなければ、下位レベルの言語では実現できません。これらの機能の一部は、次の機能です。

  • 実行時にソース コードの構造 (コード ブロック、クラス、メソッド、プロトコルなど) をファーストクラス オブジェクトとして検出して変更します。

  • クラスまたは関数の記号名に一致する文字列を、そのクラスまたは関数への参照または呼び出しに変換します。

  • 実行時にソース コード ステートメントであるかのように文字列を評価します。

  • 言語のバイトコードの新しいインタープリターを作成して、プログラミング構造に新しい意味または目的を与えます。

于 2013-09-26T19:20:54.733 に答える
1

私はかつて、似たようなことを達成しようとしたプロジェクトに取り組みました。名前付き変数と数学演算 (お望みなら関数) を含む文字列を含む文字列を読み込みます。この文字列では、変数が数値に置き換えられ、項が評価されました。

基本的な考え方はそれほど難しくありませんが、多くの文字列操作が必要でfunctionあり、プログラミング言語のコンテキストではありません。

次のようにしました。

  • +文字列を, -, /,で再帰的に分割しますが、*括弧を尊重することを忘れないでください
  • これが不可能な場合 (ブラケットに違反しない限り)、残りの文字列を評価します。
    • のような数式が含まれていますcosか? はい => 引数に再帰します
    • いいえ=>数式を評価します(変数は許可されていませんが、置き換えられました)

これは非常にうまく機能しますが、次のものが必要です。

  • 文字列の分割
  • 文字列でのマッチング
  • 弦を他の弦に交換するなど。

これは Fortran で行うのは簡単ではないので、他のオプション (値を返す外部ツール/スクリプトを呼び出すなど) がある場合は、特に Fortran を初めて使用する場合は、それを検討します。

于 2013-09-26T19:27:48.967 に答える