私はこのコードを持って、合法的な単語を形成する一連の文字のすべての順列を見つけます。
>>Combinatorica`
Module[{str = "abc", chars, len, r, check},
chars = Characters[str];
len = StringLength[str];
r = Range[len];
check[n_Integer] :=
DictionaryLookup[{"BritishEnglish",
StringJoin[chars[[UnrankPermutation[n, r]]]]}, 1];
DistributeDefinitions[check, chars, r];
ParallelTable[check[i], {i, 1, len!}]]
ParallelTableをTableに置き換えると、次のようになることを確認しました。
{{}, {}, {}, {"cab"}, {}, {}}
ただし、ParallelTableを使用すると、その結果に加えて、次のような警告も表示されます。
Part::pspec: Part specification Combinatorica`UnrankPermutation[1,{1,2,3}] is neither a machine-sized integer nor a list of machine-sized integers.
Part::pspec: Part specification Combinatorica`UnrankPermutation[2,{1,2,3}] is neither a machine-sized integer nor a list of machine-sized integers.
StringJoin::string: String expected at position 1 in StringJoin[{a,b,c}[[Combinatorica`UnrankPermutation[1,{1,2,3}]]]].
StringJoin::string: String expected at position 1 in StringJoin[{a,b,c}[[Combinatorica`UnrankPermutation[2,{1,2,3}]]]].
これらの警告は、カーネル7以降から発生しているようです。私の推測では、計算はそれらのカーネルに到達し、データは残っていません。これは、順列が6つしかないため、警告を吐き出す原因になるためです。
私の理解は正しいですか?これらの警告を防ぐにはどうすればよいですか?