Как работает sofs:partitions в Erlang?

Примечание. Этот вопрос основан на переосмыслении моего предыдущего аналогичного вопрос.

Я хотел бы знать, выполняет ли Erlang sofs:partition то же самое, что описано на странице Википедии о установке разделов.

Если это так, как я могу получить следующий результат?

Учитывая структуру данных (набор наборов или список списков):

   [a,b,c]
    [a,b]
    [c]
    [d,e,f]
    [d,f]
    [e]

который содержит следующие уникальные элементы:

a,b,c,d,e,f

результат запуска функции с аргументом N = 2 должен быть:

[[a,b,c], [d,e,f]]

В то время как следующие разделы должны быть отфильтрованы в процессе выполнения sofs:partition:

[[a,b,c], [d,f], [e]]
[[a,b], [c], [d,e,f]]
[[a,b], [c], [d,f], [e]]

Могу ли я сделать это с помощью sofs:partition? Если да, могу ли я сделать это итеративно, выбрасывая партиции length(Partition) =/= N во время выполнения? Можно ли как-то переопределить функцию sofs:partition, чтобы ввести аргумент N?


person skanatek    schedule 05.01.2012    source источник


Ответы (1)


Вероятно, вы можете просто передать результат sofs:partition в lists:foldl и вручную отфильтровать разделы неправильной длины.

Если это не подходит для вашей задачи (например, второй запуск неприемлем), вы можете просто взглянуть на исходники sofs, используйте его в качестве примера и создайте свою собственную функцию, которая делает именно то, что вам нужно, за один проход.

person Ivan Blinkov    schedule 19.04.2012