私はデータ型を持っています:
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
(注:[]
もコンストラクターであり、特定の構文シュガーのみを使用するため、基本的な違いはありません)。
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}]
これは、削除を伴う選択に他なりません。古い質問でそれを行うための効率的なコードを見つけることができます。
確かにちょうど 2 つの要素についてである場合、この実装は効率的です。
do x:ys <- tails [1..3]
y <- ys
[(x, y), (y, x)]