2013-08-28 42 views
-2

林之間的非零整數尋找(如何做?)功能(模塊?),對於

my $scalar = 16; 
return function ($scalar); 

@return = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); 

也就是說,給出1和$標量之間的非零整數。

可以假設$標量是一個很大的數字,但我不是特別尋找超級最優解。

+2

''@return = [1,2,...,16];''沒有多大意義。它應該是''@return =(1,2,...,16);''或$'return = [1,2,...,16];''。請參閱http://perldoc.perl.org/perlreftut.html – mzedeler

回答

1

當你想11_000_000_000之間的所有整數會發生什麼?即使您的計算機有足夠的內存,您也不想創建一個大的數組。

#!/usr/bin/env perl 

use strict; 
use warnings; 

sub make_lazy_increasing_sequence { 
    my ($current, $end) = map int, @_; 
    return sub { 
     return if $current > $end; 
     return $current++; 
    } 
} 

my $from_1_to_5 = make_lazy_increasing_sequence(1, 5); 
my @others; 

while (defined(my $i = $from_1_to_5->())) { 
    push @others, make_lazy_increasing_sequence($i, 10_000); 
} 

for (1 .. 10) { # perl makes sure this range is lazy 
    print join(',', map $_->(), @others), "\n"; 
} 

print $others[-1]->(), "\n"; 

輸出:

1,2,3,4,5 
2,3,4,5,6 
3,4,5,6,7 
4,5,6,7,8 
5,6,7,8,9 
6,7,8,9,10 
7,8,9,10,11 
8,9,10,11,12 
9,10,11,12,13 
10,11,12,13,14 
15
2
sub getvalue { 
     my @array1 = 1..$_[0]; 

     return (@array1); 
    } 

其他

sub getvalue { 
      return (1..$_[0]); 
     } 

指這也更多的瞭解範圍操作

http://www.perlmonks.org/?node_id=377450

+0

爲什麼不只是'返回1 .. $ _ [0]'? – friedo

+0

您也可以通過對輸入進行錯誤檢查來使其更穩健。我認爲OP需要一個數組引用。 – squiguy

+0

@friedo罰款我們也可以這樣做,謝謝你的評論 – Backtrack

3

[1..16] 創建一個數組引用

1..16創建一個列表。

試試這個源

use Data::Dumper; 
$c = [1..16]; 
@d = 1..16; 
print Dumper $c; 
print Dumper \@d; 
+0

OP已經改變了他的答案並刪除了陣列參考。你應該更新你的答案來反映這一點,或者你看起來像是你的答案。 – TLP

+0

@TLP哦!我改變了我的答案。 –

5

Range Operator..回報相匹配正是你想要的清單。

創建從1列表以$x,語法只是1 .. $x

要賦值給一個數組變量,@array = 1 .. $x;