On 01/25/2017 05:47 PM, Profile Anaysis wrote:

> a 4x4 matrix and have a history of it. Just
> n 4x4 matrices but each matrix is a fixed size but there can be an
> arbitrary(dynamic) number.

I don't think using aliases is recommended yet. It can simplify things a lot:

import std.stdio;

alias Row = int[4];
alias Matrix = Row[4];
alias History = Matrix[];

Row makeRow(int value) {
    Row row;
    row = value;    // Special array syntax; all elements are now 'value'
    return row;
}

Matrix makeMatrix() {
    Matrix matrix;
    foreach (int i, ref row; matrix) {
        row = makeRow(i + 1);
    }
    return matrix;
}

void main() {
    History history;
    foreach (i; 0..3) {
        history ~= makeMatrix();
    }
    writeln(history);
}

As others have said, D's array definition is natural because unlike C's inside-out (or is that outside-in?) syntax, it follows from the alias syntax. Replacing History inside main with Matrix[], etc.:

    History history;    // is the same as:
    Matrix[] history;   // is the same as:
    Row[4][] history;   // is the same as:
    int[4][4][] history;

Ali

Reply via email to