Ben çalıştırdığınızda
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 0;
my @x = (1,2,3,4);
my @y = find_all_subsets(@x);
foreach my $subset (@y) {
print Dumper($subset), "\n";
}
(+ Özgün senaryo) çıkışı
[1]
[1,4]
[1,3]
[1,3,4]
[1,2]
[1,2,4]
[1,2,3]
[1,2,3,4]
[2]
[2,4]
[2,3]
[2,3,4]
[3]
[3,4]
[4]
[] Çıktı, biz bunları daha sonra geri geleceğiz unutmayın.
function find_all_subsets (array $x) {
if ( 1>= count($x) ) { // the >= differs from the original script, use == or === if you want to keep it "more original"
return array($x);
}
else {
$all_subsets = array();
$last_item = array_pop($x);
$first_subsets = find_all_subsets($x) ;
foreach ($first_subsets as $subset) {
array_push($all_subsets, $subset);
array_push($subset, $last_item);
array_push($all_subsets, $subset);
}
array_push ($all_subsets, array($last_item));
return $all_subsets;
}
}
$x = array(1,2,3,4);
$y = find_all_subsets($x);
foreach($y as $subset) {
echo '(', join(',', $subset), ")\n";
}
üretir
(1)
(1,4)
(1,3)
(1,3,4)
(1,2)
(1,2,4)
(1,2,3)
(1,2,3,4)
(2)
(2,4)
(2,3)
(2,3,4)
(3)
(3,4)
(4)
şimdiye kadar çok iyi. Şimdi geri [] için. Bir dizi ancak bir dizi referans (; Perl gerçekten benim güçlü takım değil ben doğru terimleri kullanmak yoksa beni çıplak) değil beacuse Veri :: Çuvalı) bu [] değil, (seçti. En perl test script değiştirmek izin ve tüm bu referans Thingies var etkisine bakmak.
use Data::Dumper;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 0;
$x2 = 2;
my @x = (1,\$x2,3,4);
my @y = find_all_subsets(@x);
$x2 = 99;
foreach my $subset (@y) {
print Dumper($subset), "\n";
}
ve çıkış değişir
[1]
[1,4]
[1,3]
[1,3,4]
[1,\99]
[1,\99,4]
[1,\99,3]
[1,\99,3,4]
[\99]
[\99,4]
[\99,3]
[\99,3,4]
[3]
[3,4]
[4]
Ben $ x2 find_all_subsets için after () çağrısı ama değiştirmek, görmek hala result yeni değer kullanılır ve Veri :: Çuvalı (bir referans olarak "değer" işaretleri \ 99 yerine sadece 99). Sizin de php komut dosyası bu özelliği ihtiyacınız var mı?