Perlスクリプトの空きメモリ

Perlスクリプトの空きメモリ

これらすべての組み合わせを望んでいますが、メモリが不足しています。スクリプトからメモリを解放するには?

use strict;
use warnings;

use Algorithm::Combinatorics 'variations_with_repetition';

my @let = qw/ A G C T /;
my @cad = variations_with_repetition(\@let, 24);
print "@$_\n" for @cad;

ベストアンサー1

解決策は単にを使用することですiterators。結果をvariations_with_repetitionスカラーに割り当てると、次の要素を取得するために毎回クエリできるイテレータが生成されます。これにより、リスト全体をメモリに保存する必要がなくなり、最初の要素にすぐにアクセスできます。という素敵なコンセプトです。怠惰な評価。あなたのケースのコードは次のとおりです。

use strict;
use warnings;
use Algorithm::Combinatorics 'variations_with_repetition';

my @let = qw / A G C T/;
my $cad = variations_with_repetition(\@let,24);
while(my $c = $cad->next)
{
    print "@$c\n";
}

イテレータは実際に配列への参照を返します。まず、これを逆参照してから組み合わせるか、必要な操作を実行する必要があります。

テスト結果:私は私のコンピュータで初期コードを実行することはできませんでした(メモリの使用量は予想通り無限に増加しました)、Perlはメモリをほとんど消費しない間、イテレータを使用してすぐに出力ラインを取得し始めました。

おすすめ記事