2

私はこの問題で頭がおかしくなっています。Fortran を Javascript に変換するために、Interpreter を書き、次に Transpiler を書きました。しかし、変数を参照渡しするという問題に悩まされるたびに。

ご存知のように、Fortran では、参照渡しと値渡しの間に構文の違いはなく、すべて同じように見えます。ただし、Javascript では、変数がオブジェクトに渡された場合にのみ、参照渡しが機能します。

Fortran のサンプル コード:

REAL FUNCTION PYTHAGORAS (A,B,K)
REAL A,B,K
K = 12 // E <=> K in GEOMETRIE()
PYTHAGORAS = SQRT(A**2+B**2)
END FUNCTION PYTHAGORAS

LOGICAL FUNCTION GEOMETRIE (H,B,D)
REAL H,B,D,E
B = 12 
H = 7
// E is pass by reference, it's gonna be changed in PYTHAGORAS()
D = PYTHAGORAS(B, H, E) 
GEOMETRIE = .TRUE.
END FUNCTION GEOMETRIE

私は多くの調査を行いましたが、今まで有用な結果は見つかりませんでした。

ジョブを実行するためのライブラリがあるかどうか疑問に思っていました (クライアント側/NodeJS)。今まで誰もこの問題を解決しようとしなかったとは想像できません。

4

1 に答える 1

3

怠惰なハックは、関数に渡された変数を JS オブジェクトに体系的に埋め込むことです。

function PYTHAGORAS(obj /* A B K */) {
  obj.K = 12;
  return Math.sqrt(obj.A * obj.A + obj.B * obj.B);
}

function GEOMETRIE(obj /* H B D */) {
  var E;
  obj.B = 12; 
  obj.H = 7;

  obj.D = PYTHAGORAS({A:obj.B, B:obj.H, K:E}); 
  return true;
}

var res = {H:0, B:0, D:0};

GEOMETRIE(res);
console.log(res);

出力:

Object { H=7,  B=12,  D=13.892443989449804 }

これは、元のリストの自動翻訳の仮説ではかなりうまく機能する可能性があり、結果の JS コードは元の FORTRAN コードと簡単に比較できます。

今では、完全に手動で書き直すのではなく、不必要に冗長で過負荷になります。

EDIT : 本当に分離された変数を持つ代替バージョン

function PYTHAGORAS(A, B, K) {
  K.val = 12;
  return Math.sqrt(A.val * A.val + B.val * B.val);
}

function GEOMETRIE(H, B, D) {
  var E = {}; 
  B.val = 12; 
  H.val = 7;

  D.val = PYTHAGORAS(B, H, E); 
  console.log('E = ' + E.val);
  return true;
}

var H = {}
, B = {}
, D = {};

GEOMETRIE(H, B, D);
console.log('H = ' + H.val + ', B = ' + B.val + ', D = ' + D.val);

出力:

E = 12
H = 7, B = 12, D = 13.892443989449804
于 2016-07-05T10:06:33.607 に答える