Christian Seiler: Haskell: Permutationen

Beitrag lesen

Hallo,

Dazu soll z.B. permutations "ab" aufgerufen werden und ungefähr sowas zurückgegeben werden: ["a","ab","ba","b"]

Ich habe kurz versucht, durch Deinen Code durchzusteigen und muss sagen, dass mir irgendwie alles im Kopf herumschwirrt. ;-)

Ich hab eine Idee aus Deinem Code genommen (das Einfügen an alle Zwischenstellen) und den Rest mir selbst mal überlegt:

permutations :: String -> [String]  
permutations s = filter (/= "") (phelp s)  
     where  
         phelp "" = [""]  
         phelp (x:xs) = phelp xs ++ concat [ins x y | y <- phelp xs]  
         ins c s = [(take pos s ++ [c] ++ drop pos s) | pos <- [0..(length s)]]

Das macht genau das, was Du willst. Ich hoffe, der Code ist selbsterklärend, wenn Du noch eine Erklärung willst, reiche ich die gerne nach.

Viele Grüße,
Christian