我在网上搜索排除-包含原则,我发现的是:
(来自 MathWorld - Wolfram 网络资源: wolfram.com )
http://mathworld.wolfram.com/Inclusion-ExclusionPrinciple.html
不懂公式没关系,其实我需要的是实现这个:
例如,输入是:
(summation (list 1 2) 3)
Where (list 1 2) is i and j and 3 is the limit of the sum n.
(n 必须达到 sigma 但...)
然后,Scheme 中公式的输出将是:
(list (list 1 2) (list 1 3) (list 2 3))
我如何在 Scheme 或 Haskell 中实现它? (对不起我的英语不好)。
最佳答案
在 Haskell 中,使用列表推导式:
Prelude> [(i,j) | i <- [1..4], j <- [i+1..4]]
[(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]
Prelude> [i * j | i <- [1..4], j <- [i+1..4]]
[2,3,4,6,8,12]
Prelude> sum [i * j | i <- [1..4], j <- [i+1..4]]
35
第一行给出了所有对 (i,j) 的列表,其中 1 <= i < j <= 4
第二行给出了 i*j 的列表,其中 1 <= i < j <= 4
第三行给出了这些值的总和:Σ1 <= i < j <= 4 i*j。
关于math - 函数式编程中的求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001890/