Thread Pythagorische Tripel (18 answers)
Opened by Ronnie at 2008-10-19 15:57

LanX-
 2008-10-31 23:32
#115890 #115890
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
also ich weiß nicht ...
Quote
Perl programmers are obsessed with syntax!
--- M.J.Dominus


Ehrlich gesagt eine allgemeine Lösung mit Continuations wär mir eigentlich lieber!

Moritz hat sich schon daran versucht, allerdings erscheint mir CPAN:Coro ziemlich gewaltig...

CPAN:gather-take


Schade dass es für Perl keinen verlässlichen Macromechanismus gibt bzw. mir aufdrängt.

Sonst ginge nämlich sowas:

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
32
{
    my $j=0;
    my $resume=0;
    my $db=0;                         # Debugflag

    sub gather {
        goto $resume if $resume;      # Dispatcher

        while (++$j<=5) {

            $resume="rein", goto raus
                unless  ( $j%2 );     # Take
          rein:


            print "$j\n" if $db;
        }


        $resume=0;                    # Ausgang
        return;

      raus:
        print "-" if $db;
        return $j;
    }
}


while ( my $a=gather() ) {
    print "<<$a>>";
}


Syntaktisch müsste es allerdings so aussehen, um akzeptabel zu sein

Code (perl): (dl )
1
2
3
4
5
gather {   
        while ( $j = iter (1,5) ) {
                take($j) if  ( $j%2 );
        }
}


Ich bin am überlegen ob man sowas mit B::Deparse und anschließendem eval des veränderten Codes umsetzen könnte/sollte ... naja irgendwie können auf jeden Fall !

Ne Alternative wäre wenn man den Callstack um eine Ebene poppen könnte, sodass ein return auf den drüberliegende Ebene greifen würde... dann bräuchte man keinen Codefilter mehr und man könnte echte foreach-Schleifen nehmen.

Schwierig schwierig ...

View full thread Pythagorische Tripel