Ich lese gerade Simon Thompsons Haskell: Das Handwerk der funktionalen Programmierung und ich frage mich, wie das funktioniert:
perms [] = [[]]
perms xs = [ x:ps | x <- xs , ps <- perms ( xs\\[x] ) ]
Ich kann nicht begreifen, wie das perms( xs\\[x] )
funktionieren soll. Die Spur einer zwei Elemente umfassenden Liste zeigt:
perms [2,3]
[ x:ps | x <- [2,3] , ps <- perms ( [2,3] \\ [x] ) ] exe.1
[ 2:ps | ps <- perms [3] ] ++ [ 3:ps | ps <- perms [2] ] exe.2
...
Wie kommt man von exe.1
a exe.2
?
2 Stimmen
Weißt du was, ich bin ein Idiot. Das war die erste Spur, die ich zum Verstehen der Liste gesehen habe. Der Ablaufplan zeigt, dass alle Elemente der Liste nacheinander erstellt werden. Ich weiß nicht, warum ich dachte, dass die dritte Zeile unten das zweite zu erstellende Element der Liste sei.