この問題は "Functional Programming Principles in Scala" @ Coursera からのものであるため、この質問に完全なコードを含めることは避ける必要があります.締め切りは過ぎていますが、今後も常に何年もかかります. この変換を実装する方法に関する一般的な提案を探していました。
可変長のタプルのセット、小文字の文字列の完全なサブセットがあります
val indexes = Set('a', 'b', 'c')
および各文字の最大許容出現回数を持つタプルのセット
val occurences = Set(('a', 1), ('b', 5), ('c', 2))
加重タプルの組み合わせを取得したい:
val result = Seq(Set(), Set((a, 1)), Set((b, 1)), Set((b, 2)) ... Set((a, 1)(b, 2)(c, 2)) ...)
私の割り当ては、再帰的反復を介して結果を構築する簡単な方法を提案しています。
もっと「構造的に?」でやりたい。仕方。私の考えは、可能なすべての文字サブセットを取得し、重みを追加してそれらを多重化することでした(〜投稿の最後の行の疑似コード)。
subsets
ハンドリー演算子を介してサブセットを取得しました
val subsets = Seq(Set(), Set(a), Set(b), Set(c), Set(a, b), Set(a, c), Set(b, c), Set(a, b, c)
また、各文字の特定の Int 値のマップ、次のいずれか
val weightsMax Map(a -> 1, b -> 5, c -> 2)
val weightsAll Map(a -> List(1), b -> List(5,4,3,2,1), c -> List(2,1))
この操作にどの言語機能を使用すればよいかよくわかりません。コレクション操作については知ってfor
いますが、機能パラダイム(およびコレクション操作も)が初めてなので、このレベルの操作を操作した経験はありません。これを解決するために、企業スタイルのJava / XMLを作成しても問題はありません(ええ...)。
似たようなものを定義したいと思います:
FOREACH subset (MAP chars TO (COMBINATIONS OF weights FOR chars))