Haskell: Verständnisproblem von powerset (bsp. aus Learn You A Haskell)
-
Hier die Funktion deren Funktionsweise ich nicht verstehe.
powerset :: [a] -> [[a]] powerset xs = filterM (\x -> [True, False]) xs
Hier die Ausgabe:
ghci> powerset [1,2,3] [[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]]
Kann mir jemand Schritt für Schritt die funktionsweise erläutern? Insbesondere in Bezug auf den Ausdruck \x->[True,False].
Mir leuchtet es momentan überhaupt nicht ein, wie diese Funktion diese Ausgabe liefern kann.
-
Ok hier meine Idee, ich hoffe das ist richtig:
[True,False] als monadischer Wert erzeugt jede mögliche kombination aus True und False für die liste xs im Sinne von:
True True True
True True False
True False True
True False False
False True True
False True False
False False True
False False FalseDiese Kombinationen werden benutzt um die liste [1,2,3] zu filtern was dann resultiert in
[[1, 2, 3], [1 2 ], [1, 3], [1 ], [ 2, 3], [ 2 ], [ 3], [ ]]
Richtig soweit?
-