Questa funzione di trasposizione della matrice funziona, ma sto cercando di capire la sua esecuzione passo dopo passo e non la capisco.Comprendere questa funzione di trasposizione della matrice in Haskell
transpose:: [[a]]->[[a]]
transpose ([]:_) = []
transpose x = (map head x) : transpose (map tail x)
con
transpose [[1,2,3],[4,5,6],[7,8,9]]
ritorna:
[[1,4,7],[2,5,8],[3,6,9]]
Non capisco come l'operatore di concatenazione sta lavorando con la mappa. Concatena ogni testa di x nella stessa chiamata di funzione? Come?
è questo
(map head x)
creazione di un elenco degli elementi di testa di ciascuna lista? sguardo
Questo non è è una risposta, ma in genere quando cerco di capovolgere qualcosa in Haskell, passerò un po 'di tempo a giocarci con GHCi. Prova "map head" o "map tail" su alcuni elenchi di elenchi e vedrai tu stesso come funzionano. Se vieni da un mondo imperativo, le mappe e le pieghe possono essere un po 'difficili da trovare. Sono i tuoi principali costrutti di looping - in sostanza sostituiscono "for" e "while" - così imparerai presto ad amarli. – rtperson
+1 Grok (blahh) –