私のAPLに精通していると、問題解決のためのアルゴリズム的なアイデアが得られることがあります。たとえば、Perlなどの言語で実装し直すことができます。PerlでAPL圧縮演算子を実装する最良の方法は何ですか?
私は、区切られたファイルで使用されているフィールドを示すブールベクトルを作成するためにテキストファイルを処理しました。そして、使用されたフィールドのインデックスと使用されるフィールドの名前を出力します。 APLでは、フィールド名のベクトルとフィールド数のiotaに渡ってcompress演算子を使用します。
は、Perlで、私はこれをした:
my @UsedFieldNames = map { $UsedFields[$_] ? $FieldNames[$_] :() } 0 .. $#UsedFields;
と@UsedFields
が使用されるフィールドのために未使用と1 0を含む配列である
say join " ", map { $UsedFields[$_] ? $) :() } 0 .. $#UsedFields;
。
私は実際に圧縮をシミュレートするため
?:()
でマップを使用して好きではない - より良い方法は、(私の本当のプログラムはそれをファイルの上に垂直または縮小をシミュレートする三回目を行います)がありますか?結果を得るためにインデックス上で地図を作成するのは本当に好きではありません - それを計算する良い方法はありますか? (私は1つの最適化は、最初に使用したインデックスを計算するのだろうと思い、その後、
@UsedFieldNames = @FieldNames[@UsedIndexes];
私はgrepのが好き、私は見つけられません。最初の選択肢は '?:()'に勝る魅力的な改良です。私は覚えておくべき一般的なルールを見ています。 'map {x($ _)? $ _:()} y'は 'grep x($ _)、y'と置き換えることができます – NetMage
データの一部がハッシュであった場合、それは他に何をしているかによって決まります。 – ysth
+1この素敵なスプライス –