我可以在这个表达式中解释列表理解:
[(i,j) | i <- [1..4], j <- [i+1..4]]
Run Code Online (Sandbox Code Playgroud)
这是输出:
[(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]
Run Code Online (Sandbox Code Playgroud)
我怎么能用地图,过滤器等编写那段代码?
编辑
这是另一个:
[(i,j,k) | i <- [1..6], j <- [i+1..6],k <- [j+1..6]]
Run Code Online (Sandbox Code Playgroud)
这是输出:
[(1,2,3),(1,2,4),(1,2,5),(1,2,6),(1,3,4),(1,3,5),(1,3,6),(1,4,5),(1,4,6),(1,5,6),(2,3,4),(2,3,5),(2,3,6),(2,4,5),(2,4,6),(2,5,6),(3,4,5),(3,4,6),(3,5,6),(4,5,6)]
Run Code Online (Sandbox Code Playgroud) haskell functional-programming list-comprehension list lazy-evaluation
我在网上搜索排除 - 包含原则,我发现的是:
公式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中实现它?(对不起我的英语不好).
我正在创建一个程序,允许用户引入一个 lambda 函数,只在界面编写框中编写它,如下所示:
(lambda (p q) (and (not p) q))
Run Code Online (Sandbox Code Playgroud)
这是结果 "(lambda (pq) (and (not p) q))" 因为 scheme 将其转换为字符串而不是可以评估的过程。
如何将此字符串转换为过程?