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

コンストラクターとして使用する必要がありますNumbers(注:[]もコンストラクターであり、特定の構文シュガーのみを使用するため、基本的な違いはありません)。

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

これは、削除を伴う選択に他なりません。古い質問でそれを行うための効率的なコードを見つけることができます。

確かにちょうど 2 つの要素についてである場合、この実装は効率的です。

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