我有一组某种类型的项目,想要生成它的幂集。
我在网上搜索了一下,没有找到任何针对这个特定任务的Scala代码。
以下是我提出的解决方案。它允许您通过长度参数限制所生成的集合的基数。
我在网上搜索了一下,没有找到任何针对这个特定任务的Scala代码。
以下是我提出的解决方案。它允许您通过长度参数限制所生成的集合的基数。
def power[T](set: Set[T], length: Int) = {
var res = Set[Set[T]]()
res ++= set.map(Set(_))
for (i <- 1 until length)
res = res.map(x => set.map(x + _)).flatten
res
}
这将不包括空集。要完成这个任务,您需要仅将方法的最后一行更改为 res + Set()。
有任何建议如何以更加函数式的风格完成此操作吗?
filterM
还可以用于什么? - oxbow_lakesx => if ...
None
/Some(false)
/Some(true)
)。单个None
将清除整个输入。但我猜可能会有更高级的用法,使用我从未听说过的奇异单子。 - DebilskiList(1, 2, 3).powerset
. :) - Debilskilet doYouLike it = fmap (== "y") $ putStr ("do you like " ++ show it ++ " (y/n)? ") >> getLine in filterM doYouLike ["scala", "haskell"]
- Travis BrownfilterM
和类似函数对于M=[a]State[X, a]
非常有用。例如,你可以使用以下代码过滤重复项:https://gist.github.com/3157243 - retronym