我有一个数据类型:
data Numbers = Numbers {a::Int, b::Int}
我如何构造[Numbers]
才能获得与
[[a,b] | a <- [1,2], b <- (filter (/=a) [1,2])]
所以结果将类似于[[1,2],[2,1]]
我有一个数据类型:
data Numbers = Numbers {a::Int, b::Int}
我如何构造[Numbers]
才能获得与
[[a,b] | a <- [1,2], b <- (filter (/=a) [1,2])]
所以结果将类似于[[1,2],[2,1]]
你必须使用Numbers
as 构造函数(注意:[]
也是构造函数,只是带有特定的语法糖,所以没有本质区别)。
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}]
这似乎只是一个带有移除的选择。您可以在较早的问题中找到有效的代码来执行此操作。
如果它肯定是关于两个元素,那么这个实现将是有效的:
do x:ys <- tails [1..3]
y <- ys
[(x, y), (y, x)]