5

私は Haskell の完全な初心者で、宿題として 11 個の演習があり、そのうち 10 個は既に解決しています。セットのパワーセットを取得するための解決策をいくつか見つけましたが、リスト内包表記を含むものはありません。この場合(宿題なので)完全な回答を求めるべきではないことは承知していますが、フィードバック/手がかりをいただければ幸いです。

集合Sのべき集合は、 Sのすべての部分集合を含む集合です。powerset指定されたセットのすべてのサブセットを含むセットを返す再帰関数を作成します。直接再帰とリスト内包表記を使用します。

4

3 に答える 3

7

直接再帰とリスト内包表記の使用:

type Set a = [a]

powerset :: Set a -> Set (Set a)
powerset [] = [[]]
powerset (x:xs) = [x:ps | ps <- powerset xs] ++ powerset xs
于 2016-09-16T20:16:04.113 に答える
5

わかりましたここに私のヒントがあります:

次のようなものを見ると、サブセットに含める(x:xs)かどうかを選択できます。 x

どういうわけか両方の選択肢を使用する必要があります(おそらく(++);))...

ここで、他のヒント (再帰 ... xs....) を思い出してください。[x:ys | ys <- ...]


ところで: それはほとんど不正行為ですが、記法を使用して解決策を見つけた場合do: これをリスト内包表記に変換するのは非常に簡単です ;) - 進行状況を少し投稿できますか?

于 2015-09-15T08:06:44.057 に答える