【发布时间】:2011-12-21 13:27:27
【问题描述】:
我在网上搜索排除-包含原则,我发现是这样的:
(来自 MathWorld - Wolfram 网络资源:wolfram.com)
http://mathworld.wolfram.com/Inclusion-ExclusionPrinciple.html
看不懂公式也没关系,其实我需要的就是实现这个:
例如输入为:
(summation (list 1 2) 3)其中 (list 1 2) 是 i 和 j,3 是和 n 的极限。
(n 必须是 sigma 但是...)
那么,公式在Scheme中的输出将是:
(列表(列表 1 2)(列表 1 3)(列表 2 3))
如何在 Scheme 或 Haskell 中实现这一点? (对不起我的英语)。
【问题讨论】:
-
第二个公式末尾悬空的
+符号是什么?它属于那里吗? -
只是从大公式中删除的剩余部分。
-
我有点困惑。显然您希望函数的结果是一个列表,但您给出的公式计算的是一个数字,而不是一个列表(或一组)。
-
@sepp2k 是的,这些是一些集合的数字。如果解决方案是 (... (list 1 2) ..) 那么,我假设 1 代表 A,2 代表 B。谢谢提问。
-
Daniel Fischer 的answer 应该是公认的答案。如问题中所要求的,其他两个投票最多的答案不计算重叠集并集的长度,这是包含-排除原则所涉及的。他们也不计算一组集合的成对交集的长度总和,这是问题中明确要求的更具体的子问题。
标签: math haskell functional-programming scheme set