in reply to passing subroutine references
Update: Specifically,
should behanoi( $n - 1, $start, $extra, $end ); $move_disk->( $n, $start, $end ); hanoi( $n - 1, $extra, $end, $start );
hanoi( $n - 1, $start, $extra, $end, $move_disk ); $move_disk->( $n, $start, $end ); hanoi( $n - 1, $extra, $end, $start, $move_disk );
Update: Better fix: (Avoids having a million needless copies of $move_disk)
sub hanoi { my $move_disk = pop(@_); local *_hanoi = sub { my ( $n, $start, $end, $extra ) = @_; if ( $n == 1 ) { $move_disk->( 1, $start, $end ); } else { _hanoi( $n - 1, $start, $extra, $end ); $move_disk->( $n, $start, $end ); _hanoi( $n - 1, $extra, $end, $start ); } }; &_hanoi; } hanoi( $disk, 'A', 'B', 'C', \&check_move ); hanoi( $disk, 'A', 'B', 'C', \&hprint );
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: passing subroutine references
by joe76 (Novice) on Sep 18, 2009 at 22:59 UTC | |
by gwadej (Chaplain) on Sep 19, 2009 at 03:01 UTC | |
|
Re^2: passing subroutine references
by Jenda (Abbot) on Sep 19, 2009 at 10:01 UTC | |
by ikegami (Patriarch) on Sep 19, 2009 at 13:37 UTC | |
by Jenda (Abbot) on Sep 19, 2009 at 15:43 UTC | |
by ikegami (Patriarch) on Sep 20, 2009 at 17:12 UTC | |
by Jenda (Abbot) on Sep 20, 2009 at 21:51 UTC | |
| |
by joe76 (Novice) on Sep 20, 2009 at 17:02 UTC | |
by ikegami (Patriarch) on Sep 20, 2009 at 17:27 UTC | |
by Jenda (Abbot) on Sep 20, 2009 at 21:42 UTC |