Here's the Perl code. ----------
#! perl # http://xahlee.org/tree/tree.html # Xah Lee, 2005-05 #_____ Range _____ _____ _____ _____ =pod B<Range> Range($iMax) generates the list [1, 2, ... , $iMax]. Range($iMin, $iMax) generates the list [$iMin, ... , $iMax]. Range($iMin, $iMax, $iStep) uses increment $iStep, with the last element in the result being less or equal to $iMax. $iStep cannot be 0. If $iStep is negative, then the role of $iMin and $iMax are reversed. If Range fails, 0 is returned. Example: Range(5); # returns [1,2,3,4,5] Range(5,10); # returns [5,6,7,8,9,10] Range( 5, 7, 0.3); # returns [5, 5.3, 5.6, 5.9, 6.2, 6.5, 6.8] Range( 5, -4, -2); # returns [5,3,1,-1,-3] =cut sub Range ($;$$) { if (scalar @_ == 1) {return _rangeFullArgsWithErrorCheck(1,$_[0],1);}; if (scalar @_ == 2) {return _rangeFullArgsWithErrorCheck($_[0],$_[1],1);}; if (scalar @_ == 3) {return _rangeFullArgsWithErrorCheck($_[0],$_[1],$_[2]);}; }; sub _rangeFullArgsWithErrorCheck ($$$) { my ($a1, $b1, $dx) = @_; if ($dx == 0) {print "Range: increment cannot be zero."; return 0} elsif ($a1 == $b1) {return [$a1];} elsif ( ((($b1 - $a1) > 0) && ($dx < 0)) || ((($b1 - $a1) < 0) && ($dx > 0)) ) {print "Range: bad arguments. You have [$a1,$b1,$dx]"; return 0;} elsif ((($a1 < $b1) && ($b1 < ($a1 + $dx))) || (($a1 > $b1) && ($b1 > ($a1 + $dx)))) {return [$a1];} else { return _rangeWithGoodArgs ($a1,$b1,$dx);}; }; sub _rangeWithGoodArgs ($$$) { my ($a1, $b1, $dx) = @_; my @result; if ($a1 < $b1) {for (my $i = $a1; $i <= $b1; $i += $dx) { push (@result, $i);}; } else {for (my $i = $a1; $i >= $b1; $i += $dx) { push (@result, $i);}; }; return [EMAIL PROTECTED]; }; #end Range ########## # test use Data::Dumper; print Dumper(Range(5,7,0.3)); -- http://mail.python.org/mailman/listinfo/python-list