0

我有一个数据类型:

data Numbers = Numbers {a::Int, b::Int}

我如何构造[Numbers]才能获得与

[[a,b] | a <- [1,2], b <- (filter (/=a) [1,2])]

所以结果将类似于[[1,2],[2,1]]

4

2 回答 2

2

你必须使用Numbersas 构造函数(注意:[]也是构造函数,只是带有特定的语法糖,所以没有本质区别)。

data Numbers = Numbers {a::Int, b::Int}
               deriving Show

main = print [ Numbers a b | a <- [1, 2], b <- filter (/=a) [1, 2] ]

> main
[Numbers {a = 1, b = 2},Numbers {a = 2, b = 1}]
于 2012-09-20T08:35:44.797 回答
0

这似乎只是一个带有移除的选择。您可以在较早的问题中找到有效的代码来执行此操作。

如果它肯定是关于两个元素,那么这个实现将是有效的:

do x:ys <- tails [1..3]
   y <- ys
   [(x, y), (y, x)]
于 2012-09-20T08:59:15.540 回答