我正在嘗試編寫一個可以返回用戶定義的分區集的Haskell程序。集合S的劃分被定義爲S的非空成對不相交子集合,其結合爲S.因此,[1,2,3]
返回[[[2],[3,1]],[[2,1],[3]],[[3,2,1]],[[1],[3,2]],[[1],[2],[3]]]
。我想我可以利用我剛纔寫的一個不同的程序,從兩套中找到笛卡爾積。所以,[1,2,3] ['a', 'b']
返回[(1,'a'),(1,'b'),(2,'a'),(2,'b'),(3,'a'),(3,'b')]
。但是,我不確定相當多。我認爲這將需要遞歸,如果這甚至可以適當地適應。這裏是集代碼:Haskell中的一組分區
type Set a = [a]
isElement :: Eq a => a -> [a] -> Bool
isElement x [] = False
isElement x (y:ys) = if(x==y) then True else isElement x ys
subset :: Eq a => Set a -> Set a -> Bool
subset [] xs = True
subset (y:ys) xs = if(isElement y xs == True)
then do subset ys xs
else do False
。如果你可以對'X'進行分區,那麼你如何分配'X∪{a}'? –
小調風格的評論:你發佈的「if」似乎是一種複雜的寫作方式,分別是1)'x == y || isElement x ys'和2)'isElement y xs && subset ys xs'。這裏不需要'做','== True'總是多餘的。 – chi