注: これは、相互排除の並行性の問題とは関係ありませんが、この問題を説明するより良い方法は思いつきませんでした。
ユーザーにいくつかのフラグを選択させたい場合があるという問題がありますが、一部のフラグは相互に排他的です。データ構造を使用してどのフラグが相互に排他的であるかを説明したいのですが、私が考えたものはすべてぎこちないものでした。
基本的に、フラグの使用方法を次のように指定できるようにしたいと考えています。
[ -fa | -e | -d ] [ -c ] [ -g | -h]
これは、意味的には、-fa、-e、-d のいずれかを使用できますが、2 つ以上を使用することはできません (ただし、f は a と共に使用でき、両方を使用する必要はありません)。-c を指定してもしなくてもかまいません。また、-g または -h のいずれかを指定できますが、両方を指定することはできません。
これが私の「最善の」解決策です。
Map[Flag, MutexGroup] (およびその逆、Map[MutexGroup, List[Flag]]) Map[MutexGroup, List[MutexGroup]]
私の例ではどのように見えるでしょうか
Map("f" -> 1, "a" -> 1, "e" -> 2, "d" -> 3, "c" -> 4, "g" -> 5, "h" -> 6 ) Map(1 -> List(2, 3), 2 -> List(1, 3), 3 -> List(1, 2), 4 -> List.empty, 5 -> List(6), 6 - > リスト(5))
簡潔にするために、Map[MutexGroup, List[Flag]] は含めていません。
このソリューションは、それを使用しなければならないことを考えるだけで身震いします。この種のことを処理する標準的な方法はありますか?