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 False

    Diese 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?




Anmelden zum Antworten