Iterators: Difference between revisions
Content added Content deleted
(added Perl programming solution) |
Tag: Undo |
||
Line 486: | Line 486: | ||
Saturday, Wednesday, Tuesday |
Saturday, Wednesday, Tuesday |
||
Purple, Yellow, Orange |
Purple, Yellow, Orange |
||
</pre> |
|||
=={{header|Perl}}== |
|||
<syntaxhighlight lang="perl" line># 20221013 Perl programming solution |
|||
use strict; |
|||
use warnings; |
|||
sub printArrayForward ($@) { |
|||
my ($aref,@needles) = @_; |
|||
my $pointer = 0; |
|||
while ( defined ( my $needle = shift @needles )) { |
|||
while ( $needle > $pointer and defined $aref->[$pointer] ) { ++$pointer } |
|||
print "$aref->[$pointer++] " if $pointer == $needle; |
|||
} |
|||
} |
|||
sub printArrayBackward ($@) { |
|||
my ($aref,@needles) = @_ ; |
|||
my ($pointer, $end) = (0, -1); |
|||
while ( defined $aref->[++$pointer] ) { }; |
|||
while ( defined ( my $needle = shift @needles )) { |
|||
while ( $needle < $end ) { --$end and --$pointer } |
|||
print "$aref->[$pointer-1] " if $end == $needle; |
|||
last unless defined $aref->[$pointer-1] |
|||
} |
|||
} |
|||
sub printLListForward ($@) { |
|||
my ($llref,@needles) = @_; |
|||
my $pointer = 0; |
|||
while ( defined ( my $needle = shift @needles )) { |
|||
while ( $needle > $pointer and defined $llref->[1] ) { |
|||
++$pointer and $llref = $llref->[1] |
|||
} |
|||
print "$llref->[0] " if $pointer == $needle; |
|||
++$pointer and $llref = $llref->[1]; |
|||
} |
|||
} |
|||
sub printLListBackward ($@) { |
|||
my ($llref,@needles) = @_; |
|||
my ($end, @stack) = -1; |
|||
while ( defined $llref->[1] ) { |
|||
unshift @stack, $llref->[0] and $llref = $llref->[1] |
|||
} |
|||
while ( defined ( my $needle = shift @needles )) { |
|||
while ( $needle < $end ) { --$end and shift @stack } |
|||
print shift @stack , " " and --$end |
|||
} |
|||
} |
|||
my @dow = qw <Sunday Monday Tuesday Wednesday Thursday Friday Saturday>; |
|||
my @color = qw <red orange yellow green blue purple>; |
|||
my $LList = [ undef ]; |
|||
foreach ( reverse @color ) { $LList = [ $_ , $LList ] } |
|||
my $copy = $LList; |
|||
print "All elements:\n"; |
|||
for ( @dow ) { print "$_ " } |
|||
print "\n"; |
|||
while ( defined $copy->[1] ) { print "$copy->[0] " and $copy = $copy->[1] } |
|||
print "\n\nFirst, fourth, and fifth elements:\n"; |
|||
printArrayForward \@dow, (0,3,4); |
|||
print "\n"; |
|||
printLListForward $LList, (0,3,4); |
|||
print "\n\nReverse first, fourth, and fifth elements:\n"; |
|||
printArrayBackward \@dow, (-1,-4,-5); |
|||
print "\n"; |
|||
printLListBackward $LList, (-1,-4,-5); |
|||
print "\n";</syntaxhighlight>{{out}} |
|||
<pre>All elements: |
|||
Sunday Monday Tuesday Wednesday Thursday Friday Saturday |
|||
red orange yellow green blue purple |
|||
First, fourth, and fifth elements: |
|||
Sunday Wednesday Thursday |
|||
red green blue |
|||
Reverse first, fourth, and fifth elements: |
|||
Saturday Wednesday Tuesday |
|||
purple yellow orange |
|||
</pre> |
</pre> |
||