Thread Dynamisierung von Code - Grenzen der Machbarkeit? (13 answers)
Opened by ArthurDent at 2017-02-21 23:02

hlubenow
 2017-02-23 13:54
#186163 #186163
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
Hab' mir gerade nochmal die jeweiligen Inhalte von todo_list und todo[1] ausgeben lassen. Skript dazu (im Prinzip Muffis Code von oben):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/perl

use warnings;
use strict;
use feature 'say';
use Data::Dumper;
$Data::Dumper::Indent = 0;

my $n = 3;
my $k = 2;

my @todo_list = ([ 0, [] ]);

while (@todo_list) {
    my $todo = pop @todo_list;
    my $local_n = $todo->[0] +1;
    for my $curr_k (1..$k) {
        if ($local_n == $n) {
            print "x ";
            print Dumper(\@todo_list);
            print "   ->   ";
            say join(', ', @{$todo->[1]}, $curr_k);
        }
        else {
            push @todo_list, [ $local_n, [ @{$todo->[1]}, $curr_k ] ];
            print Dumper(\@todo_list);
            print "   :   ";
            say join(', ', @{$todo->[1]}, $curr_k);
        }
    }
}

Ausgabe (nachträglich etwas von Hand eingerückt):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$VAR1 = [[1,[1]]];                       :   1
$VAR1 = [[1,[1]],[1,[2]]]; : 2
$VAR1 = [[1,[1]],[2,[2,1]]]; : 2, 1
$VAR1 = [[1,[1]],[2,[2,1]],[2,[2,2]]]; : 2, 2

x $VAR1 = [[1,[1]],[2,[2,1]]]; -> 2, 2, 1
x $VAR1 = [[1,[1]],[2,[2,1]]]; -> 2, 2, 2
x $VAR1 = [[1,[1]]]; -> 2, 1, 1
x $VAR1 = [[1,[1]]]; -> 2, 1, 2

$VAR1 = [[2,[1,1]]]; : 1, 1
$VAR1 = [[2,[1,1]],[2,[1,2]]]; : 1, 2

x $VAR1 = [[2,[1,1]]]; -> 1, 2, 1
x $VAR1 = [[2,[1,1]]]; -> 1, 2, 2
x $VAR1 = []; -> 1, 1, 1
x $VAR1 = []; -> 1, 1, 2

Ich hatte mir vorgestellt, todo_list würde sich aufbauen, dann würde ein Ergebnis ausgegeben, und todo_list würde wieder vom Anfang starten (also fast leer).
Das ist aber nicht der Fall: todo_list baut sich erst eine Weile auf, dann plötzlich werden nacheinander mehrere Ergbnisse ausgegeben (die Zeilen mit 'x') und dann geht es irgendwie weiter.
Am Ende werden nochmal zwei Werte ausgegeben, obwohl todo_list schon völlig leer ist.

Seltsam.

View full thread Dynamisierung von Code - Grenzen der Machbarkeit?