Les diagonales, c'est "l'indice i de la ligne i"...
Donc tu parcoures tes listes, avec un compteur d'indice incrémenté à chaque nouvelle liste. Et tu additionnes "les éléments à l'indice i de chaque liste l_i".
Pour diag2, c'est la même chose, sauf que tu inverses l'ordre de tes listes pour les parcourir à l'envers...
# Laid
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au message Haskell. Évalué à 3.
Donc tu parcoures tes listes, avec un compteur d'indice incrémenté à chaque nouvelle liste. Et tu additionnes "les éléments à l'indice i de chaque liste l_i".
Pour diag2, c'est la même chose, sauf que tu inverses l'ordre de tes listes pour les parcourir à l'envers...
l1=[[1,2,3],[4,5,6],[7,8,9]]
diag1 = fst . foldl (\(x,c) y -> (x+(y!!c),c+1)) (0,0)
diag2 = diag1 . reverse
main = do
print $ diag1 l1
print $ diag2 l1