Impossible de comprendre pourquoi la correspondance de motif ne fonctionne pas! Je commence par Hasklell, alors soyez patient!Pourquoi j'obtiens "Exception: Prelude.head: liste vide"?
-- matrix implemented as a list of lists (rows of the matrix)
test_matrix3 = [[1,0,0],[2,-3,0],[4,5,6]]
-- transpose of a given matrix
transpose (x:[]) = [x]
transpose [email protected](x:_) = map head all : transpose ([tail y | y <- all])
exécution:
*Main> transpose test_matrix3
[[1,2,4],[0,-3,5],[0,0,6],[*** Exception: Prelude.head: empty list
Ici, la première clause est consciente que le premier élément est une liste vide, il suppose que les éléments restants sont également des listes vides. La deuxième clause peut être réécrite comme juste transposer xs = map head xs: (transposer '$ map tail xs) '. –
Je viens de modifier mon exemple entourant transposer l'appel récursif avec des parenthèses et ** ça marche **. Je suis un peu confus! ** Pourquoi ** ce comportement? EDIT: faux, fonctionne également sans parenthèses – gremo
Le dernier appel à 'transposer 'est' transpose' [[], [], []] ', il correspond à la première liste, et ignore la liste de repos, qui est' [[], []] '. –