- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Learn You a Haskell演示 powerset
功能:
The
powerset
of some set is a set of all subsets of that set.
powerset :: [a] -> [[a]]
powerset xs = filterM (\x -> [True, False]) xs
ghci> powerset [1,2,3]
[[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]]
filterM
的签名(如下所示),但我不明白它是如何执行的。
filterM :: Monad m => (a -> m Bool) -> [a] -> m [a]
powerset
功能。
最佳答案
powerset :: [a] -> [[a]]
powerset xs = filterM (\x -> [True, False]) xs
------------- -----
filterM :: Monad m => (a -> m Bool ) -> [a] -> m [a]
-- filter :: (a -> Bool ) -> [a] -> [a] (just for comparison)
------------- -----
m Bool ~ [Bool] m ~ []
filter
“在”非确定性(列表)单子(monad)中。
>> filterM (\x-> if even x then Just True else Nothing) [2,4..8]
Just [2,4,6,8]
>> filterM (\x-> if even x then Just True else Nothing) [2..8]
Nothing
>> filterM (\x-> if even x then Just True else Just False) [2..8]
Just [2,4,6,8]
filter_M :: Monad m => (a -> m Bool) -> [a] -> m [a]
filter_M p [] = return []
filter_M p (x:xs) = p x >>= (\b ->
if b
then filter_M p xs >>= (return . (x:))
else filter_M p xs )
return
的定义并绑定(bind)(
>>=
)(即
return x = [x]
,
xs >>= f = concatMap f xs
),这变成
filter_L :: (a -> [Bool]) -> [a] -> [[a]]
filter_L p [] = [[]]
filter_L p (x:xs) -- = (`concatMap` p x) (\b->
-- (if b then map (x:) else id) $ filter_L p xs )
-- which is semantically the same as
-- map (if b then (x:) else id) $ ...
= [ if b then x:r else r | b <- p x, r <- filter_L p xs ]
-- powerset = filter_L (\_ -> [True, False])
-- filter_L :: (a -> [Bool] ) -> [a] -> [[a]]
powerset :: [a] -> [[a]]
powerset [] = [[]]
powerset (x:xs)
= [ if b then x:r else r | b <- (\_ -> [True, False]) x, r <- powerset xs ]
= [ if b then x:r else r | b <- [True, False], r <- powerset xs ]
= map (x:) (powerset xs) ++ powerset xs -- (1)
-- or, with different ordering of the results:
= [ if b then x:r else r | r <- powerset xs, b <- [True, False] ]
= powerset xs >>= (\r-> [True,False] >>= (\b-> [x:r|b] ++ [r|not b]))
= powerset xs >>= (\r-> [x:r,r])
= concatMap (\r-> [x:r,r]) (powerset xs) -- (2)
= concat [ [x:r,r] | r <- powerset xs ]
= [ s | r <- powerset xs, s <- [x:r,r] ]
powerset
的两个常用实现。功能。
const [True, False]
),因此可以翻转处理顺序。否则,测试将针对相同的输入值一遍又一遍地评估,我们可能不希望这样。
关于haskell - Powerset 功能 1-Liner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25476248/
我得到了一个列表列表 s : s = [["a1", "A"], ["b4", "B"], ["a3", "A"], ["d6", "D"], ["c4", "C"]] (请注意,列表中的元素不一定以
我正在尝试以两种方式在 Scheme 中实现幂集函数。一种方法是使用尾递归,我是这样做的: (define (powerset list) (if (null? list) '(())
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我需要在 haskell 中创建一个幂集函数,它接受一个集合并输出没有重复条目的幂集,无论输入列表中放入什么。例如:[1,1] 应返回 [[],[1]] powerset [] = [[]]
我使用位移来生成给定数字字符串的幂集。我怎样才能将它限制在一定的长度,比如 4,从而通过不找到不需要的长度的子序列来缩短执行时间。 例如:如果给定的数字字符串是 10292,则只需要以下子序列:102
谷歌搜索了一段时间以找到字符串的子集,我读到 wikipedia 它提到了 .....对于 S 的整个幂集,我们得到: { } = 000 (Binary) = 0 (Decimal) {x} = 1
这个问题在这里已经有了答案: Obtaining a powerset of a set in Java (27 个答案) 关闭 9 年前。 我想找到给定集合的所有子集。我得到的字符串集定义如下:H
下面的函数返回一个集合(列表)的幂集。 let rec powerset = function | [] -> [[]] | x::xs -> List.collect (fun sub ->
Haskell 的表达能力使我们能够相当容易地定义 powerset 函数: import Control.Monad (filterM) powerset :: [a] -> [[a]] power
众所周知,列表的幂集: {1,2,3,4} 是 {{},{1},{2},{1,2},{3},{1,3},{2,3},{1,2,3 },{4},{1,4},{2,4},{1,2,4},{3,4},{1,
我正在尝试寻找一种有效 的方法来获取 PowerSet 的一组子集。 例如,这在集合尺寸较小时有效: Set set = new HashSet(); set.add(1); set.add(2);
是否有一些等效的库或函数可以为我提供一组值的下一个组合,例如 next_permutation 对我有帮助吗? 最佳答案 组合:来自 Mark Nelson 关于同一主题的文章,我们有 next_co
因此,我需要递归地查找给定字符串的所有子集。到目前为止我所拥有的是: static ArrayList powerSet(String s){ ArrayList ps = new A
我正在尝试生成一个集合的幂集,并且我编写了这段代码。问题是,当用户输入集合中的两个相似成员时,它无法正常工作。我能做什么?这是我的代码: #include #include #include #
所以我得到了这个用于 powerset: powerset([], []). powerset([H|T], P) :- powerset(T,P). powerset([H|T], [H|P]) :
我正在使用带有 DrRacket 列表缩写的起始语言,并且想要递归地创建一个 powerset,但无法弄清楚如何去做。我目前有这么多 (define (powerset aL) (cond
Learn You a Haskell演示 powerset功能: The powerset of some set is a set of all subsets of that set. powe
用于环境共享和不确定性的规范“Monad 实例”如下(使用伪 Haskell,因为 Haskell 的 Data.Set 当然不是 Monadic): eta :: a -> r -> {a} --
我有一些这样的代码 import com.google.common.collect.Sets; public void handleInput(Set conditions){ Set> p
为了获取列表的幂集,我实现了以下内容: public static ArrayList> getAllSubsets(ArrayList set, int index, ArrayList subse
我是一名优秀的程序员,十分优秀!