Я хочу, чтобы в Ocaml было сделано следующее, но ответ на ex F # мог бы дать мне достаточно информации, чтобы я мог самостоятельно выполнить преобразование.
Упорядоченный заказанный блок питания (от самого большого до самого маленького) заставил бы меня сделать еще один шаг вперед к решению проблемы, к которой я хочу в идеале.
Для неэффективной раскраски графа мне нужна функция, которая дает мне следующее:
f({a,b,c,d}):
{{a,b,c,d}}
{{a,b,c},{d}}
{{a,b,d},{c}}
{{a,c,d},{b}}
{{b,c,d},{a}}
{{a,b},{c,d}}
{{a,c},{b,d}}
{{a,d},{b,c}}
{{a},{b,c},{d}}
{{a},{b},{c,d}}
{{a},{b,d},{c}}
...
{{a},{b},{c},{d}}
в виде списка наборов (или, лучше, в виде отложенного списка / перечисления наборов)
Итак, я хочу, чтобы все переменные были представлены в некотором наборе. Но я хочу, чтобы он был упорядочен, поэтому сначала я получу один с наименьшим числом наборов, а последний - с набором всех переменных.
У меня есть одно решение, которое выглядит примерно так:
f: Take powerset -> iterate -> apply f on the rest
<- sort the whole list of possibilities
Но я бы хотел избежать сортировки экспоненциального списка. И, надеюсь, я могу сделать это с помощью ленивого списка, поэтому я избегаю повторения всех возможностей.