如何列出haskell列表中的所有不同的2元素列表?

时间:2018-03-29 13:04:35

标签: haskell

例如,我有[1,2,3],我想获得[[1,2],[1,3],[2,3]]。此外,在列表中,[1,2][2,1]被假定为相同,所以只需在结果中留一个,我还想添加一个条件,比如'子列表中元素的总和更小比4',结果应该是[[1,2]]。

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用列表理解:

input = [1,2,3]
output = [ [x,y] | x <- input, y <- input, x < y, x + y < 4]

-- [[1,2]]

答案 1 :(得分:1)

这是一个适用于不同类型的函数:

import           Math.Combinat.Sets (choose)

select :: Int -> ([a] -> Bool) -> [a] -> [[a]]
select k filtering list = filter filtering (choose k list)

示例:

>>> select 2 (\x -> sum x < 5) [1,2,3]
[[1,2],[1,3]]
>>> select 2 (not . elem "hello") ["hello", "how", "are", "you"]
[["how","are"],["how","you"],["are","you"]]