Sto leggendo di Simon Thompson Haskell: The Craft della programmazione funzionale, e mi chiedo come fa questo lavoro:Come funziona questa funzione Haskell per calcolare le permutazioni usando il lavoro di comprensione delle liste?
perms [] = [[]]
perms xs = [ x:ps | x <- xs , ps <- perms (xs\\[x]) ]
io non riesco a capire come che perms(xs\\[x])
si suppone a funzionare. La traccia di una lista a due elementi mostra:
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
...
Come si fa a passare exe.1
-exe.2
?
Perché il downvote? –
Sai cosa, sono un idiota. Questa è stata la prima traccia che ho visto della comprensione delle liste. La traccia mostra tutti gli elementi della lista da creare uno alla volta. Non so perché stavo pensando che la terza riga in basso fosse il secondo elemento della lista da creare. –