2016-11-02 9 views
2

たとえば、私が行うATSの例を探しています多かれ少なかれ、次のCコードが何をするか:ATSに2次元配列を作成するには?

int *theMultable[10][10]; 

void 
theMultable_initialize() 
{ 
    int i, j; 
    for (i = 0; i < 10; i++) 
    { 
    for (j = 0; j < 10; j++) theMultable[i][j] := i * j; 
    } 
    return; 
} 

答えて

1

一つの可能​​なアプローチは、しかしC.への直接変換を試みることで、私は今だと思います代わりに組み込みのmatrixを使っていたはずです。このコードは、高度な機能のかなり上に(私も運動のために1未確認補題を左に依存する:。

extern 
fun 
multable_init (
    mat: &(@[@[int][10]][10])? >> _ 
): void // end of [multable_init] 
:それは N*sizeof(T) == sizeof(@[T][N])

2次元アレイを初期化するループ機能内に実装されていることを示しています

この関数は2つの関数(基本的に要素の配列を初期化します)とグローバル変数multableを割り当てて、multable_initを使って初期化します。 。

ここにグローバルvaの初期化のコードがありますriable:

var multable : @[int?][100] 
val p_multable = [email protected] 
prval pf_multable = array_v_group ([email protected]) 
val() = multable_init (!p_multable) 
prval pf_multable = array_v_ungroup (pf_multable) 
prval pf_multable = array2matrix_v (pf_multable) 
val theMultable = ref_make_viewptr {matrix (int, 10, 10)} (pf_multable | p_multable) 

可変配列をスタック上に割り当てられ、その後、我々は、そのアドレス(ライン2)、それは、(ライン3にグルーピングを介して)@[int?][100]から@[@[int?][10]][10]とでプルーフ対応ターンを取り、それを初期化します。次に、グループ化された配列ビューを行列ビューに変換し、最後にそれをref-cellに入れます。

完全なコードは、残りの補助定理を証明するようGlot.io

+0

任意の可能なヒントでありますか?これはATS定理の能力を証明する良い練習のようですが、私は出発点を見つけることができません。 –

+0

は実際に言えば、可能であればそれを示すことは非常に面倒であるため、それは仮定されるべきであると考える。また、コードをベクトルで再利用する低次元行列の以前のコード(列行列は列ベクトルのN行と見なされます)に適用されたため、コードはこのように(グループ化された配列ビューで)書き込まれます。 ;列ベクトルを初期化する方法が分かっていれば、これらからなる行列を簡単に初期化できます。 –

関連する問題