Haskell'de bir set almak ve giriş listesine neyin girildiğine bakılmaksızın, güç girişlerini çift giriş olmaksızın çıkartan bir powerset işlevi oluşturmam gerekiyor. Örneğin, [1,1] [[[] 1]] döndürmelidirKopya Olmadan Powerset
powerset [] = [[]]
powerset (x:xs) = union((powerset xs)) (map (x:) (powerset xs))
birlik daha önce tanımlandığı işlev yinelenmemiş iki takım bitişik olan
. Yukarıdaki kodla ilgili sorun, kopyaları orijinal girdiler olarak saymasıdır, böylece [1,1] girişi [[], [1], [1], [1.1]] döndürür.
Herhangi bir fikrin var mı? Giriş listesini ve kopyaları tetiklemeden önce kopyaları çoğaltmak için boş listeyi kullanmayı düşündüm, ancak bunun nasıl görüneceğinden emin değilim.
Tam olarak etkili değil: 'filterM (const [Doğru, Yanlış]) $ nub xs' – Sibi