函数式编程的总结

Car*_*ess 4 math scheme haskell functional-programming set

我在网上搜索排除 - 包含原则,我发现的是:

公式http://mathworld.wolfram.com/images/equations/Inclusion-ExclusionPrinciple/NumberedEquation3.gif

http://mathworld.wolfram.com/Inclusion-ExclusionPrinciple.html

如果你不理解这个公式我没关系,事实上,我需要的是实现这个:

例如,输入是:

(summation (list 1 2) 3) 其中(列表1 2)是i和j,3是和n的限制.

(n必须是sigma,但......)

然后,Scheme中的公式输出将是:

(清单(清单1 2)(清单1 3)(清单2 3))

我如何在Scheme或Haskell中实现它?(对不起我的英语不好).

sdc*_*vvc 6

在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
Run Code Online (Sandbox Code Playgroud)

第一行给出所有对(i,j)的列表,其中1 <= i <j <= 4

第二行给出i*j的列表,其中1 <= i <j <= 4

第三行给出这些值的总和:Σ1 <= i <j <= 4 i*j.