Ali Çehreli:

Took me a while! Phew... :)

  http://dpaste.dzfl.pl/6b362382

I have back-ported your changes to my version, and it works (with few improvements, a larger Busy Beaver, etc):

http://dpaste.dzfl.pl/0791bea9

-----------------------

I have also tried to replace your code like this:

struct TypeListToArray(node : Cons!(value, tail), int value, tail) {
    void opCall(ref int[] output) {
        output ~= value;
        TypeListToArray!tail tl2v;
        tl2v(output);
    }

    static auto opCall() {
        TypeListToArray!node tl2v;
        return tl2v;
    }
}

struct TypeListToArray(node : Repeat!value, int value) {
    void opCall(ref int[] output) {
        output ~= value;
    }
}

import std.array;
void main() {
    import std.stdio;
    alias TuringMachine!(BusyBeaver2, Repeat!0, Repeat!0) tm;

    int[] tape1;
    TypeListToArray!(tm.finalLeft)()(tape1);
...


With a shorter template like:

template TypeListToArray(Node) {
    static if (is(Node Repeat : Repeat!value, int value))
        enum TypeListToArray = [value];

static if (is(Node Cons : Cons!(value, Tail), int value, Tail)) enum TypeListToArray = [value] ~ TypeListToArray!(Node.tail);
}

import std.array;
void main() {
    import std.stdio;
    alias TuringMachine!(BusyBeaver2, Repeat!0, Repeat!0) tm;

    enum tape1 = TypeListToArray!(tm.finalLeft);
...

But it's not working. Do you know why?

Bye,
bearophile

Reply via email to