2016-09-10 15 views
0

次のコードは、デッキの2枚分のカードで実行され、デカルトのプレーンには重複がないようにします。ハスケルの3枚のカードとデッキの4枚のデカールのデカルトプレーン

allcards = [minBound..maxBound] :: [Card] 
    cartesianplane=[ [x ,y] | x <- allcards, y <- allcards, x < y ] 

3枚のカードと4枚のカードで、重複がないようにするにはどうすればよいですか。

+1

コード構造の最小量を変更する、 '[[X、Y、Z] | – Mephy

+0

検索機能を使用する場合は、リストやセットの生成に関する質問が数多くあります。 – jberryman

答えて

1

ここ再帰セットを生成する方法は次のとおり

-- an example set of cards: 
data Card = A | T | J | Q | K 
    deriving (Show, Read, Eq, Ord, Bounded, Enum) 

next intv a 
    | a == maxBound = [] 
    | otherwise  = intv (succ a) 

interval a = [ a .. ] 
interval2 a = [ [x,y] | x <- interval a, y <- next interval x ] 
interval3 a = [ x:y | x <- interval a, y <- next interval2 x ] 
interval4 a = [ x:y | x <- interval a, y <- next interval3 x ] 
interval5 a = [ x:y | x <- interval a, y <- next interval4 x ] 

例えば:

interval A = [A,T,J,Q,K] 
interval2 A = [[A,T],[A,J],[A,Q],[A,K],[T,J],[T,Q],[T,K],[J,Q],[J,K],[Q,K]] 
interval3 A = [[A,T,J],[A,T,Q],[A,T,K],[A,J,Q],[A,J,K],[A,Q,K],[T,J,Q],[T,J,K],[T,Q,K],[J,Q,K]] 
interval4 A = [[A,T,J,Q],[A,T,J,K],[A,T,Q,K],[A,J,Q,K],[T,J,Q,K]] 
interval5 A = [[A,T,J,Q,K]] 
関連する問題